Автор работы: Пользователь скрыл имя, 20 Марта 2012 в 06:58, курсовая работа
Требуется разработать программу, позволяющую решать задачу динамического программирования о распределении капиталовложений. Количество предприятий принять равным 5, сумма кредита150 тыс. денежных единиц, кратность распределяемой суммы и другие необходимые данные ввести с клавиатуры.
Исходными данными являются количество предприятий, распределяемая сумма, кратность суммы и значения целевой функции для управлений.
1 ПОСТАНОВКА ЗАДАЧИ
4
2 ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ АЛГОРИТМОВ
6
3 ОПИСАНИЕ ПРОГРАММЫ
10
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ
13
ЗАКЛЮЧЕНИЕ
16
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
4.2 Тестирование программы
В появившемся при запуске программы окне введём исходные данные и нажмём кнопку «Далее». Автоматически сформируется таблица для ввода значений целевой функции для управлений.
Рисунок 3 – Таблица для ввода значений целевой функции
Введём значения целевой функции и нажмём кнопку «Далее». В нижнем текстовом поле отобразиться результат решения задачи. При нажатии кнопки «Сбросить» программа вернётся в исходное состояние, показанное на рисунке 2.
Рисунок 4 – Задача решена
ЗАКЛЮЧЕНИЕ
Результатом
курсовой работы является программа, позволяющая
решать задачу динамического программирования
о распределении
1. Сборник
задач и упражнений по высшей
математике: Математическое
2. Дегтярев Ю.Н. Исследование операций: Учеб.для вузов по спец. АСУ. – М.: Высш. шк., 1986. – 320 с.: ил.
3. Таха, Хэмди, А. Введение в исследование операций, 6-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2001. – 912 с.: ил – Парал. Тит. Англ.
ПРИЛОЖЕНИЕ А – Листинг основных компонентов
namespace Capital
{
public partial class Form1 : Form
{
int M = 0;
int summa = 0;
int CN = 0;
intfvd = 60;
int step = 0;
List<List<int>>infoData = new List<List<int>>();
public Form1()
{
InitializeComponent();
}
private void btnn1_Click(object sender, EventArgs e)
{
switch (step)
{
case 0:
{
M = int.Parse(tbN.Text);
summa = int.Parse(tbSum.Text);
CN = int.Parse(tbC.Text);
for (inti = dgvMain.Columns.Count - 1; i>= 0; i--)
{
dgvMain.Columns.RemoveAt(i);
}
for (inti = 0; i< M + 2; i++)
{
dgvMain.Columns.Add("Column", "");
dgvMain.Columns[i].Width = fvd;
}
dgvMain.Rows.Add(CN + 2);
dgvMain.ColumnHeadersVisible = false;
dgvMain.RowHeadersVisible = false;
dgvMain.Rows[0].Cells[0].Value = "Ui";
for (inti = 0; i< M; i++)
{
dgvMain.Rows[0].Cells[i + 1].Value = "Z" + (i + 1).ToString() + "(Ui)";
dgvMain.Rows[1].Cells[i + 1].Value = "0";
}
intval = 0;
for (inti = 0; i< CN + 1; i++)
{
dgvMain.Rows[i + 1].Cells[0].Value = val;
val += summa / CN;
}
step = 1;
tbC.Enabled = false;
tbN.Enabled = false;
tbSum.Enabled = false;
}
break;
case 1:
{
infoData.Clear();
for (inti = 0; i< M + 1; i++)
{
infoData.Add(new List<int>());
for (int j = 0; j < CN + 1; j++)
{
infoData[i].Add(int.Parse(
}
}
Table fT = new Table(CN + 1);
for (inti = 0; i< CN + 1; i++)
{
fT.XSim123[i] = infoData[0][i];
fT.Uifg[i] = infoData[0][i];
fT.Xiw[i] = 0;
fT.Zi[i] = XETz(infoData, fT.Uifg[i],
fT.Fi[i] = fT.Zi[i];
}
// Строимтаблицы
List<Table> Tables = new List<Table>();
for (int n = 0; n < M - 2; n++)
{
Tables.Add(new Table(CN + 1));
Tables[n].XSim123[0] = 0;
Tables[n].Uifg[0] = 0;
Tables[n].Xiw[0] = 0;
Tables[n].Zi[0] = 0;
Tables[n].Fip1[0] = 0;
Tables[n].ZipFiplit[0] = 0;
Tables[n].Fi[0] = 0;
for (int c = 1; c < CN + 1; c++)
{
for (inti = 0; i< c + 1; i++)
tT.XSim123[i] = summa / CN + Tables[n].XSim123[c - 1];
tT.Uifg[i] = i * (summa / CN);
tT.Xiw[i] = tT.XSim123[i] - tT.Uifg[i];
tT.Zi[i] = XETz(infoData, tT.Uifg[i], M - (2 + n));
// Исчем [эф и плюс первое]
if (n == 0)
for (int j = 0; j < CN + 1; j++)
if (fT.XSim123[j] == tT.Uifg[i])
tT.Fip1[i] = fT.Fi[j];
break;
else
for (int j = 0; j < CN + 1; j++)
if (Tables[n - 1].XSim123[j] == tT.Uifg[i])
tT.Fip1[i] = Tables[n - 1].Fi[j];
break;
tT.ZipFiplit[i] = tT.Zi[i] + tT.Fip1[i];
}
tT.Selected = 0;
for (inti = 1; i< c + 1; i++)
if (tT.Fi[i] > tT.Fi[tT.Selected]) tT.Selected = i;
}
Tables[n].XSim123[c] = tT.XSim123[tT.Selected];
}
}
// Строимпоследнюютабличечку
Table lT = new Table(CN + 1);
for (inti = 0; i< CN + 1; i++)
{
lT.XSim123[i] = summa;
lT.Uifg[i] = i * (summa / CN);
lT.Xiw[i] = lT.XSim123[i] - lT.Uifg[i];
lT.Zi[i] = XETz(infoData, lT.Uifg[i], 0);
// Исчем [эф и плюс первое]
for (int j = 0; j < CN + 1; j++)
{
if (Tables[Tables.Count - 1].XSim123[j] == lT.Xiw[i])
lT.Fip1[i] = Tables[Tables.Count - 1].Fi[j];
break;
}
// Нашлиего
lT.ZipFiplit[i] = lT.Zi[i] + lT.Fip1[i];
lT.Fi[i] = lT.ZipFiplit[i];
}
// Заполнили послед. таблицу
// Ищем в ней экстр. значение
lT.Selected = 0;
for (inti = 1; i< CN + 1; i++)
{
if (lT.Fi[i] > lT.Fi[lT.Selected]) lT.Selected = i;
}
// Нашли его
// Находим управления
List<int>U = newList<int>();
for (inti = 0; i< M; i++) U.Add(-1);
int REM = summa;
U[0] = lT.Uifg[lT.Selected];
REM = summa - U[0];
int cx = 1;
for (inti = M - 3; i>= 0; i--)
{
for (int j = 0; j < CN + 1; j++)
{
if (Tables[i].XSim123[j] == REM)
cx++;
break;
}
}
for (int j = 0; j < CN + 1; j++)
{
if (fT.XSim123[j] == REM)
{
U[U.Count - 1] = fT.XSim123[j];
break;
}
}
stringstOut = "";
for (inti = 0; i<U.Count; i++)
{
stOut += U[i].ToString();
if (i != (U.Count - 1)) stOut += ", ";
}
tbOut.Text = "Задачарешена: U* = (" + stOut + ")";
step = 2;
btnn1.Text = "Сбросить";
}
break;
case 2:
{
tbC.Enabled = true;
tbN.Enabled = true;
tbSum.Enabled = true;
tbOut.Text = "";
tbC.Text = "";
tbN.Text = "";
tbSum.Text = "";
btnn1.Text = "Далее";
for (inti = dgvMain.Columns.Count - 1; i>= 0; i--)
{
dgvMain.Columns.RemoveAt(i);
}
}
break;
}
}
privateintXETz(List<List<int>> date, int Value, int Number)
{
for (inti = 0; i< date[0].Count; i++)
{
if (date[0][i] == Value)
{
return date[Number + 1][i];
}
}
return -1;
}
}
public class Table
{
public Table(int Size)
{
XSim123 = new int[Size];
Uifg = new int[Size];
Xiw = new int[Size];
Zi = new int[Size];
Fip1 = new int[Size];
ZipFiplit = new int[Size];
Fi = new int[Size];
Selected = -1;
}
publicint[] XSim123 { get; set; }
publicint[] Uifg { get; set; }
publicint[] Xiw { get; set; }
publicint[] Zi { get; set; }
publicint[] Fip1 { get; set; }
publicint[] ZipFiplit { get; set; }
publicint[] Fi { get; set; }
publicint Selected { get; set; }
}
}