dingd 发表于 2006-6-20 16:01

[原创]1stOpt优化应用 - 与Matlab对比!

[原创]1stOpt优化应用 - 与Matlab对比!

在Matlab区有一优化应用的帖子(http://forum.vibunion.com/thread-732-1-1.html),在这,试着用1stOpt求解相同的例子,可以发现,1stOpt的优化能力远胜于Matlab,无需编程,表达式直观易懂,尤其是不需猜初值

§1 线性规划模型
实例1:生产计划问题
假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。甲单位产品的利润70元,乙单位产品的利润120元。问如何安排生产,才能使该厂所获的利润最大。
建立数学模型:
设x1、x2分别为生产甲、乙产品的件数。f为该厂所获总润。
max f=70x1+120x2
s.t 9x1+4x2≤3600 4x1+5x2≤2000 3x1+10x2≤3000 x1,x2≥0

1stOpt代码:
*******************************
ParameterDomain = ;
MaxFunction 70*x1+120*x2;
9*x1+4*x2≤3600;
4*x1+5*x2≤2000;
3*x1+10*x2≤3000;
********************************
结果:
线性规划的最大(Max)为:42800
参数最优解为:
x1: 200
x2: 240
约束函数:
1: 9*x1+4*x2-(3600) = -840
2: 4*x1+5*x2-(2000) = 0
3: 3*x1+10*x2-(3000) = 0
4: x1-(0) = 200
5: x2-(0) = 240

实例2:投资问题 某公司有一批资金用于4个工程项目的投资,其投资各项目时所得的净收益(投入资金锪百分比)如下表:
工程项目收益表
工程项目ABCD
收益(%)1510812

由于某种原因,决定用于项目A的投资不大于其他各项投资之和而用于项目B和C的投资要大于项目D的投资。试确定全文该公司收益最大的投资分配方案。建立数学模型:设x1、 x2 、x3 、x4分别代表用于项目A、B、C、D的投资百分数。max f=0.15x1+0.1x2+0.08 x3+0.12 x4
s.t x1-x2- x3- x4≤0 x2+ x3- x4≥0
x1+x2+x3+ x4=1
xj≥0 j=1,2,3,4
1stOpt代码:
*******************************
ParameterDomain = ;
MaxFunction 0.15*x1+0.1*x2+0.08*x3+0.12*x4;
x1-x2- x3- x4 ≤0;
x2+ x3- x4 ≥0;
x1+x2+x3+ x4=1
*******************************
结果:
该线性规划的最大(Max)为:0.13参数最优解为:
x1: 0.5
x2: 0.25
x3: 0
x4: 0.25约束函数:
1: x1-x2- x3- x4 -(0) = -1.665334537E-16
2: x2+ x3- x4 -(0) = 0
3: x1+x2+x3+ x4-(1) = 0
4: x1-(0) = 0.5
5: x2-(0) = 0.25
6: x3-(0) = 0
7: x4-(0) = 0.25

例3:求解线性规划问题:max f=2x1+5x2
s.t x1≤4
x2≤3
x1+2x2≤8

1stOpt代码:
*******************************
Parameter x1[,4], x2[,3];
MaxFunction 2*x1+5*x2;
x1+2*x2<=8;
*******************************
结果:
该线性规划的最大(Max)为:19参数最优解为:
x1: 2
x2: 3约束函数:
1: x1+2*x2-(8) = 0
2: x1-(4) = -2
3: x2-(3) = 0

例4:求解线性规划问题:
minf=5x1-x2+2x3+3x4-8x5s.t –2x1+x2-x3+x4-3x5≤6 2x1+x2-x3+4x4+x5≤7 0≤xj≤15 j=1,2,3,4,5

1stOpt代码:
*******************************************
ParameterDomain = ;
MinFunction 5*x1-x2+2*x3+3*x4-8*x5;
-2*x1+x2-x3+x4-3*x5≤6;
2*x1+x2-x3+4*x4+x5≤7;
********************************************
结果:
该线性规划的最小(Min)为:-104
参数最优解为:
x1: 0
x2: 0
x3: 8
x4: 0
x5: 15
约束函数:
1: -2*x1+x2-x3+x4-3*x5-(6) = -59
2: 2*x1+x2-x3+4*x4+x5-(7) = 0
3: x1-(0) = 0
4: x1-(15) = -15
5: x2-(0) = 0
6: x2-(15) = -15
7: x3-(0) = 8
8: x3-(15) = -7
9: x4-(0) = 0
10: x4-(15) = -15
11: x5-(0) = 15
12: x5-(15) = 1.776356839E-15

§2 非线性规划模型

实例1 表面积为36平方米的最大长方体体积。
建立数学模型:
设x、y、z分别为长方体的三个棱长,f为长方体体积。
max f = x y (36-2 x y)/2 (x+y)
1stOpt代码:
*******************************************
ParameterDomain = ;
MaxFunction x*y*(36-2*x*y)/(2*(x+y));
*******************************************
结果:
标函数值(最大): 14.6969384566991
x: 2.44948974424079
y: 2.44948974012243

例2.求 minf=4(x2-x1)2+(x2-4)2
1stOpt代码:
******************
MinFunction 4*(x2-x1)^2+(x2-4)^2;
******************
结果:
目标函数值(最小): 0
x2: 4
x1: 4

例3.求解:min 100(x2-x12 )2+(1-x1)2
s.t x1≤2; x2≤2
1stOpt代码:
******************
ParameterDomain = [,2];
MinFunction 100*(x2-x1^2)^2+(1-x1)^2;
*****************
结果:
目标函数值(最小): 0
x2: 1
x1: 1

例3 求解:minf=ex1(6x12+3x22+2x1x2+4x2+1)
s.t x1x2-x1-x2+1≤0 -2x1x2-5≤0

1stOpt代码:
******************
MinFunction Exp(x1)*(6*x1^2+3*X2^2+2*x1*x2+4*x2+1);
x1*x2-x1-x2+1<=0;
-2*x1*x2-5<=0;
*****************
结果:
目标函数值(最小): 3.3244424442679
x1: -2.5
x2: 1
约束函数
1: x1*x2-x1-x2+1-0 = 0
2: -2*x1*x2-5-0 = 0

§3 二次规划模型

例1:求解:二次规划问题 min f(x)= x1-3x2+3x12+4x22-2x1x2 s.t 2x1+x2≤2 -x1+4x2≤3
1stOpt代码:
******************
MinFunction x1-3*x2+3*x1^2+4*x2^2-2*x1*x2;
2*x1+x2<=2;
-x1+4*x2<=3;
******************
结果:
目标函数值(最小): -0.568181818181819
x1: -0.045454545541655
x2: 0.36363636285668
约束函数
1: 2*x1+x2-2 = -1.727272728
2: -x1+4*x2-3 = -1.500000003

例2:求解:二次规划问题
min +x12+2x22-2x1x2-4x1-12x2 s.t x1+x2≤2 -x1+2x2≤2

2x1+x2≤3 0≤x1, 0≤x2

1stOpt代码:
******************
ParameterDomain = ;
MinFunction x1^2+2*x2^2-2*x1*x2-4*x1-12*x2;
x1+x2<=2;
-x1+2*x2<=2;
2*x1+x2<=3;
************************
结果:
目标函数值(最小): -16.4444444444444
x1: 0.666666666666667
x2: 1.33333333333333
约束函数
1: x1+x2-2 = 0
2: -x1+2*x2-2 = -4.440892099E-16
3: 2*x1+x2-3 = -0.3333333333

dingd 发表于 2006-6-20 16:16

§4 多目标规划模型
例1:某钢铁厂准备用5000万用于A、B两个项目的技术改造投资。设x1、x2分别表示分配给项目A、B的投资。据专家预估计,投资项目A、B的年收益分别为70%和66%。同时,投资后总的风险损失将随着总投资和单项投资的增加而增加,已知总的风险损失为0.02x12+0.01x22+0.04(x1+x2)2,问应如何分配资金才能使期望的收益最大,同时使风险损失为最小。
建立数学模型

max f1(x)=70x1+66x2
min f2(x)= 0.02x12+0.01x22+0.04(x1+x2)2
s.t x1+x2≤5000
0≤x1, 0≤x2

1stOpt代码:
******************
ConstStr f1 = -(70*x1+66*x2);
ConstStr f2 = 0.02*x1^2+0.01*x2^2+0.04*(x1+x2)^2;
ParameterDomain = ;
MinFunction 0.5*f1+0.5*f2;
x1+x2<=5000;
********************
结果:
目标函数值(最小): -12210.7142857143
x1: 307.142857099616
x2: 414.285712674787

约束函数
1: x1+x2-5000 = -4278.57143

例2:某化工厂拟生产两种新产品A和B,其生产设备费用分别为2万元/吨和5万元/吨。这两种产品均将造成环境污染,设由公害所造成的损失可折算为A为4万元/吨,B为1万元/吨。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公害损失的目标为12万元。

建立数学模型:
设工厂每月生产产品A为x1吨,B为x2吨,设备投资费为f(x1),公害损失费为f(x2),则问题表达为多目标优化问题:
min f1(x)=2x1+5x2
min f2(x)=4x1+x2
s.t x1≤5
x2≤6
x1+x2≥7
x1 ,x2≥0

1stOpt代码:
******************
ConstStr f1 = 2*x1+5*x2;
ConstStr f2 = 4*x1+x2;
Parameter x1, x2;
MinFunction y;
f1 - 20*y <= 20;
f2 - 12*y <= 12;
x1+x2>=7;
*****************
结果:
目标函数值(最小): 0.3125
x1: 2.91666666666667
x2: 4.08333333333333
y: 0.3125

约束函数
1: 2*x1+5*x2-20*y-20 = -3.552713679E-15
2: 4*x1+x2-12*y-12 = 0
3: x1+x2-7 = 0

例3:某工厂生产两种产品甲和乙,已知生产甲产品100公斤需6个工时,生产乙产品100公斤需8个工时。假定每日可用的工时数为48工时。这两种产品每100公斤均可获利500元。乙产品较受欢迎,且若有个老顾客要求每日供应他乙种产品500公斤,问应如何安排生产计划?

建立数学模型:
设生产甲、乙两种产品的数量分别为x和x(以公斤计),要使生产计划比较合理,应考虑用工时尽量少,获利尽量大,

其用多目标规划描述这:

min f1=6x1+8x2

max f2=100(x1+x2)

max f3=x2

s.t 6x1+8x2≤48

x2≥5

x1 ,x2≥0

1stOpt代码:
******************
ConstStr f(1:3) = ;
Constant goal(1:3) = ;
Constant weight(1:3) = ;
Parameter x1=, x2=;
MinFunction y;
For(i=1:3)(f - weight*y >= goal);
6*x1+8*x2≤48;
**********************
结果:
目标函数值(最小): -8.88612100569119E-17
x1: 1.33333333333333
x2: 5
y: -8.88612100569119E-17

约束函数
1: 6*x1+8*x2-48*y-48 = 7.105427358E-15
2: -100*(x1+x2)-(-1000)*y-(-1000) = 366.6666667
3: -x2-(-5)*y-(-5) = 0
4: 6*x1+8*x2-48 = 0

§5 最大最小化模型

例1 求解下列最大最小值问题:

f(1)=3*x(1)^2+2*x(2)^2-12*x(1)+35;

f(2)=5*x(1)*x(2)-4*x(2)+7;

f(3)=x(1)^2+6*x(2);

f(4)=4*x(1)^2+9*x(2)^2-12*x(1)*x(2)+20;

1stOpt代码:
******************
ConstStr f1=3*x1^2+2*x2^2-12*x1+35;
ConstStr f2=5*x1*x2-4*x2+7;
ConstStr f3=x1^2+6*x2;
ConstStr f4=4*x1^2+9*x2^2-12*x1*x2+20;
MinMax (f1,f2,f3,f4);
*******************
结果:
极大极小值(MinMax): 23.7330562340718
x1: 1.76366991702807
x2: 0.531742658491502

极大极小函数:
1: (3*x1^2+2*x2^2-12*x1+35) = 23.73305623
2: (5*x1*x2-4*x2+7) = 9.562122018
3: (x1^2+6*x2) = 6.300987527
4: (4*x1^2+9*x2^2-12*x1*x2+20) = 23.73305623

例2:选址问题

设某城市有某种物品的10个需求点,第i个需求点Pi的坐标为(ai,bi),道路网与坐标轴平行,彼此正交。现打算建一个该物品的供应中心,且由于受到城市某些条件的限制,该供应中心只能设在x界于,y界于的范围之内。问该中心应建在何处为好?

P点的坐标为:

建立数学模型:

1stOpt代码:
******************
Constant a(1:10) = ;
Constant b(1:10) = ;
ConstStr For(i=1:10)(f = abs(x1-a)+abs(x2-b));
ParameterDomain = ;
MinMax (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10);
*********************
结果:
极大极小值(MinMax): 14
x1: 8
x2: 8

极大极小函数:
1: (abs(x1-1)+abs(x2-2)) = 13
2: (abs(x1-4)+abs(x2-10)) = 6
3: (abs(x1-3)+abs(x2-8)) = 5
4: (abs(x1-5)+abs(x2-18)) = 13
5: (abs(x1-9)+abs(x2-1)) = 8
6: (abs(x1-12)+abs(x2-4)) = 8
7: (abs(x1-6)+abs(x2-5)) = 5
8: (abs(x1-20)+abs(x2-10)) = 14
9: (abs(x1-17)+abs(x2-8)) = 9
10: (abs(x1-8)+abs(x2-9)) = 1

suffer 发表于 2006-6-20 20:42

有点广告的性质

dingd 发表于 2006-6-20 21:40

值得广而告之的东西!建议suffer自己一试,就会改变看法的!

zcf1976 发表于 2006-11-5 23:27

原帖由 dingd 于 2006-6-20 16:16 发表
§4 多目标规划模型例1:某钢铁厂准备用5000万用于A、B两个项目的技术改造投资。设x ...
请问该软件对下列问题如何?求出其所有根http://forum.vibunion.com/thread-30500-1-1.html

woodballhead 发表于 2007-2-7 14:57

不明白dingd兄你怎么把1stopt与matlab对比的,连相应的matlab的程序和结果都没有?

dingd 发表于 2007-2-7 21:52

woodballhead有点粗心啊:lol #1帖子就给出了Matlab优化相应例子的链接,如下:

"在Matlab区有一优化应用的帖子(http://forum.vibunion.com/thread-732-1-1.html),...."

dingd 发表于 2007-2-7 22:01

Matlab的原贴在:
http://forum.vibunion.com/thread-732-1-1.html

woodballhead 发表于 2007-2-11 15:58

确实是我粗心了,没有看见那个链接。可是我始终没能打开,但是幸亏你又给了个另外的链接,让我找到matlab的原帖。
有个问题,在那个最大最小化模型里,用到了函数“MinMax”,但是我在1stopt1.5的版本下却无法运行该程序,帮助文档里也没能找到函数“MinMax”?

dingd 发表于 2007-2-11 17:14

到七维高科的网站上看一下吧, MinMax是2.0才加的新功能:@) ,1.5的版本自然无法运行.

woodballhead 发表于 2007-2-12 16:25

觉得你选的这些问题不够典型,固然1stopt在输入上有方便的优势,可是最主要我们是看软件的功能。就这些问题来看,没有显示1stopt在功能上比matlab的强劲之处。1stopt有比较强的全局搜索能力,matlab的函数fminunc容易陷入局部极小,但是matlab的遗传算法工具箱gatool也有较强的的全局搜索能力。还有lingo,bujin在使用上也很方便,我

woodballhead 发表于 2007-2-12 16:31

还有lingo也有很强的全局搜索能力,使用上也很方便,我始终没有找到一个问题,来说明1stopt能比lingo有更好的解答。反而由于1stopt由于有算法和参数的选择,不一定每次都能顺利找到全局最优。对比lingo,lingo显得更智能,不用人为选择算法和计算的参数就能给出比较好的结果,这一点是1stopt比不上的。

woodballhead 发表于 2007-2-12 16:33

说得准确点,lingo显得更“傻瓜”,不是更智能。

dingd 发表于 2007-2-13 23:48

每个软件都有自己的优缺点. Lingo是老牌的优化软件,知名度自然是远胜于1stOpt,虽如此, Lingo却也有诸多方面赶不上1stOpt:
1: 输入方便程度, 1stOpt比Lingo更直观,易懂
2: 非线性拟合,说穿了,也是一优化问题(最小二乘), 1stOpt更胜一筹.
3: 全局优化能力,1stOpt更强一些,看下面简单的例子:

Max (x1^2-10*x1)+(x2^2-10*x2)...+(x20^2-10*x20)
变量的取值范围均在(2,20)之间

此题很简单,最优值直接能看出来: 20个变量均为20时,得最大值4000

用Lingo算算,最大值为-304,变量值为(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2),即使用选项"Use Global Solver",结果没任何改进,计算时间,超过5分钟也没停止得意思.

用1stOpt,选用差分进化或爬山,很容易得最大值4000
4: Lingo有自己的模型语言,但在描述复杂工程问题时,却是力不从心,既不直观,也不方便使用;而1stOpt可直接用Basic或Pascal语言直接来描述问题,易懂,直观,计算速度也快
5: 1stOpt的每一个代码本可混合写多个问题, Lingo则只能一个问题一个代码本,一句话的问题,也占一个文件,有时很不方便
6: 优化计算完毕后,在验证,预测及图形显示等方面,Lingo也不如1stOpt来的快捷方便.

woodballhead 发表于 2007-2-15 17:59

dingd兄你说得很有道理,我补充几句:
1、1stopt的语言与我们习惯的编程语言更一致,不像lingo的编程需要好好训练一下才行。但是就两者的语言都简捷。
2、你说的5、6都很正确,4还要我慢慢体会
页: [1] 2 3 4
查看完整版本: [原创]1stOpt优化应用 - 与Matlab对比!