- 积分
- 32
- 注册时间
- 2004-9-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-6-22 10:05:47
|
显示全部楼层
来自 北京
本帖最后由 shamohu 于 2009-6-22 10:10 编辑
趣味问题一般有多种解法,这里仅演示如何用1stOpt处理这些问题。1stOpt的用户手册是不太详细,通过这些简单的例子,使有兴趣者增加一些了解。下面是年龄问题的求解代码(应该还有更好的方法),用1stOpt 3.0求解,可100%得到唯一解(只是顺序不同)。
Algorithm = SM3;
Parameter x(4)=[1,100,0], p(10)=[1,4];
Constant L = [45,56,60,71,82];
StartProgram [Pascal];
Procedure MainModel;
var temb: double;
j, n1, n2: integer;
k1: integer;
k: array[1..4] of integer;
m: array[1..10] of integer;
Begin
for j := 1 to 10 do m[j] := round(p[j]); //转换成整数
for j := 1 to 4 do k[j] := 0;
for j := 1 to 10 do begin
k1 := m[j];
if k1 = 1 then k[1] := k[1] + 1
else if k1 = 2 then k[2] := k[2] + 1
else if k1 = 3 then k[3] := k[3] + 1
else k[4] := k[4] + 1;
end;
temb := 0;
for j := 1 to 5 do begin
n1 := m[2*j-1]; n2 := m[2*j];
temb := temb + sqr(x[n1]+x[n2]-L[j]);
end;
ObjectiveResult := temb; //目标函数:应为零
ConstrainedResult := For(j=1:4)(k[j]>=2); //约束条件:每人最少出现两次
ConstrainedResult := For(j=1:4)(k[j]<=3); //约束条件:每人最多出现三次
End;
EndProgram;
结果:
优化算法: 鲁棒简面体爬山法 + 通用全局优化法
目标函数值(最小): 0
x1: 28
x2: 17
x3: 43
x4: 39
p1: 1.45118368597213
p2: 2.02817945531538
p3: 3.80049059179586
p4: 1.78784872433298
p5: 1.6155817172149
p6: 2.50591559351723
p7: 1.40690829743886
p8: 3.27614114687388
p9: 3.69577126839416
p10: 2.68708826874321
即4人年龄分别为:28、17、43和39 |
评分
-
1
查看全部评分
-
|