Градиентный метод первого порядка

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



проведения исследований градиентным методом.

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

  1. Ю.П. Зайченко. Исследование операций. Вища школа. Киев 1988.
  2. А.Г. Бондарь, Г.А. Статюха, Т. В. Землянкин , И.А. Потяженко. Планирование эксперимента при оптимизации процессов химической технологии. Вища школа. Киев 1980.
  3. В.В. Кафаров. Методы кибернетики в химии и химической технологии. Москва. Химия. 1985.
  4. А.В. Бондаренко, Г.А. Статюха. Планирование эксперимента в химической технологии. Вища школа. Киев 1976.

5. А. Кофман, Р. Крюон Массовое обслуживание. Теория и приложения.

6. Е.С. Венцель Исследование операций.

Листинг программы

unit MainUnit;

interfaceWindows,Classes,Graphics,SysUtils,StdCtrls,Math,Grids, ListControl,

Forms;= (stNONE,stPOINT,stCON); // Тип текущего элемента= ^TPoint;= record: integer;: integer;,Y : integer;;= ^TConnection;= record: PPoint;: PPoint;: integer;;= record: SelType;: pointer;;= class: boolean;: boolean;: integer;: integer;: TList;: TList;,Current : CurElement;CheckCicle(FP,TP:PPoint):boolean;MouseOverPoint(X,Y:integer):PPoint;MouseOverConnection(X,Y:integer):PConnection;

DrawConnections(C:TCanvas;minW,minH,maxW,maxH:integer);DrawPoints(C:TCanvas;minW,minH,maxW,maxH:integer);Clear;Create;Destroy;override;MouseOver(X,Y:integer):CurElement;DeleteSelected:boolean;DrawGraph(C:TCanvas;minW,minH,maxW,maxH:integer);AddPoint(X,Y:integer;Value:integer);AddConnection(fromPoint,toPoint:PPoint;Value:integer):boolean;ChangeCur(dX,dY:integer);

ChangeCurAndDrawContur(X,Y,GridDelta:integer;C:TCanvas;DrawFirst,D

rawSecond:boolean);GetDeltaOfCurrent(X,Y:integer;var dX,dY:integer);SaveToFile(filename:string);OpenFromFile(filename:string);SelectCurrent;DeselectCurrent;MoveOnTop;IsChanged:boolean;WasChangedAfter:boolean;GetPoints:TList;GetConnections:TList;GetPointByID(ID:integer):PPoint;ZoomOn(coef:extended);ZoomOff(coef:extended);ChangeValue(Elem:CurElement;Value:integer);GetConsCount:integer;GetPointsCount:integer;;= ^TProcCon;= ^TProcPoint;= record: integer;: PProcPoint;: PProcCon;;= record: integer;: integer;: boolean;,DBorder : integer;,DCon : integer;,DFixed : boolean;,Next : PProcCon;;= ^TWay;= record: string;: integer;: integer;: PProcPoint;;= ^TLinkTask;= ^TProcTask;= ^THolder;= record: PProcTask;: PLinkTask;: PHolder;;= record: integer;: integer;: integer;: integer;: PHolder;: boolean;: boolean;: integer;;= record: integer;: integer;: integer;: integer;: PProcTask;: PProcTask;: integer;: integer;: PLinkTask;: PProcTask;;= ^TPossibleMove;= record: integer;: integer;: integer;,Time:integer;: boolean;;= class: PProcTask;:integer;:integer;: TList;: TList;: TList;: Tlist;GetProcPointByUIN(UIN:integer):PProcPoint;GetProcTaskByUIN(UIN:integer):PProcTask;Clear;ClearProcs(FreeElements:boolean);ClearLinks(FreeElements:boolean);FormLinkTasksAndSetTimes(NumOfProcs:integer);

// -- Optimization -- //ClearPossibleMoves(var List:TList);GetPossibleMoves(UIN:integer):TList;GetTime:integer;GetProcCount:integer;SaveBackUp(var List:Tlist);RestoreBackUp(var

List:Tlist;NOP:integer;ClearCurrent:boolean);Create;Init(GPoints,GConnections:TList);DoBazovoe;SelectTask(UIN:integer);DeselectTask;MoveSelectedAfter(ProcNum,UIN:integer);ShowSubMerging(SG:TStringGrid);IncNumOfProc:boolean;DecNumOfProc:boolean;OptimizeOneStep(L1,L2:TLabel):boolean;OptimizeAuto(Form:TForm;L1,L2:TLabel);;

// --- --- --- //MinInt(I1,I2:integer):integer;MaxInt(I1,I2:integer):integer;MinMaxInt(I1,I2:integer;Var Min,Max:integer);

// -- Native functions -- //MinInt(I1,I2:integer):integer;I1I2 then Result:=I1 else Result:=I2;MinMaxInt(I1,I2:integer;Var Min,Max:integer);I1<I2 then:=I1;:=I2:=I2;:=I1;

// -- Objects -- //TGraph.GetConsCount:integer;:=Connections.Count;TGraph.GetPointsCount:integer;:=Points.Count;TGraph.ZoomOn(coef:extended);PP:PPoint;:integer;i:=0 to Points.Count-1 do:=Points[i];.X:=round(PP.X*coef);.Y:=round(PP.Y*coef);;;TGraph.ZoomOff(coef:extended);PP:PPoint;:integer;i:=0 to Points.Count-1 do:=Points[i];.X:=round(PP.X/coef);.Y:=round(PP.Y/coef);;;TGraph.Create;Create;:=0;:=TList.Create;:=TList.Create;.ceType := stNONE;.element := nil;.ceType := stNONE;.element := nil;:= 15;:= false;:= false;;TGraph.Destroy;;.Destroy;.Destroy;Destroy;TGraph.Clear;Points.Count0 do(PConnection(Connections.first));.delete(0);;:=0;.ceType := stNONE;.element := nil;.ceType := stNONE;.element := nil;;TGraph.DeleteSelected:boolean;i:integer;:PPoint;:PConnection;Selected.ceType = stNONEResult:=false:=true;:=true;:=true;Selected.ceType = stCON then:=Selected.element;i:=0 to Connections.Count-1 doConnections[i] = PC then.delete(i);;;(PC);:=Selected.element;i:=0 to Points.Count-1 doPoints[i] = PP then.delete(i);;;:=0;i<Connections.Count do:=Connections[i];(PC.toPoint=PP)or(PC.fromPoint=PP)then.delete(i);(PC):=i+1;(PP);.ceType:=stNONE;.element:=nil;;TGraph.MoveOnTop;PP:PPoint;:integer;Current.ceType = stPoint then:=true;

// ChangedAfter:=true;:=Current.element;:=0;numnil then:=X - PP.X;:=Y - PP.Y:=0;:=0;;TGraph.ChangeCur(dX,dY:integer);PP:PPoint;:=true;

// ChangedAfter:=true;:=current.element;PP<>nil then.X:=PP.X+dx;.Y:=PP.Y+dy;

TGraph.ChangeCurAndDrawContur(X,Y,GridDelta:integer;C:TCanvas;Dra

wFirst,DrawSecond:boolean);PP:PPoint;:=true;

// ChangedAfter:=true;current.ceType<>stNONE then:=current.element;.Brush.Style:=bsClear;.Pen.Mode := pmNotXor;.Pen.Color:=clBlack;.Pen.Width:=1;DrawFirst then C.Ellipse(PP.X-PointRadius,PP.Y-

PointRadius,PP.X+PointRadius,PP.Y+PointRadius);GridDelta>1 then.X:=round(X/GridDelta)*GridDelta;.Y:=round(Y/GridDelta)*GridDelta.X:=X;.Y:=Y;DrawSecond then C.Ellipse(PP.X-PointRadius,PP.Y-,PP.X+PointRadius,PP.Y+PointRadius);.Pen.Mode := pmCopy;.Brush.Style:=bsSolid;;;getArrowCoord(Fx,Fy,Tx,Ty:integer;R,Alpha:Integer;var

Ar1X,Ar1Y,Ar2X,Ar2Y:integer);CosV,SinV,D,CosAd2:extended;,b,c,Descr:extended;,y2,x1,x2:extended;,RSinAd2:integer;:= sqrt((FX-TX)*(FX-TX)+(FY-TY)*(FY-TY));DFY then Ar1Y := TY - RCosAd2Ar1Y := TY + RCosAd2;Y := Ar1Y;:= (FY-TY) / D;:= Cos(Pi*Alpha/360);:=1;:=-2*CosAd2*SinV;:=CosAd2*CosAd2-CosV*CosV;:= b*b - 4*a*c;:= (-b - sqrt(Descr))/(2*a);:= (-b + sqrt(Descr))/(2*a);:= (cosAd2 - sinV*y1) / cosV;:= (cosAd2 - sinV*y2) / cosV;X:=round(x1*R)+Tx;X:=round(x2*R)+Tx;Y:=round(y1*R)+Ty;Y:=round(y2*R)+Ty;;

TGraph.DrawConnections(C:TCanvas;minW,minH,maxW,maxH:integer);i:integer;:PConnection;X,Ar1Y,Ar2X,Ar2Y:integer;:array[0..2]of Windows.TPoint;:extended;,FY,TX,TY:integer;:string;,H,X,Y:integer;.Pen.Color := clBlue;i:=0 to Connections.Count-1 do.Brush.Color := clBlue;:=Connections[i];Selected.element = PC then C.Pen.Width:=2C.Pen.Width:=1;.moveto(PC.fromPoint.X,PC.fromPoint.Y);.lineto(PC.toPoint.X,PC.toPoint.Y);:=PC.fromPoint.X;:=PC.fromPoint.Y;:=PC.toPoint.X;:=PC.toPoint.Y;:= sqrt((FX-TX)*(FX-TX)+(FY-TY)*(FY-TY));D<>0 then:= round( TX - PointRadius*(TX-FX)/D );:= round( TY - PointRadius*(TY-FY)/D );;(FX,FY,TX,TY,10,45,Ar1X,Ar1Y,Ar2X,Ar2Y);

//

getArrowCoord(PC.fromPoint.X,PC.fromPoint.Y,PC.toPoint.X,PC.toPoint.

Y,Poin tRadius,10,45,Ar1X,Ar1Y,Ar2X,Ar2Y);[0].x := TX;[0].y := TY;[1].x := Ar1X;[1].y := Ar1Y;[2].x := Ar2X;[2].y := Ar2Y;.Polygon(Poly);:=inttostr(PC.Value);:=C.TextHeight('A');:=C.TextWidth(s);:=round((FX+TX-W)/2)-3;:=round((FY+TY-H)/2)-1;.Brush.Color := clWhite;.Rectangle(X,Y,X+W+7,Y+H+2);.Brush.style:=bsClear;.TextOut(X+3,Y+1,s);.Brush.style:=bsSolid;

{ C.moveto(Ar1X,Ar1Y);.lineto(PC.toPoint.X,PC.toPoint.Y);.moveto(Ar2X,Ar2Y);.lineto(PC.toPoint.X,PC.toPoint.Y);

};

TGraph.DrawPoints(C:TCanvas;minW,minH,maxW,maxH:integer);i:integer;:PPoint;,W:integer;,X2,Y1,Y2:integer;:string;.Brush.Style := bsSolid;.Brush.Color := clWhite;.Pen.Color := clBlack;i:=0 to Points.Count-1 do:=Points[i];Selected.element = PP then