Программный комплекс для решения задач линейного программирования симплексным методом - Программирование, компьютеры и кибернетика курсовая работа

Программный комплекс для решения задач линейного программирования симплексным методом - Программирование, компьютеры и кибернетика курсовая работа




































Главная

Программирование, компьютеры и кибернетика
Программный комплекс для решения задач линейного программирования симплексным методом

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


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

ТЕМА: «ПК для решения задач линейного программирования симплексным методом»
Симплекс-метод - алгоритм решения оптимизационной задачи линейного программирования путём перебора вершин выпуклого многогранника в многомерном пространстве. Метод был разработан советским математиком Канторовичем Л.В. в 1937 году.
Назначение метода состоит в следующем. В общем виде, когда в задаче участвуют  N -неизвестных, можно сказать, что область допустимых решений, задаваемая системой ограничивающих условий, представляется выпуклым многогранником в  n -мерном пространстве и оптимальное значение целевой функции достигается в одной или нескольких вершинах. Решить данные задачи графически, когда количество переменных более 3 весьма затруднительно. Существует универсальный способ решения задач линейного программирования, называемый симплекс-методом.
Идея симплекс-метода заключается в следующем. Сначала нужно найти некоторую (начальную) вершину многогранника допустимых решений (начальное допустимое базисное решение). Затем нужно проверить это решение на оптимальность. Если оно оптимально, то решение найдено; если нет, то перейти к другой вершине многогранника и вновь проверить на оптимальность. Ввиду конечности вершин многогранника (следствие конечности ограничений задачи ЛП) за конечное число "шагов" мы найдем искомую точку минимума или максимума. Надо заметить, что при переходе от одной вершины к другой значение целевой функции убывает (в задаче на минимум) или возрастает (в задаче на максимум).
Основная цель курсового проекта по дисциплине «Математические методы исследования операций» - получение навыков разработки интеллектуального программного продукта для решения задачи оптимизации (поддержки решения) в заданной предметной области.
Для выполнения курсовой работы я выбрала язык Object Pascal и среду разработки Delphi. Визуальное построение приложений в Delphi позволяет быстро и качественно создать интерфейс программы, среда разработки имеет низкие требования разработанного приложения к ресурсам компьютера, а также наращиваемость за счет встраивания новых компонент и инструментов в среду Delphi.
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ «ПК ДЛЯ РЕШЕНИЯ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ СИМПЛЕКСНЫМ МЕТОДОМ»
Линейное программирование представляет собой наиболее часто используемый метод оптимизации. К числу задач линейного программирования можно отнести задачи:
- рационального использования сырья и материалов; задачи оптимального раскроя;
- оптимизации производственной программы предприятий;
- оптимального размещения и концентрации производства;
- составления оптимального плана перевозок, работы транспорта;
- управления производственными запасами;
- и многие другие, принадлежащие сфере оптимального планирования.
Для большого количества практически интересных задач целевая функция выражается линейно - через характеристики плана, причем допустимые значения параметров подчинены линейным равенствам или неравенствам. Нахождение при данных условиях абсолютного экстремума целевой функции носит название линейного программирования.
Первым исследованием по линейному программированию является работа Л.В. Канторовича “Математические методы организации и планирования производства”, опубликованная в 1939 г. В нем дана постановка задач линейного программирования, разработан метод разрешающих множителей решения задач линейного программирования и дано его теоретическое обоснование.
Прямая задача линейного программирования является математической формулировкой проблемы составления такого плана использования различных способов производства, который позволяет получить максимальное количество однородного продукта при имеющихся в наличии ресурсах.
Математическое программирование - это прикладная отрасль математики, которая является теоретической основой решения задач оптимального планирования.
Существуют следующие разделы математического программирования: линейное, параметрическое, нелинейное и динамическое программирование. Наиболее разработанным и широко применяемым разделом математического программирования является линейное программирование, целью которого служит отыскивание оптимума (max, min) заданной линейной функции при наличии ограничений в виде линейных уравнений или неравенств.
Симплексный метод является универсальным, так как позволяет решить практически любую задачу линейного программирования, записанную в каноническом виде.
1.1 Постановка задачи линейного программирования
Задача линейного программирования состоит в том, что необходимо максимизировать или минимизировать некоторый линейный функционал на многомерном пространстве при заданных линейных ограничениях.
Необходимо разработать программу, решающую базовую задачу линейного программирования симплекс-методом с помощью симплекс-таблиц. Свободные члены системы ограничений задачи могут быть произвольными.
Перед решением задачи линейного программирования симплексным методом ее нужно записать в канонической форме:
- определение одной из вершин многогранника (исходного опорного плана);
- упорядоченный перебор вершин (опорных планов), при котором на каждом шаге осуществляется приближение к оптимальному плану.
1.2 Алгоритм решения задачи линейного программирования симплексным методом
Симплексный метод позволяет, отправляясь от некоторого исходного опорного плана и постепенно улучшая его, получить через конечное число итераций оптимальный план или убедиться в неразрешимости задачи (Рисунок 1).
Определение 1. Допустимым решением (планом) задачи ЛП называется вектор X=(x1,x2,…,xn) , удовлетворяющий всем ее ограничениям (2), (3).
Определение 2. План X=(x1,x2,…,xn) задачи (1) - (3) называется опорным (допустимым базисным решением), если векторы условий Aj=(a1j,a2j,…,amj)T , входящие в разложение вектора A0=(b1,b2,…,bm)T :
с положительными коэффициентами xj , линейно независимы.
Определение 3. Система m линейно независимых векторов условий {Asi}, , включающая все те Asi , для которых xsi>0 , называется базисом опорного плана и обозначается через Бx .
Перед решением задачи ЛП симплексным методом ее надо записать в канонической форме. Решение начинается с известного опорного плана, которому отвечает единичный базис. Поэтому задача решается симплексным методом, если матрица основных ограничений (2) содержит по крайней мере m различных единичных векторов, из которых можно составить единичную матрицу m -го порядка.
Таким образом, если X0=(xs1,xs2,…,xs0,0,…,0) - исходный опорный план задачи с единичным базисом As1,…,Asm и каноническая модель задачи, которая имеет следующий вид
Из системы (5) следует, что в исходном опорном плане X0 базисные переменные xsi=bi, . Алгоритм симплексного метода начинается с вычисления оптимального решения по такому опорному плану:
X 0=( b 1, b 2,…, bm ,0,…,0) . (6)
Для исследования X0 на оптимальность необходимо разложить все векторы Aj по векторам базиса Asi :
В равенстве (7) xij=aij , поскольку векторы Asi образуют единичный базис.
Записав всю исходную информацию о задаче в таблицу, получим исходную (нулевую) симплексную таблицу (Таблица 1).

Разработанная программа в среде Delphi имеет простой и удобный интерфейс для любого пользователя, не требует дополнительных ресурсов в виде свободного места на диске, так как вычисления производятся только в оперативной памяти.
1 http :// ru . wikipedia . org / wiki /% D 0% A 1% D 0% B 8% D 0% BC % D 0% BF % D 0% BB % D 0% B 5% D 0% BA % D 1%81% D 0% BC % D 0% B 5% D 1%82% D 0% BE % D 0% B 4
2 http :// saim . ts 6. ru / pages /8. htm
3 Г. Жимерин, В.А. Мясников - «Автоматизированные и автоматические системы уравнения» - 1975г.
4 Е.С. Венцель - «Исследование операций» - 1972г.
5 http://math.semestr.ru/simplex/primersolve.php
6 МУ к ЛР " Методы условной оптимизации " по дисциплине "Методы синтеза и оптимизации"/Сост.: Г.Б. Билык, О.В. Веремей. - Краматорск: ДГМА, 2000. - 56с.
7 Мину М. Математическое программирование. - М.: Наука, 1990. - 488 с.
procedure CreateChild(const Name: String);
procedure TMainForm.CreateChild(const Name: String);
Child:=TChildForm.Create(Application);
procedure TMainForm.ExitPClick(Sender: TObject);
procedure TMainForm.NewClick(Sender: TObject);
CreateChild('Задача '+IntToStr(MDIChildCount+1));
procedure TMainForm.FileMenuClick(Sender: TObject);
MainForm.CloseChild.Enabled:=false;
procedure TMainForm.CloseChildClick(Sender: TObject);
if ActiveMDIChild<>nil then ActiveMDIChild.Close;
procedure TMainForm.EditClick(Sender: TObject);
procedure TMainForm.ChangeFunClick(Sender: TObject);
ParametersForm.PageControl1.ActivePageIndex:=0;
procedure TMainForm.AddLimClick(Sender: TObject);
ParametersForm.PageControl1.ActivePageIndex:=1;
procedure TMainForm.N2Click(Sender: TObject);
procedure TMainForm.N14Click(Sender: TObject);
procedure TMainForm.N15Click(Sender: TObject);
procedure TMainForm.N16Click(Sender: TObject);
procedure TMainForm.N18Click(Sender: TObject);
mdichildren[i].WindowState:=wsminimized;
procedure TMainForm.N5Click(Sender: TObject);
procedure TMainForm.N13Click(Sender: TObject);
procedure TMainForm.N4Click(Sender: TObject);
procedure TMainForm.N6Click(Sender: TObject);
SimplexTable,SimplexTableNew:array of array of extended;
k,i,j,MoreCount,LessCount,EquallyCount,extrItem,WLine,IterCount: integer;
MoreCount:=0;LessCount:=0;EquallyCount:=0;
{1}//Сортировка ограничений: 1) >=; 2) =; 3) <=.
{3}//Итерационное построение симплекс-таблиц
{1}//---------------------------------------------------------------------------
with MainForm.ActiveMDIChild as TChildForm do
//строки в таблицах дочернего окна нумеруются с 1
for i:=1 to SignsChild.RowCount-1 do
if (SignsChild.Cells[0,i]='>') or (SignsChild.Cells[0,i]='>=') then
SetLength(SimplexTable,LimChild.ColCount+2,MoreCount);
SimplexTable[j+2,MoreCount-1]:=StrToFloat(LimChild.cells[j,i]);
SimplexTable[1,MoreCount-1]:=StrToFloat(BChild.cells[0,i]);
for i:=1 to SignsChild.RowCount-1 do
SetLength(SimplexTable,LimChild.ColCount+2,MoreCount+EquallyCount);
SimplexTable[j+2,MoreCount+EquallyCount-1]:=StrToFloat(LimChild.cells[j,i]);
SimplexTable[0,MoreCount+EquallyCount-1]:=0;
SimplexTable[1,MoreCount+EquallyCount-1]:=StrToFloat(BChild.cells[0,i]);
for i:=1 to SignsChild.RowCount-1 do
if (SignsChild.Cells[0,i]='<') or (SignsChild.Cells[0,i]='<=') then
SetLength(SimplexTable,LimChild.ColCount+2,MoreCount+EquallyCount+LessCount);
SimplexTable[j+2,MoreCount+EquallyCount+LessCount-1]:=StrToFloat(LimChild.cells[j,i]);
SimplexTable[0,MoreCount+EquallyCount+LessCount-1]:=0;
SimplexTable[1,MoreCount+EquallyCount+LessCount-1]:=StrToFloat(BChild.cells[0,i]);
{2}//---------------------------------------------------------------------------
Setlength(SimplexTable,length(SimplexTable)+1,MoreCount+EquallyCount+LessCount);
for i:=length(SimplexTable)-MoreCount+1 to length(SimplexTable)-1 do
SimplexTable[length(SimplexTable)-1,j]:=-1;
for j:=MoreCount+EquallyCount to MoreCount+EquallyCount+LessCount-1 do
Setlength(SimplexTable,length(SimplexTable)+1,MoreCount+EquallyCount+LessCount);
for i:=length(SimplexTable)-LessCount+2 to length(SimplexTable)-1 do
SimplexTable[length(SimplexTable)-1,j]:=1;
//2.3 Добавить искусственные коэф. (>= и =)
for j:=0 to MoreCount+EquallyCount-1 do
Setlength(SimplexTable,length(SimplexTable)+1,MoreCount+EquallyCount+LessCount);
for i:=length(SimplexTable)-MoreCount+1 to length(SimplexTable)-1 do
SimplexTable[length(SimplexTable)-1,j]:=1;
with MainForm.ActiveMDIChild as TChildForm do
SetLength(GoalFun,GoalChild.ColCount+1);
if parametersForm.Min.Checked then GoalFun[i]:=StrToFloat(goalChild.Cells[i-1,1])
else GoalFun[i]:=-1*StrToFloat(goalChild.Cells[i-1,1]);
SetLength(ArtFun,length(SimplexTable)-1-MoreCount);
for i:=1 to length(SimplexTable)-3 do
for j:=0 to MoreCount-1 do ArtFun[i-1]:=ArtFun[i-1]-SimplexTable[i,j];
//------------------------------------------------------------------------------
//Минимизация искусственной функции
SimplexTable[0,j]:=length(simplexTable)-MoreCount+j-1;
for i:=MoreCount to length(simplexTable[0])-1 do
SimplexTable[0,i]:=length(simplexTable)-(LessCount+EquallyCount+MoreCount)+(i-MoreCount)-1;
for i:=0 to LessCount+EquallyCount-1 do
SimplexTable[0,i]:=length(simplexTable)-(LessCount+EquallyCount+MoreCount)+i-1;
SetLength(SimplexTable,length(SimplexTable),length(SimplexTable[0])+2);
for i:=0 to length(GoalFun)-1 do SimplexTable[i+1,length(SimplexTable[0])-2]:=goalFun[i];
for i:=0 to length(ArtFun)-1 do SimplexTable[i+1,length(SimplexTable[0])-1]:=ArtFun[i];
SetLength(SimplexTableNew,length(SimplexTable),length(SimplexTable[0]));
if IterCount=Parametersform.CountIteration.Value then
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Достигнуто предельное число итераций. Решение не найдено');
//Может функция не ограничена? => поиск столбца с отрицательными коэф.
for i:=2 to length(simplexTable)-1 do
if simplexTable[i,length(SimplexTable[0])-1]<0 then
for j:=0 to length(SimplexTable[0])-3 do
if simplexTable[i,j]<=0 then inc(k);
if k=length(SimplexTable[0])-2 then
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Невозможно найти начальный базис');
for i:=2 to length(simplexTable)-1 do
if simplexTable[i,length(SimplexTable[0])-1]<0 then
for j:=0 to length(SimplexTable[0])-2 do
if simplexTable[i,j]<=0 then inc(k);
if k=length(SimplexTable[0])-1 then
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Целевая функция не ограничена');
//поиск первой минимальной из отрицательных оценки искуственной функции
for i:=2 to length(simplexTable)-1 do
if (SimplexTable[i,length(SimplexTable[0])-1]0 then
if (SimplexTable[1,j]/SimplexTable[extrItem+1,j]0) then
ExtrEstimation:=SimplexTable[1,j]/SimplexTable[extrItem+1,j];
for i:=0 to length(SimplexTable[0])-1 do SimplexTableNew[0,i]:=SimplexTable[0,i];
SimplexTableNew[0,WLine]:=extrItem;
for i:=1 to length(SimplexTable)-1 do SimplexTableNew[i,WLine]:=SimplexTable[I,wlINE]/SimplexTable[extrItem+1,wlINE];
for i:=1 to length(SimplexTable)-1 do
for j:=0 to length(SimplexTable[0])-1 do
SimplexTableNew[i,j]:=SimplexTable[i,j]-SimplexTable[i,Wline]*SimplexTable[extrItem+1,j]/SimplexTable[extrItem+1,WLine];
for i:=0 to length(SimplexTable)-1 do for j:=0 to length(SimplexTable[0])-1 do SimplexTable[i,j]:=SimplexTableNew[i,j];
if ParametersForm.CheckBox1.Checked then begin
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Итерация '+InttoStr(IterCount));
for i:=0 to GoalChild.ColCount-1 do
for j:=0 to length(SimplexTable[0])-1 do
task.Items.Add(' '+GoalChild.Cells[i,0]+'='+FloatToStr(SimplexTable[1,j]));
if not bil then task.Items.Add(' '+GoalChild.Cells[i,0]+'=0');
SetLength(SimplexTable,Length(SimplexTable)-MoreCount,Length(SimplexTable[0])-1);
with MainForm.ActiveMDIChild as TChildForm do
for i:=0 to GoalChild.ColCount-1 do
for j:=0 to length(SimplexTable[0])-1 do
task.Items.Add(' '+GoalChild.Cells[i,0]+'='+FloatToStr(SimplexTable[1,j]));
if not bil then task.Items.Add(' '+GoalChild.Cells[i,0]+'=0');
task.Items.Add('Минимальное значение функции '+FloatToStr(-1*(SimplexTable[1,length(SimplexTable[0])-1])))
task.Items.Add('Максимальное значение функции '+FloatToStr(SimplexTable[1,length(SimplexTable[0])-1]));
procedure TMainForm.SaveAsClick(Sender: TObject);
if ActiveMDIChild.Caption[1]='З' then
FileName:=ActiveMDIChild.Caption+'.tsk'
filter:='Files (*'+FExt+')|*'+FExt;
with ActiveMDIchild as TChildForm do
procedure TMainForm.PrintClick(Sender: TObject);
procedure TMainForm.OpenClick(Sender: TObject);
if not N11.Visible then N11.Visible:=true;
Items[i].Visible:=Items[i-1].Visible;
n1name1.Caption:='&1 '+OpenDialog1.FileName;
with ActiveMDIChild as TChildForm do
ParametersForm.Button3Click(Sender);
procedure TMainForm.N27Click(Sender: TObject);
if N27.checked then toolbar1.Visible:=true else toolbar1.Visible:=false;
procedure TMainForm.N28Click(Sender: TObject);
if N28.checked then statusbar1.Visible:=true else statusbar1.Visible:=false;
procedure TMainForm.N7Click(Sender: TObject);
SimplexTable,SimplexTableNew:array of array of extended;
k,i,j,MoreCount,LessCount,EquallyCount,extrItem,WLine,IterCount: integer;
MoreCount:=0;LessCount:=0;EquallyCount:=0;
{1}//Сортировка ограничений: 1) >=; 2) =; 3) <=.
{3}//Итерационное построение симплекс-таблиц
{1}//---------------------------------------------------------------------------
with MainForm.ActiveMDIChild as TChildForm do
//строки в таблицах дочернего окна нумеруются с 1
for i:=1 to SignsChild.RowCount-1 do
if (SignsChild.Cells[0,i]='>') or (SignsChild.Cells[0,i]='>=') then
SetLength(SimplexTable,LimChild.ColCount+2,MoreCount);
SimplexTable[j+2,MoreCount-1]:=StrToFloat(LimChild.cells[j,i]);
SimplexTable[1,MoreCount-1]:=StrToFloat(BChild.cells[0,i]);
for i:=1 to SignsChild.RowCount-1 do
SetLength(SimplexTable,LimChild.ColCount+2,MoreCount+EquallyCount);
SimplexTable[j+2,MoreCount+EquallyCount-1]:=StrToFloat(LimChild.cells[j,i]);
SimplexTable[0,MoreCount+EquallyCount-1]:=0;
SimplexTable[1,MoreCount+EquallyCount-1]:=StrToFloat(BChild.cells[0,i]);
for i:=1 to SignsChild.RowCount-1 do
if (SignsChild.Cells[0,i]='<') or (SignsChild.Cells[0,i]='<=') then
SetLength(SimplexTable,LimChild.ColCount+2,MoreCount+EquallyCount+LessCount);
SimplexTable[j+2,MoreCount+EquallyCount+LessCount-1]:=StrToFloat(LimChild.cells[j,i]);
SimplexTable[0,MoreCount+EquallyCount+LessCount-1]:=0;
SimplexTable[1,MoreCount+EquallyCount+LessCount-1]:=StrToFloat(BChild.cells[0,i]);
{2}//---------------------------------------------------------------------------
Setlength(SimplexTable,length(SimplexTable)+1,MoreCount+EquallyCount+LessCount);
for i:=length(SimplexTable)-MoreCount+1 to length(SimplexTable)-1 do
SimplexTable[length(SimplexTable)-1,j]:=-1;
for j:=MoreCount+EquallyCount to MoreCount+EquallyCount+LessCount-1 do
Setlength(SimplexTable,length(SimplexTable)+1,MoreCount+EquallyCount+LessCount);
for i:=length(SimplexTable)-LessCount+2 to length(SimplexTable)-1 do
SimplexTable[length(SimplexTable)-1,j]:=1;
//2.3 Добавить искусственные коэф. (>= и =)
for j:=0 to MoreCount+EquallyCount-1 do
Setlength(SimplexTable,length(SimplexTable)+1,MoreCount+EquallyCount+LessCount);
for i:=length(SimplexTable)-MoreCount+1 to length(SimplexTable)-1 do
SimplexTable[length(SimplexTable)-1,j]:=1;
with MainForm.ActiveMDIChild as TChildForm do
SetLength(GoalFun,GoalChild.ColCount+1);
if parametersForm.Min.Checked then GoalFun[i]:=StrToFloat(goalChild.Cells[i-1,1])
else GoalFun[i]:=-1*StrToFloat(goalChild.Cells[i-1,1]);
SetLength(ArtFun,length(SimplexTable)-1-MoreCount);
for i:=1 to length(SimplexTable)-3 do
for j:=0 to MoreCount-1 do ArtFun[i-1]:=ArtFun[i-1]-SimplexTable[i,j];
//------------------------------------------------------------------------------
//Минимизация искусственной функции
SimplexTable[0,j]:=length(simplexTable)-MoreCount+j-1;
for i:=MoreCount to length(simplexTable[0])-1 do
SimplexTable[0,i]:=length(simplexTable)-(LessCount+EquallyCount+MoreCount)+(i-MoreCount)-1;
for i:=0 to LessCount+EquallyCount-1 do
SimplexTable[0,i]:=length(simplexTable)-(LessCount+EquallyCount+MoreCount)+i-1;
SetLength(SimplexTable,length(SimplexTable),length(SimplexTable[0])+2);
for i:=0 to length(GoalFun)-1 do SimplexTable[i+1,length(SimplexTable[0])-2]:=goalFun[i];
for i:=0 to length(ArtFun)-1 do SimplexTable[i+1,length(SimplexTable[0])-1]:=ArtFun[i];
if IterCount=Parametersform.CountIteration.Value then
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Достигнуто предельное число итераций. Решение не найдено');
//Может функция не ограничена? => поиск столбца с отрицательными коэф.
for i:=2 to length(simplexTable)-1 do
if simplexTable[i,length(SimplexTable[0])-1]<0 then
for j:=0 to length(SimplexTable[0])-3 do
if simplexTable[i,j]<=0 then inc(k);
if k=length(SimplexTable[0])-2 then
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Невозможно найти начальный базис');
for i:=2 to length(simplexTable)-1 do
if simplexTable[i,length(SimplexTable[0])-1]<0 then
for j:=0 to length(SimplexTable[0])-2 do
if simplexTable[i,j]<=0 then inc(k);
if k=length(SimplexTable[0])-1 then
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Целевая функция не ограничена');
//поиск первой минимальной из отрицательных оценки искуственной функции
for i:=2 to length(simplexTable)-1 do
if (SimplexTable[i,length(SimplexTable[0])-1]0 then
if (SimplexTable[1,j]/SimplexTable[extrItem+1,j]0) then
ExtrEstimation:=SimplexTable[1,j]/SimplexTable[extrItem+1,j];
SetLength(SimplexTableNew,length(SimplexTable),length(SimplexTable[0]));
for i:=0 to length(SimplexTable[0])-1 do SimplexTableNew[0,i]:=SimplexTable[0,i];
SimplexTableNew[0,WLine]:=extrItem;
for i:=1 to length(SimplexTable)-1 do SimplexTableNew[i,WLine]:=SimplexTable[I,wlINE]/SimplexTable[extrItem+1,wlINE];
for i:=1 to length(SimplexTable)-1 do
for j:=0 to length(SimplexTable[0])-1 do
SimplexTableNew[i,j]:=SimplexTable[i,j]-SimplexTable[i,Wline]*SimplexTable[extrItem+1,j]/SimplexTable[extrItem+1,WLine];
for i:=0 to length(SimplexTable)-1 do for j:=0 to length(SimplexTable[0])-1 do SimplexTable[i,j]:=SimplexTableNew[i,j];
if ParametersForm.CheckBox1.Checked then begin
with MainForm.ActiveMDIChild as TChildForm do
task.Items.Add('Итерация '+InttoStr(IterCount));
for i:=0 to GoalChild.ColCount-1 do
for j:=0 to length(SimplexTable[0])-1 do
task.Items.Add(' '+GoalChild.Cells[i,0]+'='+FloatToStr(SimplexTable[1,j]));
if not bil then task.Items.Add(' '+GoalChild.Cells[i,0]+'=0');
SetLength(SimplexTable,Length(SimplexTable)-MoreCount,Length(SimplexTable[0])-1);
//Если среди базисных переменных нет дробных то конец...
for i:=0 to ParametersForm.dim1.Value-1 do
if (SimplexTable[0,i]<=ParametersForm.dim1.Value) and (SimplexTable[1,i]<>trunc(SimplexTable[1,i])) then bil:=true;
with MainForm.ActiveMDIChild as TChildForm do
for i:=0 to GoalChild.ColCount-1 do
for j:=0 to length(SimplexTable[0])-1 do
task.Items.Add(' '+GoalChild.Cells[i,0]+'='+FloatToStr(SimplexTable[1,j]));
if not bil then task.Items.Add(' '+GoalChild.Cells[i,0]+'=0');
task.Items.Add('Минимальное значение функции '+FloatToStr(-1*(SimplexTable[1,length(SimplexTable[0])-1])))
task.Items.Add('Максимальное значение функции '+FloatToStr(SimplexTable[1,length(SimplexTable[0])-1]));
SetLength(SimplexTable,Length(SimplexTable)+1,Length(SimplexTable[0])+1);
For i:=0 to Length(SimplexTable)-1 do
SimplexTable[i,Length(SimplexTable[0])-1]:=SimplexTable[i,Length(SimplexTable[0])-2];
for i:=0 to Length(SimplexTable[0])-1 do SimplexTable[Length(SimplexTable)-1,i]:=0;
SimplexTable[Length(SimplexTable)-1,Length(SimplexTable[0])-2]:=1;
for i:=0 to Length(SimplexTable[0])-3 do
if (abs(SimplexTable[1,i]-trunc(SimplexTable[1,i]))>ExtrEstimation) and (abs(SimplexTable[1,i]-round(SimplexTable[1,i]))>0.001) then
ExtrEstimation:=abs(SimplexTable[1,i]-trunc(SimplexTable[1,i]));
SetLength(goalfun,Length(goalfun)+1);
SimplexTable[0,Length(SimplexTable[0])-2]:=Length(SimplexTable)-2;
SimplexTable[1,Length(SimplexTable[0])-2]:=-ExtrEstimation/ExtrEstimation;
for i:=2 to Length(SimplexTable)-2 do
SimplexTable[i,Length(SimplexTable[0])-2]:=-(abs(SimplexTable[i,WLine]-trunc(SimplexTable[i,WLine])))/ExtrEstimation;
SimplexTable[round(SimplexTable[0,WLine])+1,Length(SimplexTable[0])-2]:=0;
//поиск первой минимальной из положительных оценки искуственной функции
for i:=2 to length(simplexTable)-1 do
if (SimplexTable[i,length(SimplexTable[0])-1]0) then
ExtrEstimation:=SimplexTable[i,length(SimplexTable[0])-1];
//??? if ExtrEstimation=-100000 then goto fin;
procedure TMainForm.SaveClick(Sender: TObject);
if pos('Задача',activemdichild.caption)=1 then
SaveAsClick(Sender) else with activemdichild as TChildForm do
procedure TMainForm.DelLimClick(Sender: TObject);
with ActiveMDIChild as TChildForm do
if ItemDel<4 then MessageDlg('Ограничение не выбрано',mtWarning,[mbOK],0) else
for i:=0 to ItemDel-5 do ParametersForm.BitBtn3Click(Sender);
ParametersForm.BitBtn1Click(Sender);
ParametersForm.Button3Click(Sender);
procedure TMainForm.N8Click(Sender: TObject);
with Mainform.ActiveMDIChild as TChildForm do
procedure TMainForm.N1Name1Click(Sender: TObject);
with ActiveMDIChild as TChildForm do
ParametersForm.Button3Click(Sender);
Разработка программы, решающей базовую задачу линейного программирования симплекс-методом с помощью симплекс-таблиц. Целевая функция с определенным направлением экстремума и система ограничений для нее. Разработка алгоритма программы, ее листинг. курсовая работа [385,6 K], добавлен 15.05.2014
Решение базовых задач линейного программирования симплекс-методом, их реализация на языке программирования С++. Математическое обеспечение; разработка алгоритма программы, решающей задачу с помощью симплекс-таблиц с произвольными свободными членами. курсовая работа [217,8 K], добавлен 25.05.2014
Сущность линейного программирования. Математическая формулировка задачи ЛП и алгоритм ее решения с помощью симплекс-метода. Разработка программы для планирования производства с целью обеспечения максимальной прибыли: блок-схема, листинг, результаты. курсовая работа [88,9 K], добавлен 11.02.2011
Алгоритм решения задач линейного программирования симплекс-методом. Построение математической модели задачи линейного программирования. Решение задачи линейного программирования в Excel. Нахождение прибыли и оптимального плана выпуска продукции. курсовая работа [1,1 M], добавлен 21.03.2012
Постановка задачи линейного программирования. Решение системы уравнений симплекс-методом. Разработка программы для использования симплекс-метода. Блок-схемы основных алгоритмов. Создание интерфейса, инструкция пользователя по применению программы. курсовая работа [1,7 M], добавлен 05.01.2015
Практические навыки моделирования задач линейного программирования и их решения графическим и симплекс-методом с использованием прикладной программы SIMC. Моделирование транспортных задач и их решение методом потенциалов с помощью программы TRAN2. контрольная работа [199,8 K], добавлен 15.06.2009
Широкое применение вычислительной техники как в общей математике, так и в одном из её разделов – математических методах. Ознакомление с решением задач линейного программирования симплекс-методом и графически. Составлена программа на языке Delphi. курсовая работа [57,1 K], добавлен 04.05.2010
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Программный комплекс для решения задач линейного программирования симплексным методом курсовая работа. Программирование, компьютеры и кибернетика.
Читать Диссертация По Некромагии 2
Научно Практической Работа В Школе
Реферат: Маркиз де Сад: «Флорвиль и Курваль или Неотвратимость судьбы» – краткое содержание
Лабораторная Работа По Биологии Выявление Изменчивости
Отчет По Практике На Тему Районные Суды
Дипломная Работа На Тему Несовершеннолетних
Реферат Сфу Образец
Реферат по теме Сравнительный анализ стандартов ISO/IEC 12207-95 и ISO/IEC 12207-2008
Статья: О правовом регулировании расчетных форвардных договоров
Криминалистическое Исследование Документов Курсовая
Курсовая работа по теме Алгоритм разработки и реализации федеральных целевых программ по развитию проблемных регионов России
Контрольные Работы По Геометрии 10 Класс Погорелов
Кредитные Системы Реферат
Что Мешает Человеку Быть Счастливым Сочинение Олеся
Spotlight 6 Контрольные Работы Модуль 6
Скачать Сочинение По Картине Афремова Парусник Закат
Реферат: Malcolm X Essay Research Paper Malcolm X 2
Дипломная работа по теме Проект электрокотельной ИГТУ
Дипломная работа по теме Анализ кредитной политики коммерческого Банка ВТБ 24 (ЗАО)
Реферат: Проявление авторской позиции в жанре интервью
Профессия энергетик - Педагогика презентация
Внесок Софокла у світову літературу - Литература реферат
Аграрно-промышленный комплекс Иркутской области - География и экономическая география реферат


Report Page