Автор работы: Пользователь скрыл имя, 06 Июня 2012 в 10:39, курсовая работа
Симплекс-метод - это характерный пример итерационных вычислений. используемых при решении большинства оптимизационных задач. Во всех таких задачах требуется найти максимум или минимум линейной функции при условии, что её переменные принимают неотрицательные значения и удовлетворяют некоторой системе линейных уравнений или линейных неравенств либо системе, содержащей как линейные уравнения, так и линейные неравенства. Каждая из этих задач является частным случаем общей задачи линейного программирования.
Введение… …..3
1. Теоретическая часть
1.1 Линейное программирование …..3
1.2 Табличный симплекс-метод …..4
2. Вычислительная процедура симплекс-метода
2.1 Нахождение исходного опорного решения общей задачи линейного программирования (I часть симплекса )……………………………………………5
2.2 Переход от найденного опорного решения к лучшему опорному решению (II часть симплекса)……………………………………………………...7
2.3 Метод искусственного базиса……………………………………………....9
3. Программная реализация
3.1. Блок-схема алгоритма ЗЛП …12
3.2. Описание основных процедур и функций …13
3.3 Листинг программы…………………………………………………………15
4. Контрольный пример …26
5.Руководство пользователя……………………………………………………….29
Заключение …32
Список использованной литературы …32
task.Items.Add('Èòåðàöèÿ '+InttoStr(IterCount));
for i:=0 to GoalChild.ColCount-1 do
begin
for j:=0 to length(SimplexTable[0])-1 do
if i+1=SimplexTable[0,j] then
begin
task.Items.Add(' '+GoalChild.Cells[i,0]+'='+
bil:=true;
end;
if not bil then task.Items.Add(' '+GoalChild.Cells[i,0]+'=0');
bil:=false;
end;
end;
end;
until false;
fin:
if art then
begin
art:=false;
SetLength(SimplexTable,Length(
goto up;
end;
//Ðåçóëüòàò
with MainForm.ActiveMDIChild as TChildForm do
begin
task.Items.Add('');
task.Items.Add('Ðåçóëüòàò');
for i:=0 to GoalChild.ColCount-1 do
begin
for j:=0 to length(SimplexTable[0])-1 do
if i+1=SimplexTable[0,j] then
begin
task.Items.Add(' '+GoalChild.Cells[i,0]+'='+
bil:=true;
end;
if not bil then task.Items.Add(' '+GoalChild.Cells[i,0]+'=0');
bil:=false;
end;
task.Items.Add('');
if parametersForm.Min.Checked then
task.Items.Add('Ìèíèìàëüíîå çíà÷åíèå ôóíêöèè '+FloatToStr(-1*(SimplexTable[
else
task.Items.Add('Ìàêñèìàëüíîå çíà÷åíèå ôóíêöèè '+FloatToStr(SimplexTable[1,
end;
end;
procedure TMainForm.SaveAsClick(Sender: TObject);
var
FExt: String;
begin
with SaveDialog1 do
begin
if ActiveMDIChild.Caption[1]='Ç' then
FileName:=ActiveMDIChild.
else
FileName:=ActiveMDIChild.
FExt:=ExtractFileExt(FileName)
if length(Fext)=0 then
FExt:='.tsk';
filter:='Files (*'+FExt+')|*'+FExt;
if Execute then
with ActiveMDIchild as TChildForm do
SaveData(FileName);
end;
end;
procedure TMainForm.OpenClick(Sender: TObject);
var
s:string;
i,k:integer;
begin
if OpenDialog1.Execute then
begin
with fileMenu do
begin
if not N11.Visible then N11.Visible:=true;
k:=IndexOf(N1Name1);
for i:=count-3 downto k+1 do
begin
s:=items[i-1].caption;
s[2]:=chr(ord('0')+(i-k+1));
Items[i].Caption:=S;
Items[i].Visible:=Items[i-1].
end;
n1name1.Caption:='&1 '+OpenDialog1.FileName;
n1name1.Visible:=true;
end;
CreateChild(OpenDialog1.
with ActiveMDIChild as TChildForm do
LoadData(OpenDialog1.FileName)
ParametersForm.FormShow(
ParametersForm.Button3Click(
end;
end;
procedure TMainForm.SaveClick(Sender: TObject);
begin
if pos('Çàäà÷à',activemdichild.
SaveAsClick(Sender) else with activemdichild as TChildForm do
SaveData(Caption);
end;
procedure TMainForm.DelLimClick(Sender: TObject);
var i:byte;
begin
with ActiveMDIChild as TChildForm do
begin
if ItemDel<4 then MessageDlg('Îãðàíè÷åíèå
íå âûáðàíî',mtWarning,[mbOK],
begin
ParametersForm.FormShow(
for i:=0 to ItemDel-5 do ParametersForm.BitBtn3Click(
ParametersForm.BitBtn1Click(
ParametersForm.Button3Click(
end;
end;
end;
procedure TMainForm.N8Click(Sender: TObject);
var i:byte;
begin
with Mainform.ActiveMDIChild as TChildForm do
begin
GoalChild.ColCount:=2;
LimChild.ColCount:=2;
LimChild.RowCount:=1;
BChild.RowCount:=1;
SignsChild.RowCount:=1;
for i:=0 to 1 do
GoalChild.Cells[i,1]:='0';
GoalChild.Cells[0,0]:='X1';
GoalChild.Cells[1,0]:='X2';
Task.Clear;
end;
end;
procedure TMainForm.N1Name1Click(Sender: TObject);
var FileName:string;
begin
with sender as TMenuItem do
begin
FileName:=caption;
System.Delete(FileName,1,2);
end;
CreateChild(OpenDialog1.
with ActiveMDIChild as TChildForm do
LoadData(OpenDialog1.FileName)
ParametersForm.FormShow(
ParametersForm.Button3Click(
end;
end.
4.Контрольный пример
Пример 1.
Завод выпускает продукцию 1-го и 2-го типа. Прибыль от реализации единицы продукции соответственно составляет 30 и 40 у.е.
На выпуск единицы продукции 1-го типа расходуется 4 единиц сырья категории А, 4 ед. – категории В. Для выпуска единицы продукции 2-го типа расходуется сырья категории А - 3 ед., категории С – 12 единицы.
Имеющиеся в наличие запасы сырья категории А – 120 единиц, В – 252 единицы.
Тип выпускаемой продукции |
Расход сырья (ед.) |
Прибыль от реализации единицы продукции (у.е.) | |
А |
В | ||
1 |
4 |
4 |
30 |
2 |
3 |
12 |
40 |
Запасы сырья (ед.) |
120 |
252 |
Необходимо определить количество продукции, при выпуске которой прибыль является максимальной.
Таким образом, приходим к следующей математической задаче: дана система
4x1 +4х2 ≤ 120,
3x1 + 12х2 ≤ 252, (2)
двух линейных неравенств с двумя неизвестными хj (j=1..2) и линейная функция относительно этих же переменных
F= 30x1 + 40х2 (3)
Требуется среди всех неотрицательных решений системы неравенств (2) найти такое, при котором функция (3) принимает максимальное значение, т.е.
F=30x1+40x2 max
Базисные неизвестные |
Свободные члены |
x1 |
x2 |
x3 |
x4 |
|
x3 x4 |
120 252 |
4 3 |
4 12 |
1 0 |
0 1 |
30 84 |
ƒ |
0 |
-30 |
-40 |
0 |
0 |
|
x1 x4 |
30 162 |
1 0 |
1 9 |
1/4 -3/4 |
0 1 |
30 18 |
ƒ |
900 |
0 |
-10 |
7,5 |
0 |
|
x1 x2 |
18 12 |
0 1 |
1 0 |
-1/12 1/3 |
1/9 -1/9 |
|
ƒ |
1080 |
0 |
0 |
45/6 |
10/9 |
Ответ:
x1 = 12, x2 = 18, Fопт=1080
Таким образом, если предприятие изготовит 12 единиц изделий вида А и 18 единиц изделий В, то оно получит максимальную прибыль, равную 1080 у.е.
Пример 2
Рассмотрим задачу:
z=3x1 + 9x2 - >max
x1 + 4x2 <=8 ,
x1 + 2x2 <=4 ,
x1, x2 >= 0.
Введя остаточные переменные x3 и x4, представим результаты итераций
симплекс-метода в виде сводной таблицы.
На начальной итерации в качестве исключаемой переменной можно выбрать как x3 , так и x4. Выбрана переменная x3 , тогда переменная x4, оставаясь базисной на итерации 1, принимает нулевое значение, а это приводит к получению вырожденного базисного решения. Оптимальное решение задачи получается на следующей итерации.
Сравнивая итерации 1 и 2, заметим следующее: хотя состав базисных и небазисных переменных на этих итерациях различен, значения всех переменных и целевой функции не изменяются:
x1 = 0, x2 = 2, x3 = 0, x4 = 0, z = 18.
Это обстоятельство может привести к выводу о целесообразности прекращения вычислений на итерации 1 (когда впервые обнаруживается вырожденность), хотя полученное решение не является оптимальным.
Пример3
z =2x1 + 4x2 -> max
x1 + 2x2 <= 5 ,
x1 + x2 <= 4 ,
x1 , x2 >= 0.
Приведем задачу к стандартному виду и решим симплекс-методом.
Как известно, в симплекс-методе используются координаты только угловых точек пространства решений. Из симплекс-таблиц видно, что оптимум
x1 *=0 ,
x2* = 5/ 2, z max = 10, получен на итерации 1. На этой итерации можно узнать о наличии альтернативных оптимальных решений по нулевому значению коэффициента (небазисной) переменной x1 в строкеz, которое свидетельствует о том, что ее включение в базис не изменит значения целевой функции, но приведет к изменению значений других переменных. Именно это и происходит на итерации 2, когда переменная x1 вводится в базис вместо x4. В результате получается новое оптимальное решение
x 1*= 3
x2* =1 , z max = 10.
Два полученных
оптимальных решения
x¢1 = a x1A + (1—a) x1B , x¢2 = a x2A + (1—a) x2B , где 0 <= a <= 1.
На практике информация о наличии альтернативных оптимумов позволяет выбирать альтернативные варианты, в наибольшей степени отвечающего сложившейся ситуации.
z =2x1 + x2 ->max
x1 – 2x2 <=10 ,
2x1 <=40 ,
x1, x2 >= 0.
После приведения модели к стандартному виду, заполним начальную симплекс-таблицу:
Базис |
Решение |
X1 |
X2 |
X3 |
X4 |
x3 x4 |
10 40 |
1 2 |
-1 0 |
1 0 |
0 1 |
z |
0 |
-2 |
-1 |
0 |
0 |
Анализ этой таблицы показывает, что во все коэффициенты столбца x2 либо отрицательны, либо равны нулю. Это означает, что x2 можно бесконечно увеличивать, не нарушая ни одного из ограничений модели.
Общее
правило выявления
Информация о работе Задача линейного программирования (симплекс-метод)