Автор работы: Пользователь скрыл имя, 30 Мая 2013 в 17:20, курсовая работа
Целью данной работы является проектирование и разработка информационной системы, которая помогала бы в кратчайшие сроки принять оптимальное решение о капиталовложениях для целей реконструкции заводов отрасли.
Для достижения поставленной цели, выбирается метод решения, далее составляется подробный алгоритм работы. Для ЭВМ на основе алгоритма разрабатывается программа, после чего проводится количественное исследование с помощью ручных и машинных расчетов.
Введение …………………………………………………………………………………….4
1 Постановка задачи……………………………………………………………………….5
Качественное описание исследуемой операции…………………………………5
Математическая постановка задачи………………………………………………..6
2 Алгоритмизация решения задачи……………………………………………….…….8
Анализ методов решения…………………………………………………………….8
Задача о распределении капиталовложений……………………………………12
Проектирование сценария диалога………………………………………………..14
Метод оптимизации реконструкции заводов отрасли…………………………..16
Численные эксперименты……………………………………………………………21
Ручная реализация метода динамического программирования для задачи реконструкции отрасли……………………………………………………………….21
Машинные эксперименты……………………………………………………………24
Заключение………………………………………………………………………………….25
Список литературы…………………………………………………………………………26
Приложение – листинг программы……………………………………………………27
следовательно, данная задача может быть решена методом динамического программирования.
5. Определение функции перехода в новое состояние.
Таким образом, если на i-м шаге система находилась в состоянии s, а выбрано управление x, то на i+1-м шаге система будет находиться в состоянии s-x. Другими словами, если в наличии имеются средства в размере s у.е., и в i-е предприятие инвестируется x у.е., то для дальнейшего инвестирования остается (s-x) у.е.
6. Составление функционального
уравнения для i=m.
На последнем шаге, т.е. перед инвестированием средств в последнее предприятие, условное оптимальное управление соответствует количеству средств, имеющихся в наличии; т.е. сколько средств осталось, столько и надо вложить в последнее предприятие. Условный оптимальный выигрыш равен доходу, приносимому последним предприятием.
7. Составление основного функционального уравнения.
Пусть перед i-м шагом у инвестора остались средства в размере s у.е. Тогда х у.е. он может вложить в i-е предприятие, при этом оно принесет доход fi(x), а оставшиеся s-x у.е.—в остальные предприятия с i+1-го до m-го. Условный оптимальный выигрыш от такого вложения Wi+1(s-x). Оптимальным будет то условное управление x, при котором сумма fi(x) и Wi+1(s-x) максимальна.
Подсистема диалога реализует основные функции по управлению программой пользователем, отображение начальных данных задачи (матрицы вложений), результатов оптимизации(оптимальное количество вкладываемых ресурсов(денег, и т.д.) в предприятия и максимальный доход), состояние программы. Формы ПД, реализующие перечисленные функции изображены на рисунках 2.1 – 2.2.
Рисунок 2.1 – сценарий диалога. Первоначальная форма.
Пользователь может выбирать количество заводов и количество вложений, а может воспользоваться контрольным примером. Также он сам вводит данные с клавиатуры, но может воспользоваться уже готовым вариантов нажав кнопку «заполнить». Для того чтобы получить решение задачи, необходимо нажать кнопку «решение». Результат можно увидеть на рисунке 2.2.
Рисунок 2.2 – сценарий диалога. Входные и выходные данные алгоритма.
Данный метод реализован с помощью одной функции обработки кнопки. Исходные данные для реализации этого метода берутся из матрицы (массива, который формируется динамически в памяти компьютера) которая задается в ручную или загружается из файла формата dbf,db т.е. есть возможность использовать его другими программами поддерживающими данный формат. Список переменных массивов представлен в таблице 2.3
Таблица 2.3 Описание идентификаторов, используемых в подпрограмме Button3Click.
Идентификатор |
Тип |
Назначение |
Обозначение в описании метода алгоритма |
smax |
int |
Максимальная оценка при распределении очередного ресурса на очередном этапе |
нет |
mmax |
int |
Максимальный доход при |
нет |
ok |
int * |
Множестово оптимальных вложений |
нет |
per |
int * |
Множество условно оптимальных оценок |
нет |
i,j,ii,et,ch,ii1,etap |
int |
Cчетчики циклов |
нет |
Таблица 2.3 Описание идентификаторов (продолжение)
w |
int * |
Множество всех оценок на всех этапах |
нет |
masi |
int * |
Множество необходимое для начальной подготовки матрицы |
нет |
Рисунок 2.4 - Блок-схема подпрограммы вычисления оптимального вложения .
Рисунок 2.5 - Блок-схема подпрограммы вычисления оптимального вложения.
Блок 1 выполняет инициализацию переменных и выделение в памяти места под массивы.
Блок 2 выполняет подготовку матрицы в StringGrid1 к требуему виду, т.е. замена надписей в верхней (0-ой) строчке “Пр. n” на 0-ли.
Блок 3 производит выполнение 1-го этапа, т.е. перенос первого столбца из начальной матрицы в W[1][] что является условно оптимальным доходом при распределении ресурсов только на первом предприятии.
Блок 4 производит вычесление всех остальных этапов.
Блок 5 выбирает наиболее оптимальный доход который можно получить при распределении i-ресурсов между et-предприятиями.
Блок 6 по всем полученым оценкам производит вычесление наиболее оптимального распределения ресурсов.
Блок 7 производит вывод на экран результатов вычесления и освобождение памяти.
Постановка задачи:
Руководство корпорации решило провести реконструкцию 4 заводов. Общий объем капиталовложений равный 400, необходимо распределить между заводами так, чтобы добиться максимального дохода.
Решение
Таблица 3.1
Вложение |
f(1) |
f(2) |
f(3) |
f(4) |
100 |
70 |
66 |
85 |
90 |
200 |
110 |
120 |
135 |
148 |
300 |
180 |
170 |
150 |
190 |
400 |
200 |
215 |
190 |
210 |
0 |
0 |
0 |
0 |
0 |
Метод динамического программирования
Данный метод основан на уравнении Белмана
i=1,m
Решение сначала.
Этап 1
Вложение капитала на первом этапе не имеет альтернативы, поэтому в качестве условно оптимальных вариантов решений примем f1(x) из исходной таблицы.
W1(0)=0
W1(1)=70
W1(2)=110
W1(3)=180
W1(4)=200
Этап 2
Для каждого значения вкладываемого капитала рассматриваем различные варианты вложений. После завершения этапа получаем условно оптимальные значения показателя эффективности управления- прибыли.
На данном этапе происходит распределение ресурсов среди 2 предприятий.
Этап 3
На данном этапе происходит распределение ресурсов среди 3 предприятий.
Этап 4
На данном этапе происходит распределение ресурсов среди 4 предприятий.
Непосредственные результаты работы программы с исходными данными на курсовой проект можно увидеть на рис 3.2.
Время работы программы для метода динамического программирования зависит от размерности начальных данных. Особо сильна эта зависимость от количества строк в исходной матрице.
Рисунок 3.2 – результаты решения.
ЗАКЛЮЧЕНИЕ
В ходе проделанной работы
были очерчены области применения метода
динамического
Метод динамического программирования
хорош для решения задач
В пользовательском приложении, разработанном в ходе выполнения курсовой работы, пользователю предосталяется возможность самому задавать размерность задачи, но для наглядности в памяти приложения сохранен контрольный пример.
План работ поставленных на курсовой проект был выполнен полностью.
СПИСОК ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ
Файл “main.cpp”
//----------------------------
#pragma hdrstop
#include "Unit1.h"
#include "Main.h"
//----------------------------
#pragma resource "*.dfm"
TMainForm *MainForm;
//----------------------------
: TForm(Owner)
{
StringGrid1->Cells[0][0]="
StringGrid1->Cells[0][1]=100;
StringGrid1->Cells[0][2]=200;
StringGrid1->Cells[0][3]=300;
StringGrid1->Cells[0][4]=400;
StringGrid1->Cells[0][5]=0;
j=StringGrid1->ColCount;//j1
j1=StringGrid1->RowCount;//j
for (i=1;i<j1;i++){
StringGrid1->Cells[i][0]=
StringGrid1->Cells[1][1]=70;
StringGrid1->Cells[2][1]=66;
StringGrid1->Cells[3][1]=85;
StringGrid1->Cells[4][1]=90;
StringGrid1->Cells[1][2]=110;
StringGrid1->Cells[2][2]=120;
StringGrid1->Cells[3][2]=135;
StringGrid1->Cells[4][2]=148;
StringGrid1->Cells[1][3]=180;
StringGrid1->Cells[2][3]=170;
StringGrid1->Cells[3][3]=150;
StringGrid1->Cells[4][3]=190;
StringGrid1->Cells[1][4]=200;
StringGrid1->Cells[2][4]=215;
StringGrid1->Cells[3][4]=190;
StringGrid1->Cells[4][4]=210;
}
//----------------------------
{
//--- Add code to create a new file ---
for (k=1;k<j;k++)
for (i=1;i<j1;i++){
StringGrid1->Cells[k][i]=
}
//----------------------------
{
int si,sj;
if (OpenDialog->Execute())
{
//---- Add code to open OpenDialog->FileName ---
TTable *BaseTable = new TTable(this);
BaseTable->DatabaseName=
BaseTable->TableName=
BaseTable->TableType=
BaseTable->FieldDefs->Clear()
BaseTable->IndexDefs->Clear()
BaseTable->Active=false;
BaseTable->Open();//Открыте файла базы
BaseTable->First();
BaseTable->Active=true;
StringGrid1->RowCount=
StringGrid1->ColCount=
j1=StringGrid1->RowCount;
j=StringGrid1->ColCount;
for(si=1;si<j;si++)
StringGrid1->Cells[si][0]=
for(si=1;si<j1;si++)
StringGrid1->Cells[0][si]=si;
//Заполнение ячеек сетки
for(si=0;si<BaseTable->
{
for(sj=0;sj<BaseTable->
StringGrid1->Cells[sj+1][si+1]
(BaseTable->Fields[sj]->Value)
BaseTable->Next();
}
BaseTable->Close();//Закрытие файла базы
//Уничтожение объекта описывающего структуру базы
delete BaseTable;
}
}
//----------------------------
{
int si,sj;
if (SaveDialog->Execute())
{
//--- Add code to save current file under SaveDialog->FileName ---
//Задание стандартных параметров структуры базы
TTable *BaseTable = new TTable(this);
BaseTable->DatabaseName=
BaseTable->TableName=
BaseTable->TableType=
BaseTable->FieldDefs->Clear()
BaseTable->IndexDefs->Clear()
BaseTable->Active=false;
//======================
//Задание списка полей
for(sj=0;sj<StringGrid1->
BaseTable->FieldDefs->Add(
//===================
//Непосредственно создание
BaseTable->CreateTable();
BaseTable->Open();//Открыте файла базы
BaseTable->First();
for(si=0;si<StringGrid1->
Информация о работе Оптимизация реконструкции заводов отрасли