Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач матметоды.docx
Скачиваний:
2
Добавлен:
04.12.2018
Размер:
255.52 Кб
Скачать

4. Проведение исследования

В данной курсовой работе исследованием является решение практической задачи. На странице 12 данной курсовой работы получен аналитический расчет, в результате которого стало известно, что x1=95; x2=210; x3=0; x4=0; x5=85; x6=0; x7=0; L=2115 является решением прямой задачи, y1=0; y2=1.5; y3=2.25 является решением двойственной задачи. Запустив программу, написанную для этой курсовой работы, с данными практической задачи, были получены аналогичные результаты. Считаю, что это говорит о том, что аналитическое решение было проведено верно, и что программа работает корректно.

Заключение

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

Решением прямой задачи является: x1=95; x2=210; x3=0; x4=0; x5=85; x6=0; x7=0; L=2115;

Решением двойственной задачи является: y1=0; y2=1.5; y3=2.25;

Промежуток устойчивости первого ресурса 85;

Промежуток устойчивости второго ресурса (40;400);

Промежуток устойчивости третьего ресурса (420;1140);

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

Список используемой литературы

1. Акулич И.Л.  Математическое программирование в примерах и задачах. — М.: Высшая школа, 1986. — 319 с.

2. Томас Х. Кормен Алгоритмы: построение и анализ — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. 

3. Хемди А. Таха  Введение в исследование операций— 7-е изд. — М.: «Вильямс», 2007. — С. 95-141.

4. ГОСТ 19.102-77 ЕСПД. Стадии разработки.

5. ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению.

6. ГОСТ РИСО/МЭК 12.207. Процессы жизненного цикла программных средств.

Приложение

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm3 = class(TForm)

Label1: TLabel;

Label2: TLabel;

rowc: TEdit;

colc: TEdit;

Chng: TButton;

tab: TStringGrid;

Startprop: TButton;

rsch: TButton;

exit: TButton;

Memo1: TMemo;

procedure ChngClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure StartpropClick(Sender: TObject);

procedure rschClick(Sender: TObject);

procedure exitClick(Sender: TObject);

procedure FormClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm3;rowcc,colcc,r,k,erri,epicwin:integer; a1,a2:array [1..50,1..50] of real;

b1,b2,c,d1,d2,bb: array [1..50] of real; but,f:boolean;

l:real;

implementation

{$R *.dfm}

procedure razm;

begin

with form1.tab do begin

defaultcolwidth:=round(width/colcount);

defaultrowheight:=round(height/rowcount);

end;end;

procedure shettab;

var i:integer;

begin

with form1.tab do begin

colcount:=colcc+rowcc+5;

rowcount:=rowcc+2;

cells[0,0]:='I';

cells[1,0]:='Б';

cells[2,0]:='Сб';

for i := 3 to colcount-2 do

cells[i,0]:='P'+inttostr(i-3);

cells[colcount-1,0]:='O';

for I := 1 to rowcount-2 do

cells[0,i]:=inttostr(i);

cells[0,rowcount-1]:='Δ';

end;

razm;

end;

procedure nachtab ;

var i,j:integer;

begin

j:=65;

with form1.tab do begin

colcount:=colcc+2;

rowcount:=rowcc+2;

cells[0,0]:='Тип';

for I := 1 to rowcc do

cells[0,i]:=inttostr(i);

cells[0,rowcc+1]:='Цена';

for i := 1 to colcc do begin cells[i,0]:=char(j);

j:=j+1;

end;

cells[colcc+1,0]:='Нал';

end;

razm;

end;

procedure TForm3.ChngClick(Sender: TObject);

begin

if rowc.Enabled=false then begin

rowc.Enabled:=true;

colc.Enabled:=true;

end

else begin

if rowc.Text<>'' then

rowcc:=strtoint(rowc.Text);

if colc.Text<>'' then

colcc:=strtoint(colc.Text);

rowc.Enabled:=false;

colc.Enabled:=false;

end;end;

procedure TForm3.StartpropClick(Sender: TObject);

var i,j:integer;

begin

nachtab;

for i := 1 to tab.rowcount do

for j:=1 to tab.ColCount do

tab.Cells[j,i]:='';

rsch.Caption:='Рассчитать';

memo1.Clear;

end;

procedure TForm3.rschClick(Sender: TObject);

var i,j:integer;s:string;min:real; f:boolean;

begin

case but of

false: begin

chng.Enabled:=false;

s:='';

for I := 1 to rowcc do

for j := 1 to colcc do

a1[i,j]:=strtoint(tab.cells[j,i]);

for I := 1 to rowcc do

for j := colcc+1 to colcc+rowcc do

if i+colcc=j then a1[i,j]:=1;

for I := 1 to colcc do

c[i]:=strtoint(tab.Cells[i,rowcc+1]);

for i := 1 to rowcc do

b1[i]:=strtoint(tab.cells[colcc+1,i]);

for i := 1 to colcc do

d1[i]:=c[i]*-1;

for i := 1 to colcc do

if i<>colcc then

s:=s+tab.Cells[i,rowcc+1]+'x'+inttostr(i)+'*'

else

s:=s+tab.Cells[i,rowcc+1]+'x'+inttostr(i);

memo1.Lines.Add('Прямая задача:');

memo1.Lines.Add('L='+s+'→max');

s:='';

for I := 1 to rowcc do begin

for j := 1 to colcc do begin

if j<>colcc then

s:=s+tab.Cells[j,i]+'x'+inttostr(j)+'*'

else begin

s:=s+tab.Cells[j,i]+'x'+inttostr(j);

s:=s+'≤'+tab.Cells[colcc+1,i];

end;end;

memo1.Lines.Add(s);

s:='';

end;

shettab;

memo1.Lines.Add('');

memo1.Lines.Add('Двойственная задача:');

for I := 1 to rowcc do

if i<>rowcc then

s:=s+tab.Cells[colcc+1,i]+'y'+inttostr(i)+'*'

else

s:=s+tab.Cells[colcc+1,i]+'y'+inttostr(i);

memo1.Lines.Add('W='+s+'→min');

s:='';

for I := 1 to colcc do begin

for j := 1 to rowcc do begin

if j<>rowcc then

s:=s+tab.Cells[i,j]+'y'+inttostr(j)+'*'

else begin

s:=s+tab.Cells[i,j]+'y'+inttostr(j);

s:=s+'≥'+tab.Cells[i,rowcc+1];

end;

end;

memo1.Lines.Add(s);

s:='';

end;

for i := 1 to rowcc do

for j := 1 to colcc+rowcc do

tab.Cells[j+3,i]:=floattostr(a1[i,j]);

for I := 1 to colcc+rowcc do

tab.Cells[i+3,rowcc+1]:=floattostr(d1[i]);

for I := 1 to rowcc do begin

tab.Cells[2,i]:=floattostr(c[i+colcc]);

tab.Cells[3,i]:=floattostr(b1[i]);

end;

for I := 1 to 3 do

tab.Cells[i,rowcc+1]:='';

min:=0;

for I := 4 to colcc+rowcc do

if strtofloat(tab.Cells[i,rowcc+1])<=min then

begin

k:=i;

min:= strtofloat(tab.Cells[i,rowcc+1]);

end;

memo1.Lines.add('');

memo1.Lines.Add('Разрешающий столбец: '+inttostr(k-3));

for I := 1 to rowcc do

if a1[i,k-3]>0 then

tab.Cells[rowcc+4+colcc,i]:=floattostr(b1[i]/a1[i,k-3])

else

tab.Cells[rowcc+4+colcc,i]:='0';

rsch.Caption:='Следующий шаг';

for I := 1 to rowcc do

if strtofloat(tab.Cells[rowcc+4+colcc,i])>0 then

min:=strtofloat(tab.Cells[rowcc+4+colcc,i]);

for I := 1 to rowcc do

if (strtofloat(tab.Cells[rowcc+4+colcc,i])<=min)

and (strtofloat(tab.Cells[rowcc+4+colcc,i])>0) then begin r:=i;

min:= strtofloat(tab.Cells[rowcc+4+colcc,i]);

end;

memo1.Lines.add('');

memo1.Lines.Add('Разрешающая строка: '+inttostr(r));

for I := 1 to rowcc do begin

tab.Cells[1,i]:='P'+inttostr(colcc+i);

bb[i]:=colcc+i;

end;

but:=true;

end;

true: begin

for I := 1 to colcc do begin

for j := 1 to rowcc do

if a1[j,i]<0 then erri:=erri+1;

if erri=rowcc then begin

memo1.Lines.add('');

memo1.Lines.Add('Решение отсутствует');

end;end;

if erri<>rowcc then begin

erri:=0;

bb[r]:=k-3;

for I := 1 to rowcc do

tab.Cells[1,i]:='P'+floattostr(bb[i]);

for I := 1 to rowcc do

for j := 1 to colcc+rowcc do

a1[i,j]:=strtofloat(tab.cells[j+3,i]);

for i := 1 to rowcc do

b1[i]:=strtofloat(tab.cells[3,i]);

for i := 1 to colcc+rowcc do

d1[i]:=strtofloat(tab.cells[i+3,rowcc+1]);

for i := 1 to rowcc+colcc do

d2[i]:=d1[i]-(a1[r,i]/a1[r,k-3])*d1[k-3];

for I := 1 to rowcc do

if i=r then

b2[i]:=b1[r]/a1[r,k-3]

else

b2[i]:=b1[i]-(b1[r]/a1[r,k-3])*a1[i,k-3];

for i := 1 to rowcc do

for j := 1 to rowcc+colcc do

if i=r then

a2[i,j]:=a1[r,j]/a1[r,k-3]

else

a2[i,j]:=a1[i,j]-(a1[r,j]/a1[r,k-3])*a1[i,k-3];

for i := 1 to rowcc do

for j := 1 to colcc+rowcc do

tab.Cells[j+3,i]:=floattostr(a2[i,j]);

for I := 1 to colcc+rowcc do

tab.Cells[i+3,rowcc+1]:=floattostr(d2[i]);

for I := 1 to rowcc do begin

tab.Cells[3,i]:=floattostr(b2[i]);

tab.Cells[2,i]:=floattostr(c[round(bb[i])]);

end;

l:=l-(b1[r]/a1[r,k-3])*d1[k-3];

memo1.Lines.Add('');

memo1.Lines.Add('L='+floattostr(l));

min:=0;

for I := 1 to colcc+rowcc do

if d2[i]<=min then

begin

k:=i+3;

min:=d2[i];

end;

memo1.Lines.add('');

memo1.Lines.Add('Разрешающий столбец: '+inttostr(k-3));

for I := 1 to rowcc do

tab.Cells[rowcc+colcc+4,i]:='';

for I := 1 to rowcc do

if a2[i,k-3]<>0 then

tab.Cells[rowcc+4+colcc,i]:=floattostr(b2[i]/a2[i,k-3])

else

tab.Cells[rowcc+4+colcc,i]:='0';

rsch.Caption:='Следующий шаг';

for I := 1 to rowcc do

if strtofloat(tab.Cells[rowcc+4+colcc,i])>0 then

min:=strtofloat(tab.Cells[rowcc+4+colcc,i]);

for I := 1 to rowcc do

if (strtofloat(tab.Cells[rowcc+4+colcc,i])<=min)

and (strtofloat(tab.Cells[rowcc+4+colcc,i])>0) then

r:=i;

min:= strtofloat(tab.Cells[rowcc+4+colcc,i]);

end;

memo1.Lines.add('');

memo1.Lines.Add('Разрешающая строка: '+inttostr(r));

for I :=4 to rowcc+colcc do

if strtofloat(tab.Cells[i,rowcc+1])>0 then

epicwin:=epicwin+1;

if epicwin=colcc+rowcc then begin

memo1.Lines.Add('Оптимальное решение прямой задачи: L='+floattostr(l));

for I := 1 to rowcc+colcc do begin

for j := 1 to rowcc do

if i=bb[j] then f:=true;

if f=true then begin

memo1.Lines.Add('X'+floattostr(bb[i])+'='+floattostr(b2[i]));

f:=false;

end

else

memo1.Lines.Add('X'+inttostr(i)+'=0');

end;

rsch.Enabled:=false;

memo1.Lines.Add('Оптимальное решение двойственной задачи: W='+floattostr(l));

for j:= 1 to rowcc do

memo1.Lines.Add('y'+inttostr(j)+'='+floattostr(d1[j+colcc]));

end;end;end;end;end;

procedure TForm3.exitClick(Sender: TObject);

begin

close;

end;

procedure TForm3.FormCreate(Sender: TObject);

begin

colcc:=4;

rowcc:=3;

nachtab;

erri:=0;

but:=false;

epicwin:=0;

l:=0;

f:=false;

end;end.

28

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]