Задача о распределении капиталовложений

Автор работы: Пользователь скрыл имя, 20 Марта 2012 в 06:58, курсовая работа

Описание

Требуется разработать программу, позволяющую решать задачу динамического программирования о распределении капиталовложений. Количество предприятий принять равным 5, сумма кредита150 тыс. денежных единиц, кратность распределяемой суммы и другие необходимые данные ввести с клавиатуры.
Исходными данными являются количество предприятий, распределяемая сумма, кратность суммы и значения целевой функции для управлений.

Содержание

1 ПОСТАНОВКА ЗАДАЧИ
4
2 ОПИСАНИЕ ИСПОЛЬЗУЕМЫХ АЛГОРИТМОВ
6
3 ОПИСАНИЕ ПРОГРАММЫ
10
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ
13
ЗАКЛЮЧЕНИЕ
16
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Работа состоит из  1 файл

Пояснительная записка.docx

— 286.58 Кб (Скачать документ)
ol style="list-style:decimal">
  • Текстовые поля для ввода исходных данных (вверху) и для вывода результатов (внизу).
  • Таблицу для ввода исходных данных, а именно, значений целевой функции для управлений.
  •  

     

    4.2 Тестирование  программы

     

    В появившемся  при запуске программы окне введём исходные данные и нажмём кнопку «Далее». Автоматически сформируется таблица  для ввода значений целевой функции  для управлений.

     

    Рисунок 3 – Таблица для ввода значений целевой функции

     

    Введём значения целевой функции и нажмём кнопку «Далее». В нижнем текстовом поле отобразиться результат решения  задачи. При нажатии кнопки «Сбросить» программа вернётся в исходное состояние, показанное на рисунке 2.

     

     

    Рисунок 4 – Задача решена

     

     

    ЗАКЛЮЧЕНИЕ

     

    Результатом курсовой работы является программа, позволяющая  решать задачу динамического программирования о распределении капиталовложений. Данный алгоритм полезно знать, так  как его практическое применение оправдано.

     

    СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

     

    1. Сборник  задач и упражнений по высшей  математике: Математическое программирование: Учеб.пособие/ А.В. Кузнецов, В.А. Сакович, Н.И. Холод и др.; Под общ. ред. А.В. Кузнецова.- Мн.: Выш.шк., 1995.- 382 с.: ил.

    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(dgvMain.Rows[j + 1].Cells[i].Value.ToString()));

                                }

                            }

     

                            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],

                                    M - 1);

                                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++)

                                {

                                    // Заполняемпромежуточнуютаблицу

                                    Table tT = new Table(c + 1);

    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.Fi[i] = tT.ZipFiplit[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];

                                    Tables[n].Uifg[c] = tT.Uifg[tT.Selected];

                                    Tables[n].Xiw[c] = tT.Xiw[tT.Selected];

                                    Tables[n].Zi[c] = tT.Zi[tT.Selected];

                                    Tables[n].Fip1[c] = tT.Fip1[tT.Selected];

                                    Tables[n].ZipFiplit[c] = tT.ZipFiplit[tT.Selected];

                                    Tables[n].Fi[c] = tT.Fi[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)

                                    {

                                        U[cx] = Tables[i].Uifg[j];

                                        REM = REM - U[cx];

    cx++;

    break;

                                    }

                                }

                            }

    for (int j = 0; j < CN + 1; j++)

                            {

    if (fT.XSim123[j] == REM)

                                {

    U[U.Count - 1] = fT.XSim123[j];

                                    REM = REM - U[cx];

    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; }

        }

    }

     


    Информация о работе Задача о распределении капиталовложений