Информационное обеспечение задачи

Автор работы: Пользователь скрыл имя, 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

Работа состоит из  1 файл

Пояснительная записка по ММ.doc

— 289.00 Кб (Скачать документ)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ПРИЛОЖЕНИЕ 

unit Unit1; 

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+2;

  for i:=2 to strngrd1.RowCount-1 do

  strngrd1.Cells[0,i]:='S'+IntToStr(i-1); 

  For i:=1 to perem do

  strngrd1.Cells[i,0]:='X'+IntToStr(i); 

  For i:=perem+1 to strngrd1.ColCount-2 do

  strngrd1.Cells[i,0]:='S'+IntToStr(i-perem);

  strngrd1.Cells[strngrd1.ColCount-1,0]:='Отношение';

  strngrd1.Cells[strngrd1.ColCount-2,0]:='B'; 

lbl1.Visible:=false;

lbl2.Visible:=false;

se1.Visible:=false;

se2.Visible:=false;

btn3.Visible:=false;

lbl3.Visible:=False;

end; 
 
 

procedure math_met(Grid:TStringGrid;mmo1:TMemo);

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])<>0) then begin

     min:=StrToFloat(Grid.Cells[i,1]);

    kl_stolb:=i;

     break;

                                                  end;

  for i:=1 to Grid.ColCount-2 do

  if StrToFloat(Grid.Cells[i,1])<min then begin

    min:=StrToFloat(Grid.Cells[i,1]);

      kl_stolb:=i;

                               end; 

{Рассчитать  Отношение}

  For i:=1 to Grid.RowCount-1 do

  if (StrToFloat(Grid.Cells[kl_stolb,i])<=0) or ((StrToFloat(Grid.Cells[Grid.ColCount-2,i])<=0)) then Grid.Cells[Grid.ColCount-1,i]:='-'

  else Grid.Cells[Grid.ColCount-1,i]:=FloatToStr(StrToFloat(Grid.Cells[Grid.ColCount-2,i])/StrToFloat(Grid.Cells[kl_stolb,i])); 

  {Нахождение  ключевой сроки}

for i:=1 to Grid.RowCount-1 do

  if (Grid.Cells[Grid.ColCount-1,i]<>'-') and (StrToFloat(Grid.Cells[Grid.ColCount-1,i])<>0) then

         begin

            min:=StrToFloat(Grid.Cells[Grid.ColCount-1,i]);

            kl_str:=i;

            break;

                   end;

  for i:=2 to Grid.RowCount-1 do

  if (Grid.Cells[Grid.ColCount-1,i]<>'-') and (StrToFloat(Grid.Cells[Grid.ColCount-1,i])<>0) and (StrToFloat(Grid.Cells[Grid.ColCount-1,i])<min) then

  begin

     min:=StrToFloat(Grid.Cells[Grid.ColCount-1,i]);

           kl_str:=i;

             end;

end; 

{Ключевой элемент}

  kl:=StrToFloat(Grid.Cells[kl_stolb,kl_str]);

  {Получаем  новую ключевую строку}

  For i:=1 to Grid.ColCount-2 do begin 

  Grid.Cells[i,kl_str]:=FloatToStr(StrToFloat(Grid.Cells[i,kl_str])/kl);

  end; 

  kl:=StrToFloat(Grid.Cells[kl_stolb,kl_str]); 

  {Получение  нового плана}

  for i:=kl_str+1 to Grid.RowCount-1 do

  begin

    k:=-1*StrToFloat(Grid.Cells[kl_stolb,i])/kl;

    for j:=1 to Grid.ColCount-2 do

   Grid.Cells[j,i]:=FloatToStr(StrToFloat(Grid.Cells[j,i])+StrToFloat(Grid.Cells[j,kl_str])*k);

  end; 
 

  for i:=1 to kl_str-1 do

  begin

    k:=-1*StrToFloat(Grid.Cells[kl_stolb,i])/kl;

    for j:=1 to Grid.ColCount-2 do

    Grid.Cells[j,i]:=FloatToStr(StrToFloat(Grid.Cells[j,i])+StrToFloat(Grid.Cells[j,kl_str])*k);

  end; 

Grid.Cells[0,kl_str]:=Grid.Cells[kl_stolb,0]; 

  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,1]);

  else if Pos('X',Grid.Cells[0,i])<>0 then Mmo1.Lines.Add(Grid.Cells[0,i]+'= '+Grid.Cells[Grid.ColCount-2,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('Решение  '+DateToStr(Date())+'.txt');

end; 

end.

Информация о работе Информационное обеспечение задачи