Линейное программирование

Автор работы: Пользователь скрыл имя, 29 Марта 2011 в 15:13, реферат

Краткое описание

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

Содержимое работы - 1 файл

КурсовикММ.doc

— 515.00 Кб (Скачать файл)

    1. Количество базовых переменных

    2. Количество  переменных

    3. Степень  точности

  1. Задача (на max, на min)

     

    1. Выходная  информация
 

  Выходная информация в приложении – это таблицы, в первую таблицу заносится условие задачи, во второй таблице будут отражены промежуточные результаты i-ой итерации

  1. Таблица, в которую заносится условие задачи

 

 

  1. Результаты  i-ой итерации

 

7. Программное обеспечение задачи 

  7.1 Описание программного продукта 

  В моём приложении 6 процедур: 

  //по вводу  данных формируются матрицы на  форме2 "Решение"

  procedure TForm1.Button1Click(Sender: TObject);

  //процедура ввода данных задачи

  procedure TForm1.FormCreate(Sender: TObject);

  //процедура решения k-й таблицы

  procedure TForm2.resh;

  //процедура формирования новой таблицы

  procedure TForm2.newtab;

  //процедура  решения по кнопке "Вычислить"

  procedure TForm2.Button1Click(Sender: TObject);

  //по закрытию  формы - выход из программы

  procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); 

  7.2 Руководство пользователю 

1.Открыть Program.exe, появится окно приложения, вводим в него количество переменных, количество базовых переменных и степень точности, затем выбираем на максимум или на минимум, нажать кнопку начать, появится форма для ввода задачи

     

     
     
     
     
     
     
     

    2.Форма для  ввода задания

 

3. Вводим данные в таблицу и нажимаем кнопку «Решение»

 
 
 

 
 
 

4.После нажатия кнопки производится вычисление задачи, высвечивается сообщение с результатом i-ой итерации

     

     

    На  сообщении нажимаем кнопку «ОК», выводится  последняя таблица с конечным результатом. 
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

Заключение

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

 

     

Список литературы

Методы оптимизации  в примерах и задачах: Учеб. пособие/ А. В. Пантелеев, Т. А. Летова. – М.: Высш. шк., 2002. – 544.

Конспект по “Мат. Методам”

 

Приложение 

program Program; 

uses

  Forms,

  Unit1 in 'Unit1.pas' {Form1},

  Unit2 in 'Unit2.pas' {Form2};

  //Unit4 in 'Unit4.pas' {Form4}; 

{$R *.res} 

begin

  Application.Initialize;

  //Application.CreateForm(TForm4, Form4);

   Application.CreateForm(TForm1, Form1);

  Application.CreateForm(TForm2, Form2);

  Application.Run;

end. 

//ФОРМИРОВАНИЕ  МАТРИЦ НА ФОРМЕ

unit Unit1; 

interface 

uses

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

  Dialogs, StdCtrls, ExtCtrls, Spin; 

type

  TForm1 = class(TForm)

    Button1: TButton;

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    panel1: TPanel;

    Label3: TLabel;

    SpinEdit1: TSpinEdit;

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    Label4: TLabel;

    Label5: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

   

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form1: TForm1;

  mgl:array[1..200,1..200] of tedit;

  strm:array[1..100] of tedit;

  mp:array[1..2,1..100] of tedit;

  x,y:integer;

  e:longint;

  maxmin:integer;

  prz:byte;

  sh:byte;

implementation 

uses Unit2, Unit3; 

{$R *.dfm} 

//по вводу  данных формируются матрицы на  форме2 "Решение"

procedure TForm1.Button1Click(Sender: TObject);

var i,j,k,xtop,yleft:integer;

const cx=45;

      ch=20;

      nleft=-30;

      ntop=80;

      cy=20;

      cw=45;

begin

inc(sh);

e:=SpinEdit1.Value;

if RadioButton1.Checked then maxmin:=-1 else maxmin:=1;

if (Edit2.Text='')or(Edit1.Text='')or(Edit2.Text='0')or(Edit1.Text='0')

  then begin showmessage('Введите значение >0');exit;end;

x:=strtoint(Edit1.Text)+3;

y:=strtoint(Edit2.Text);

for i:=1 to y do

begin

xtop:=ntop+i*cy; 

  for j:=1 to x do

  begin

  yleft:=nleft+j*cx;

   if (i=1)and(j>2) then

   begin

    strm[j-2]:=tedit.Create(Form2);

    with strm[j-2] do

     begin

     Parent:=Form2;

     Top:=ntop+y*cy+30;

     Left:=yleft;

     Width:=cw;

     Height:=ch;

     end;

   end;

   if (i=1)and(j>3) then

   for k:=1 to 2 do

   begin

   mp[k,j-3]:=tedit.Create(Form2);

    with mp[k,j-3] do

    begin

    Parent:=Form2;

    Top:=50+(k-1)*20;

    Left:=yleft;

    Width:=cw;

    Height:=20; 

    end;

   end;

          mgl[i,j]:=tedit.Create(Form2);

          with mgl[i,j] do

          begin

          Parent:=Form2;

          Top:=xtop;

          Left:=yleft;

          Width:=cw;

          Height:=ch; 

          end;

  end;

end;

Form2.Show;

form1.Visible:=false;

end; 

//ввод данных моей задачи

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Text:='12';

Edit2.Text:='7';

RadioButton1.Checked:=true;

end; 

end. 

//ФОРМА РЕШЕНИЯ

unit Unit2; 

interface 

uses

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

  Dialogs, StdCtrls, Mask, ExtCtrls, jpeg; 

type

  TForm2 = class(TForm)

    Button1: TButton;

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Button3: TButton;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure resh(var x1,y1:byte;var rm:real;var pr:boolean);

    procedure newtab(x1,y1:byte;rm:real);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure Button3Click(Sender: TObject); 

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form2: TForm2;

  mgl_r:array[1..200,1..200]of string;

  strm_r:array[1..200]of string;

  pr:boolean;

  xr,yr:byte; 

implementation

uses Unit1, Unit3; 

{$R *.dfm} 

//решение k-й таблицы

procedure TForm2.resh;

var i,j:byte;

    dstrm,maxstrm,minp:real;

begin

pr:=true;

maxstrm:=0;

for j:=3 to x do

begin

  dstrm:=0;

     for i:=1 to y do

     begin

     mgl_r[i,j]:=mgl[i,j].text;

     dstrm:=dstrm+strtofloat(mgl[i,j].text)*strtofloat(mgl[i,2].text);

     end;

     if(j>3)then

     begin

     dstrm:=dstrm-strtofloat(mp[1,j-3].text);

     if(maxmin*dstrm>maxstrm*maxmin)then begin maxstrm:=dstrm;x1:=j;end;

     end;

      strm[j-2].text:=floattostr(dstrm);

end;

if(maxmin*maxstrm>0)then pr:=false;

minp:=999999;

for i:=1 to y do

if((strtofloat(mgl[i,x1].Text)>0)and(strtofloat(mgl[i,3].Text)/strtofloat(mgl[i,x1].Text)<minp))then

begin

minp:=strtofloat(mgl[i,3].Text)/strtofloat(mgl[i,x1].Text);

y1:=i;end;

rm:=strtofloat(mgl[y1,x1].text);

mgl[y1,x1].Color:=clskyblue;

mgl[y1,1].text:=mp[2,x1-3].Text;

mgl[y1,2].text:=mp[1,x1-3].Text;

end; 

//формирование  новой таблицы

procedure TForm2.newtab;

var i,j:byte;

begin

for i:=1 to y do

Информация о работе Линейное программирование