Линейное программирование (Составление плана использования технологических способов в производстве), страница 3

F=6 = 2xi-3x2 (3;0) (0;-2) f= О IIZiчерез точку (0; 0)

Нашли направления убывания Z. Двигая в этом направлении прямую Z параллельно самой себе доходим до крайней точки на ОДР.

В точке D функция Z достигает своего минимума.                                                                                                                         

Fmaxв точке D (XI *; Х2*)

Найдём координаты этой точки.

Точка D образована пересечением первого и третьего ограничений. Решим совместно систему.

Подставим координаты точки D в выражение целевой функции, получаем её значение min.

Таким образом, найдено решение задачи. Ответ: XI* =2; X2* = 4 Fтin= - 8

Расчёты проводили в Delphi:

unit Unit1;

interface

uses

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

Dialogs, ExtCtrls, StdCtrls, Grids, Menus, ComCtrls;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Edit1: TEdit;

Button1: TButton;

Image1: TImage;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

StringGrid2: TStringGrid;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Button3: TButton;

MainMenu1: TMainMenu;

gfgf1: TMenuItem;

Edit5: TEdit;

Edit6: TEdit;

Button7: TButton;

Label10: TLabel;

Label11: TLabel;

Label13: TLabel;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Button8: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure gfgf1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var aaaa:integer;

begin

aaaa:=strtoint(edit1.text);

stringgrid1.RowCount:=aaaa;

end;

procedure TForm1.Button2Click(Sender: TObject);

var i,j,xtoc,ytoc:integer;

strok:string;

bs: TBrushStyle;//

a,b,c,xa,xy,y1,y2,y111,y222:real;

okrx,okry,okrxx,okryy,xx,yy,x1,x2,s,ss:integer;

x0,y0:integer;

dx,dy:integer;

h,w:integer;

x,y:integer;

lx,ly:real;

dlx,dly:real;

cross:integer;

dcross:integer;

begin

form2.stringgrid1.rowcount:=form1.StringGrid1.rowcount;

form1.image1.Canvas.Pen.Color:= clBlack;

form1.image1.Canvas.brush.Color:= clwhite;

form1.image1.Canvas.brush.style:= bssolid;

image1.Canvas.Rectangle(0,0,777,697);

x0:=150; y0:=450;

dx:=45; dy:=45;

dcross:=1;

dlx:=1.0;

dly:=1.0;

h:=400; w:=400;

with form1.image1.Canvas do begin

cross:=dcross;

MoveTo(x0,y0); LineTo(x0,y0-h);

MoveTo(x0,y0); LineTo(x0-h,y0);

MoveTo(x0,y0); LineTo(x0+w, y0);

MoveTo(x0,y0); LineTo(x0, y0+h);

x:=x0+dx;

lx:=dlx;

TextOut(x0+h+10,y0+5,'X');

TextOut(x0-15,y0-h-15,'Y');

repeat

MoveTo(x,y0-3);LineTo(x,y0+3);

cross:=cross-1;

if cross = 0 then

begin

TextOut(x-8,y0+5,FloatToStr(lx));

cross:=dcross ; end;

Pen.Style:=psDot;

MoveTo(x,y0-3);LineTo(x,y0-h);

Pen.Style:=psSolid;

lx:=lx+dlx;

x:=x+dx;

until (x>x0+w);

y:=y0-dy;

ly:=dly;

repeat

MoveTo(x0-3,y);LineTo(x0+3,y);

TextOut(x0-20,y,FloatToStr(ly));

Pen.Style:=psDot;

MoveTo(x0+3,y); LineTo(x0+w,y);

Pen.Style:=psSolid;

y:=y-dy;

ly:=ly+dly; until (y<y0-h);

end;

s:=stringgrid1.rowCount-1;

for i:=0 to s  do begin

form2.stringgrid1.cells[0,i]:=form1.StringGrid1.cells[0,i];

form2.stringgrid1.cells[1,i]:=form1.StringGrid1.cells[1,i];

form2.stringgrid1.cells[2,i]:=form1.StringGrid1.cells[2,i];

a:=strtofloat(stringgrid1.Cells[0,i]);

b:=strtofloat(stringgrid1.Cells[1,i]);

c:=strtofloat(stringgrid1.Cells[2,i]);

strok:=stringgrid1.Cells[3,i];