Автор работы: Пользователь скрыл имя, 26 Июня 2011 в 16:59, курсовая работа
Оптимизационные методы основаны на применении математических методов, реализованных на ЭВМ. Эти методы делятся на две группы - чисто оптимизационные и эвристические. Большинство из оптимизационных методов используют линейные модели и метод линейного программирования для их решения. Однако реальные задачи раскроя часто имеют нелинейные элементы, которые приводят к тому, что решение получается все-таки не оптимальным.
Введение.......................................................................................................................3
1. Постановка задачи..................................................................................................4
2. Обзор и анализ существующих методов решения задачи...........…..….............5
3. Описание выбранного алгоритма………………….…….....................................6
4. Средства решения задачи
4.1. Технические средства решения задачи……………………….………….7
4.2. Инструментальные средства разработки………....……………………...7
5. Информационное обеспечение задачи
5.1. Входная информация……………………………………….……………..8
5.2. Выходная информация………………………………………………..…...8
6. Программное обеспечение задачи
6.1. Структура программного продукта……………………………................9
6.2. Описание программного продукта…………………………........….....…9
6.3. Руководство пользователю…………………………………......................9
Заключение…………………………………………………………............………..13
Литература………………………………………….................................…………..14
Приложения……………………….…....................................…….………………...15
ПРИЛОЖЕНИЕ
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin,
Buttons, Grids, jpeg, ExtCtrls, XPMan;
type
TForm1 = class(TForm)
strngrd1: TStringGrid;
btn2: TSpeedButton;
lbl1: TLabel;
lbl2: TLabel;
se1: TSpinEdit;
se2: TSpinEdit;
btn3: TSpeedButton;
mmo1: TMemo;
lbl3: TLabel;
lbl5: TLabel;
btn4: TButton;
XPManifest1: TXPManifest;
procedure btn3Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure se1Change(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
perem:Byte;
ogr:Byte;
implementation
{$R *.dfm}
procedure TForm1.btn3Click(Sender: TObject);
var i:byte;
begin
lbl3.Visible:=true;
perem:=StrToInt(se1.Text);
ogr:=StrToInt(se2.text);
strngrd1.Cells[0,0]:='БП';
strngrd1.Cells[0,1]:='Z';
strngrd1.RowCount:=ogr+1;
strngrd1.ColCount:=perem+ogr+
for i:=2 to strngrd1.RowCount-1 do
strngrd1.Cells[0,i]:='S'+
For i:=1 to perem do
strngrd1.Cells[i,0]:='X'+
For i:=perem+1 to strngrd1.ColCount-2 do
strngrd1.Cells[i,0]:='S'+
strngrd1.Cells[strngrd1.
strngrd1.Cells[strngrd1.
lbl1.Visible:=false;
lbl2.Visible:=false;
se1.Visible:=false;
se2.Visible:=false;
btn3.Visible:=false;
lbl3.Visible:=False;
end;
procedure math_met(Grid:TStringGrid;
var min,kl,k:real; resh:boolean;
i,j,pr,kl_stolb,kl_str:byte;
begin
resh:=true;
{Будем повторять до тех пор, пока в строке z есть отрицательные элементы}
while resh do begin
resh:=False;
{Нахождение ключевого столбца}
for i:=1 to Grid.ColCount-2 do
if (StrToFloat(Grid.Cells[i,1])<>
min:=StrToFloat(Grid.Cells[i,
kl_stolb:=i;
break;
for i:=1 to Grid.ColCount-2 do
if StrToFloat(Grid.Cells[i,1])<
min:=StrToFloat(Grid.Cells[i,
kl_stolb:=i;
end;
{Рассчитать Отношение}
For i:=1 to Grid.RowCount-1 do
if (StrToFloat(Grid.Cells[kl_
else Grid.Cells[Grid.ColCount-1,i]:
{Нахождение ключевой сроки}
for i:=1 to Grid.RowCount-1 do
if (Grid.Cells[Grid.ColCount-1,i]
begin
min:=StrToFloat(Grid.Cells[
kl_str:=i;
break;
end;
for i:=2 to Grid.RowCount-1 do
if (Grid.Cells[Grid.ColCount-1,i]
begin
min:=StrToFloat(Grid.Cells[
kl_str:=i;
end;
end;
{Ключевой элемент}
kl:=StrToFloat(Grid.Cells[kl_
{Получаем новую ключевую строку}
For i:=1 to Grid.ColCount-2
do begin
Grid.Cells[i,kl_str]:=
end;
kl:=StrToFloat(Grid.Cells[kl_
{Получение нового плана}
for i:=kl_str+1 to Grid.RowCount-1 do
begin
k:=-1*StrToFloat(Grid.Cells[
for j:=1 to Grid.ColCount-2 do
Grid.Cells[j,i]:=FloatToStr(
end;
for i:=1 to kl_str-1 do
begin
k:=-1*StrToFloat(Grid.Cells[
for j:=1 to Grid.ColCount-2 do
Grid.Cells[j,i]:=FloatToStr(
end;
Grid.Cells[0,kl_str]:=Grid.
resh:=true;
{Проверка на отпимальность}
for i:=1 to Grid.ColCount-2 do
if StrToFloat(Grid.Cells[i,1])<0 then begin
resh:=false;
break;
end;
pr:=0;
if resh then begin ShowMessage('Оптимальное решение найдено');
Mmo1.Lines.Clear;
Mmo1.Lines.Add('Оптимальное решение');
For i:=1 to Grid.RowCount do
case i of
1:mmo1.Lines.Add(' Z=
'+Grid.Cells[Grid.ColCount-2,
else if Pos('X',Grid.Cells[0,i])<>0
then Mmo1.Lines.Add(Grid.Cells[0,i]
end;
end;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
btn2.Caption:='Следующая итерация';
math_met(strngrd1,mmo1);
end;
procedure TForm1.se1Change(Sender: TObject);
begin
if (se1.text='') or (StrToInt(se1.text)<0) or (se2.text='') or (StrToInt(se2.text)<0) then btn3.Enabled:=False;
end;
procedure TForm1.btn4Click(Sender: TObject);
begin
mmo1.Lines.SaveToFile('
end;
end.