?? comp_fgh.pas
字號:
unit comp_fgh;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
arr3 = array[1..55]of real;
type
TForm3 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
Procedure ffx;
Procedure ggx;
implementation
uses comp_1, comp_2;
{$R *.DFM}
{ 應用復合形法優化方法計算優化問題,用戶應首先根據具體問題
建立其優化的數學模型(①目標函數;②約束函數);
min F[x]
s.t. GX[j]≤0 (j=1,2,...kg)
再將目標函數、約束函數按DELPHI語言改寫成表達式,
fx := ...;
gx[1] := ...;
gx[2] := ...;
gx[3] := ...;
.
.
.
gx[kg] := ...;
替換下面的procedure ffx 段中的目標函數的計算表達式 fx;
替換下面的procedure ggx 段中的目標函數的計算表達式 gx[1]、gx[2]...gx[kg]}
// 應用懲罰函數法優化方法計算優化問題,用戶應首先根據具體問題
// 建立其優化的數學模型(①目標函數;②不等式約束函數;③等式約束函數。);
// min F[x]
// s.t. GX[j]≤0 (j=1,2,...kg)
// HX[j]=0 (j=1,2,...kh)
// 再將目標函數、約束函數按DELPHI語言改寫成表達式,
// fx := ...;
// gx[1] := ...;
// gx[2] := ...;
// .
// .
// gx[kg] := ...;
// hx[1] := ...;
// hx[2] := ...;
// .
// .
// hx[kh] := ...;
// 替換下面的procedure ffx段中的目標函數的計算表達式 fx;
// 替換下面的procedure ggx段中的目標函數的計算表達式 gx[1]、gx[2]...gx[kg]
// 替換下面的procedure hhx段中的目標函數的計算表達式 hx[1]、hx[2]...hx[kh]}
// 考題 1 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
NFX := NFX+1;
fx:=4.0*x[1]-x[2]*x[2]-12.0;
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=x[1]*x[1]+x[2]*x[2]-25.0;
gx[2]:=-x[1];
gx[3]:=-x[2];
end;
end;
{
procedure hhx;
begin
with form1.comple do begin
hx[1]:=hx[1];
end;
end;
{
// 考題 2 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=60.0-10.0*x[1]-4.0*x[2]+x[1]*x[1]+x[2]*x[2]-x[1]*x[2];
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=-x[1];
gx[2]:=-x[2];
gx[3]:=x[1]-6.0;
gx[4]:=x[2]-8.0;
gx[5]:=x[1]+x[2]-11.0;
end;
end;
procedure hhx;
begin
with form1.comple do begin
hx[1]:=hx[1];
end;
end;
}
{
// 考題 3 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=4.0*x[1]-x[2]*x[2]-12.0;
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=34.0-10.0*x[1]-10.0*x[2]+x[1]*x[1]+x[2]*x[2];
gx[2]:=-x[1];
gx[3]:=-x[2];
end;
end;
procedure hhx;
begin
with form1.comple do begin
hx[1]:=x[1]*x[1]+x[2]*x[2]-25.0;
end;
end;
}
{
// 考題 4 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=x[1]*x[4]*(x[1]+x[2]+x[3])+x[3];
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=x[1]*x[1]+x[2]*x[2]+x[3]*x[3]+x[4]*x[4]-40.0;
gx[2]:=25.0-x[1]*x[2]*x[3]*x[4];
end;
end;
procedure hhx;
begin
with form1.comple do begin
hx[1]:=x[1];
end;
end;
}
{
// 考題 5 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=x[1]*x[1]+x[2];
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=x[1]*x[1]+x[2]*x[2]-9.0;
gx[2]:=x[1]+x[2]-1.0;
end;
end;
procedure hhx;
begin
with form1.comple do begin
hx[1]:=x[1];
end;
end;
}
{
// 考題 6 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=(x[1]-5.0)*(x[1]-5.0)+4.0*(x[2]-6.0)*(x[2]-6.0);
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=64.0-x[1]*x[1]-x[2]*x[2];
gx[2]:=x[2]-x[1]-10.0;
gx[3]:=x[1]-10.0;
end;
end;
procedure hhx;
begin
with form1.comple do begin
hx[1]:=x[1];
end;
end;
}
{
// 考題 7 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=(x[1]-x[4])*(x[1]-x[4])+(x[2]-x[5])*(x[2]-x[5])+(x[3]-x[6])*(x[3]-x[6]);
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=x[1]*x[1]+x[2]*x[2]+x[3]*x[3]-5.0;
gx[2]:=(x[4]-3.0)*(x[4]-3.0)+x[5]*x[5]-1.0;
gx[3]:=x[6]-8.0;
gx[4]:=4.0-x[6];
end;
end;
procedure hhx;
begin
with form1.comple do begin
hx[1]:=x[1];
end;
end;
}
{
// 考題 8 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=1000.0-x[1]*x[1]-2.0*x[2]*x[2]-x[3]*x[3]-x[1]*x[2]-x[1]*x[3];
end;
end;
procedure ggx; //約束函數
begin
with form1.comple do begin
gx[1]:=-x[1];
gx[2]:=-x[2];
gx[3]:=-x[3];
end;
end;
procedure hhx;
begin
with form1.comple do begin
HX[1]:=X[1]*X[1]+X[2]*X[2]+X[3]*X[3]-25.0;
HX[2]:=8.0*X[1]+14.0*X[2]+7.0*X[3]-56.0;
end;
end;
}
{
// 考題 9 ===========================================================
procedure ffx; //目標函數
begin
with form1.comple do begin
fx:=100.0*(x[2]-x[1]*x[1])*(x[2]-x[1]*x[1])+90.0*(x[4]-x[3]*x[3])*(x[4]-x[3]*x[3])
+(1.0-x[3])*(1.0-x[3])+10.0*((x[2]-1.0)*(x[2]-1.0)+(x[4]-1.0)*(x[4]-1.0))
+19.8*(x[2]-1.0)*(x[4]-1.0);
end;
end;
procedure ggx; //約束函數
var
j : integer;
begin
with form1.comple do begin
for j := 1 to 4 do gx[j]:=-10.0-x[j];
for j := 1 to 4 do gx[4+j]:=x[j]-10.0;
end;
end;
procedure hhx;
begin
with form1.comple do begin
// HX[1]:=HX[1];
end;
end;
}
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -