声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 其它文章 查看内容

1stOpt优化应用 - 与Matlab对比!

2015-10-29 01:52| 发布者: aspen| 查看: 4953| 评论: 48|原作者: dingd|来自: 声振论坛

摘要: 1stOpt优化应用 - 与Matlab对比! 在Matlab区有一优化应用的帖子(http://forum.vibunion.com/thread-732-1-1.html),在这,试着用1stOpt求解相同的例子,可以发现,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 = [0,];
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个工程项目的投资,其投资各项目时所得的净收益(投入资金锪百分比)如下表:
工程项目收益表
工程项目
A
B
C
D
收益(%)
15
10
8
12

由于某种原因,决定用于项目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 = [0,];
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-8x5
s.t –2x1+x2-x3+x4-3x5≤6 2x1+x2-x3+4x4+x5≤7 0≤xj≤15 j=1,2,3,4,5

1stOpt代码:
*******************************************
ParameterDomain = [0,15];
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

12345下一页
发表评论

最新评论

引用 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 = [0,];
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[0,5], x2[0,6];
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) = [6*x1+8*x2, -100*(x1+x2), -x2];
Constant goal(1:3) = [48,-1000,-5];
Constant weight(1:3) = [48,-1000,-5];
Parameter x1=[0,], x2=[5,];
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界于[5,8],y界于[5.8]的范围之内。问该中心应建在何处为好?

P点的坐标为:
捕获.JPG
建立数学模型:

1stOpt代码:
******************
Constant a(1:10) = [1,4,3,5,9,12,6,20,17,8];
Constant b(1:10) = [2,10,8,18,1,4,5,10,8,9];
ConstStr For(i=1:10)(f = abs(x1-a)+abs(x2-b));
ParameterDomain = [5,8];
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还要我慢慢体会
引用 woodballhead 2007-2-16 00:50
3、就你举的那个无约束最优问题来说,在1stopt下我用DE和SOMA两种方法都顺利求得全局最优。用SM一般用了20秒才得到3990这样一个差强人意的结果。在lingo8注册版编程如下:
model:
sets:
www/1..20/:x;
endsets
max=@sum(www(I):x^2-10*x);
@for(www(I):@bnd(2,x,20));
end
可以看出,LINGO下编程还是很方便,一般不到一秒就能顺利找到全局最优解,与dingd兄的结果相同,而并非陷入了局部极小。
引用 woodballhead 2007-2-16 00:53
在lingo10下运行该程序,却由于演示版的对变量个数的限制,陷入了dingd所叙述的局部极值点。
引用 dingd 2007-2-16 09:12
1stOpt代码更简单:

ParameterDomain = [2,20];
MaxFunction Sum(i=1:20)(x^2-10*x);
引用 woodballhead 2007-2-22 20:21
确实很简捷,但是你这个例子只是变量个数多,但是这个局部最优也就是全局最优,是个很简单的问题。
引用 woodballhead 2007-2-23 21:52
我提个问题,看用1stopt是否能够顺利编程计算?:8皇后问题。
这个题意很简单,就是把8个皇后摆在8乘8的棋盘格子上,使得彼此不相互吃掉。国际象棋规则是皇后能前后左右斜线都吃。
lingo可以解决5皇后的问题,但是无法解决更高数目的问题。不知1stopt能否解决?

查看全部评论(48)

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-24 19:19 , Processed in 0.094996 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.