找回密码
 注册
Simdroid-非首页
查看: 316|回复: 16

[1stOpt] 晒一晒你收藏的优化题!

[复制链接]
发表于 2010-2-4 16:08:02 | 显示全部楼层 |阅读模式 来自 北京海淀
一道好的优化题,不论是对对研究算法的还是选择评价优化计算软件的,都是非常有意义的,而鉴于优化问题的复杂性和多样性,一道或少量的优化题很难全面测试和判断一种算法或软件的优劣,因此希望大家晒晒自己收集或遇到的有点难度的优化题目,供有兴趣者剖析研究。下面先放一道求解方程组的题(方程组求解也可划归为优化问题):

52.0933-(x1+x2*(1-exp(-(x3*0^x4)))) = 0;
52.2203-(x1+x2*(1-exp(-(x3*9^x4)))) = 0;
53.0575-(x1+x2*(1-exp(-(x3*30^x4)))) = 0;
59.8562-(x1+x2*(1-exp(-(x3*60^x4)))) = 0;

用1stOpt比较容易;用Lingo 11,几个小时也没出结果。晒题的同时,大家也可试试其它数学软件。

评分

1

查看全部评分

发表于 2010-2-4 16:59:20 | 显示全部楼层 来自 山东淄博
Simdroid开发平台
Forcal代码:
  1. f(x1,x2,x3,x4)=     //函数定义
  2. {
  3.   [52.0933-(x1+x2*(1-exp(-(x3*0^x4))))]^2+
  4.   [52.2203-(x1+x2*(1-exp(-(x3*9^x4))))]^2+
  5.   [53.0575-(x1+x2*(1-exp(-(x3*30^x4))))]^2+
  6.   [59.8562-(x1+x2*(1-exp(-(x3*60^x4))))]^2
  7. };
  8. ff(x1,x2,x3,x4,y1,y2,y3,y4)=     //函数定义
  9. {
  10.   y1=[52.0933-(x1+x2*(1-exp(-(x3*0^x4))))],
  11.   y2=[52.2203-(x1+x2*(1-exp(-(x3*9^x4))))],
  12.   y3=[53.0575-(x1+x2*(1-exp(-(x3*30^x4))))],
  13.   y4=[59.8562-(x1+x2*(1-exp(-(x3*60^x4))))]
  14. };
  15. main(:f,x,x1,x2,x3,x4)=
  16. {
  17.   x1=-1, x2=-1, x3=-1, x4=1,  //初值
  18.   f=fcopt::GOpt[HFor("f"), fcopt::optmax,5000, fcopt::optmode,1 : &x1,&x2,&x3,&x4],  //优化
  19.   x=new[rtoi(real_s),rtoi(8)],
  20.   x.XSLSF::setra[0,x1,x2,x3,x4],
  21.   f=XSLSF::netn[HFor("ff"),1e-9,0.1,0.1,x,100],   //拟牛顿法解方程组
  22.   x.XSLSF::getra[0,&x1,&x2,&x3,&x4],
  23.   printff{"\r\nx1={1,r}, x2={2,r}, x3={3,r}, x4={4,r}, 实际迭代次数={5,r}\r\n",x1,x2,x3,x4,f},
  24.   delete[x]
  25. };
复制代码
结果:
x1=52.093299999999999, x2=-0.15359016641192016, x3=-6.8433187438062454e-002, x4=0.99007079208515736, 实际迭代次数=8.
回复 不支持

使用道具 举报

发表于 2010-2-4 17:07:51 | 显示全部楼层 来自 山东淄博
一个含积分的等式优化题,原先放在H21、H01,一直没有解决。
这个题很有意思,但一直没有最终理想的答案,大家剖析研究一下?
问题来源:http://www.ilovematlab.cn/thread-59190-1-1.html


都是定积分,x取值范围在[3,4]。

我用Forcal求解的几组结果:

A=1.2999999999997554, B1=3.7504687499998699, B2=-0.52500000000009195, 极大值=16384.
A=6.09999999993079e-002, B1=2.7411718749997949, B2=-15.515000000000168, 极大值=16384.
A=4.8639999999992796, B1=4.334734374999794, B2=4.3389999999998823, 极大值=32768.
A=12.084374999999998, B1=4.9999799999999999, B2=5., 极大值=32768.
A=-3.3100000000000591, B1=-6.1008203124999332, B2=3., 极大值=12288.
A=-32.779753114593952, B1=-42.006911870916035, B2=-6.7890223783171892, 极大值=6.8041037484193084e+022

发现:
1、获得的极大值原先以为是2^n,如1024、4096等。但发现12288也是一个极大值。有意思的是这些极大值都是整数,我目前求解的最大极大值是6.8041037484193084e+022。
2、以极大值32768为例,有多组解,如上面就是两组。
3、不知有没有最大值。若没有最大值,在哪个点是无穷大?若能得到解析解分析一下更好。
各位高手参与讨论一下?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-2-4 17:23:40 | 显示全部楼层 来自 山东淄博
刚看到的一个小题,求p、q。
这个方程组在求解时,可将q消去转换为一元方程求解。但建议不这样做,而是解二元非线性方程组。

也解一下这个:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-2-4 17:50:18 | 显示全部楼层 来自 宁夏银川
第一组方程的解
p=0.032,q=205.549
第二组方程的解
p=3.202,q=1.075
采用mathcad求解的结果
回复 不支持

使用道具 举报

发表于 2010-2-4 17:59:25 | 显示全部楼层 来自 宁夏银川
补充一下:
第一组方程还有一组解答
p=-0.032,q=205.549
回复 不支持

使用道具 举报

发表于 2010-2-4 18:56:11 | 显示全部楼层 来自 山东淄博
本帖最后由 wanglu 于 2010-2-4 18:57 编辑

楼上正解。wanglei5201118 好强啊。maple、mmtc、matlab、mathcad、1stOpt等等都会啊。
这些软件都可方便地求得正解吗?
是不是不需要初值?若需要初值,初值为多少?
回复 不支持

使用道具 举报

发表于 2010-2-4 20:09:48 | 显示全部楼层 来自 宁夏银川
其实我只是都会一点啊,平时主要用Mathcad多点!主要还是在这里向大家学习的!
回复 不支持

使用道具 举报

 楼主| 发表于 2010-2-5 15:13:05 | 显示全部楼层 来自 北京海淀
再来一道如下图,参数范围限制在【-10,10】,求最小值。

Sum(i=1:4)((abs(sin(x[i])*sin(x[i+1])*exp(abs(100 - sqrt(x[i]^2 + x[i+1]^2)/pi))-x[i]^i) + 1-(i+1)^x[i]));

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-2-5 16:30:16 | 显示全部楼层 来自 山东淄博
用Forcal算了一组解。代码:
  1. !using["fcopt"];
  2. f(x1,x2,x3,x4,x5:pi)=     //目标函数定义
  3. {
  4.   pi=3.141592653589793,
  5.   ((abs(sin(x1)*sin(x2)*exp(abs(100 - sqrt(x1^2 + x2^2)/pi))-x1^1) + 1-(1+1)^x1))+
  6.   ((abs(sin(x2)*sin(x3)*exp(abs(100 - sqrt(x2^2 + x3^2)/pi))-x2^2) + 1-(2+1)^x2))+
  7.   ((abs(sin(x3)*sin(x4)*exp(abs(100 - sqrt(x3^2 + x4^2)/pi))-x3^3) + 1-(3+1)^x3))+
  8.   ((abs(sin(x4)*sin(x5)*exp(abs(100 - sqrt(x4^2 + x5^2)/pi))-x4^4) + 1-(4+1)^x4))
  9. };
  10. s(x1,x2,x3,x4,x5)=1;      //约束条件定义
  11. main(:f,k,x1,x2,x3,x4,x5)=
  12. {
  13.   k=100, x1=0, x2=0, x3=0, x4=0, x5=0, //初值
  14.   f=RGOpt[HFor("f"),HFor("s"),optmax,100, optbuf,&k, optmode,1, optstep,1 : &x1,-10,10, &x2,-10,10, &x3,-10,10, &x4,-10,10, &x5,-10,10],
  15.   printff{"\r\nx1={1,r}, x2={2,r}, x3={3,r}, x4={4,r}, x5={5,r}, k={6,i}, f={7,r}\r\n",x1,x2,x3,x4,x5,k,f}
  16. };
复制代码
结果:
x1=0., x2=9.9999999999999538, x3=0., x4=9.9999999999999538, x5=0., k=0, f=-9814571.9999992698

不知道是不是最小值,等待其他软件更好的结果。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-2-5 17:04:45 | 显示全部楼层 来自 北京海淀
复制你的代码,用Forcal计算,输出结果:
x1=0., x2=0., x3=0., x4=0., x5=0., k=0, f=-9814571.9999992698
x都输出为0?哪儿弄错了?

下面的结果更好些,只是不容易得到(用1stOpt):
x1=0, x2=10, x3=0, x4=10, x5=-1.64858771177691E-38
目标函数:-9824566.791

也许还有更好的。
回复 不支持

使用道具 举报

发表于 2010-2-5 17:24:48 | 显示全部楼层 来自 山东淄博
本帖最后由 wanglu 于 2010-2-5 17:46 编辑

1stOpt的结果通常总是最优的,一般软件很难超越啊。

下载最新的OpenFC:http://www.forcal.net/xiazai/forcal9/openfc32w.rar
说明“FORCAL参数优化动态库FcOpt V1.0”中有:
免费注册说明:为了演示设计商业性Forcal扩展动态库的可行性,FcOpt设计成须注册后使用其全部功能。如果没有注册,当优化参数多于2个时,GOpt、RGOpt、OneOpt和ROneOpt函数仅返回最小值,不能返回优化参数。注册是免费的,用函数fcopt::OptPassword获取机器码后,在以下网址回帖或者通过E-mail获取注册码。... ...
    函数OptPassword的用法1:i: fcopt::OptPassword();
    函数OptPassword的用法2:i: (:pw)=fcopt::OptPassword(&pw),pw;
    函数OptPassword的用法3:i: (:pw)=fcopt::OptPassword(0,&pw),pw;
获取机器码后贴在这儿,我算一个注册码就可以了。呵呵,比较麻烦。1stOpt也可以用这种注册方法的。

另外,这个网址有微分方程参数优化(拟合)的例子:http://www.forcal.net/yyhz/wffcnh.htm
1stOpt有世界上最好的优化算法,但是所用脚本却不是最优的,其速度及功能似乎限制了1stOpt的能力的发挥,如果加入Forcal脚本的支持,或者将其优化算法设计成Forcal扩展库的形式,解决这些微分方程参数优化或含复杂积分的优化等等就轻而易举了。一点感想,呵呵。
回复 不支持

使用道具 举报

发表于 2010-2-5 20:48:19 | 显示全部楼层 来自 山东淄博
给出我3#的代码:

  1. !using["fcopt"];
  2. f(x,A,B1,B2)=exp(-A)*(x-3)^(-B1)*(5-x)^(-B2);
  3. ln43(x::A,B1,B2)=ln(x-3)*f(x,A,B1,B2);
  4. ln54(x::A,B1,B2)=ln(5-x)*f(x,A,B1,B2);
  5. logf(x:t:A,B1,B2)= t=f(x,A,B1,B2), t*lg(t);
  6. pp(_A,_B1,_B2::A,B1,B2,hln43,hln54,hlogf)=    //函数定义
  7. {
  8.   A=_A, B1=_B1, B2=_B2,
  9.   XSLSF::fpqg(hlogf,3.00001,4.99999,1e-6)+1e10*XSLSF::fpqg(hln43,3.00001,4.99999,1e-6)^2+1e10*XSLSF::fpqg(hln54,3.00001,4.99999,1e-6)^2
  10. };
  11. main(:f,k:A,B1,B2,hln43,hln54,hlogf)=
  12. {
  13.   hln43=HFor("ln43"), hln54=HFor("ln54"), hlogf=HFor("logf"),
  14.   k=10,A=1,B1=1,B2=1,  //初值
  15.   f=OneOpt[HFor("pp"),optmax,30000, optbuf,&k, optmode,0 : &A, &B1, &B2],
  16.   printff{"\r\n实际缓冲区数目={1,i}, A={2,r}, B1={3,r}, B2={4,r}, 最小值={5,r}\r\nlogf={6,r}, ln43={7,r}, ln54={8,r}\r\n",
  17.      k,A, B1, B2, f,XSLSF::fpqg(hlogf,3.00001,4.99999,1e-6),XSLSF::fpqg(hln43,3.00001,4.99999,1e-6),XSLSF::fpqg(hln54,3.00001,4.99999,1e-6)}
  18. };
复制代码

结果:
实际缓冲区数目=10, A=-34.000928505106778, B1=-60.623026926648095, B2=-8.5673166202414137, 最小值=-2.8164624844141992e+024
logf=-2.8164624844141992e+024, ln43=0., ln54=0.

还可能有更小的值(对应着更大的值)。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-2 08:59:48 | 显示全部楼层 来自 北京海淀
这道题也有点难度,大家可试试,看最优解为多少?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-3-7 17:37:05 | 显示全部楼层 来自 宁夏银川
优化算法: 改进差分进化算法
函数表达式: ((sin(x1*sin(1*x10)))+(sin(x2*sin(2*x9)))+(sin(x3*sin(3*x8)))+(sin(x4*sin(4*x7)))+(sin(x5*sin(5*x6)))
          +(sin(x6*sin(6*x5)))+(sin(x7*sin(7*x4)))+(sin(x8*sin(8*x3)))+(sin(x9*sin(9*x2)))+(sin(x10*sin(10*x1))))
          -((cos(x1*cos(1*x10)))*(cos(x2*cos(2*x9)))*(cos(x3*cos(3*x8)))*(cos(x4*cos(4*x7)))*(cos(x5*cos(5*x6)))
          *(cos(x6*cos(6*x5)))*(cos(x7*cos(7*x4)))*(cos(x8*cos(8*x3)))*(cos(x9*cos(9*x2)))*(cos(x10*cos(10*x1)))
          )
目标函数值(最小): -8.53307055434471
x1: 3.12763477908447
x2: 1.17727985389269
x3: 2.81821020646021
x4: 6.40777034917846
x5: 1.32690295317146
x6: 4.63351427208908
x7: 5.92163640978488
x8: 3.26041564147811
x9: 8.1748025549733
x10: 9.84626782280422
回复 不支持

使用道具 举报

 楼主| 发表于 2010-3-8 12:03:06 | 显示全部楼层 来自 北京海淀
本帖最后由 shamohu 于 2010-3-8 12:04 编辑

用下面的1stOpt代码:

Algorithm = SM3[200];
ParameterDomain = [0,10];
MinFunction Sum(i=1:10)(sin(x*sin(i*x[11-i])))-Prod(i=1:10)(cos(x*cos(i*x[11-i])));

运行10次(耗时约6分钟)的结果:

目标函数
-10.9640280800419
-10.9549472762246
-10.9488016198148
-10.9338015946135
-10.9231398745608
-10.9088130804385
-10.9061541093097
-10.9016479179262

平均        -10.9236693506494
最大        -10.8944065973259
最小        -10.9640280800419


最优结果对应的变量值:
x1: 4.64804933161959
x10: 7.85398306437483
x2: 9.59909983472127
x9: 1.65314425340498
x3: 1.37568081593988
x8: 1.57079221447623
x4: 6.42362204512558
x7: 5.55919016899594
x5: 3.50140626994465
x6: 5.7473257775364



Lingo 11,运行了一次耗10分钟还在计算,终止,结果:
Objective value:    -10.31348
回复 不支持

使用道具 举报

发表于 2010-3-28 18:17:04 | 显示全部楼层 来自 山东淄博
Forcal代码,运行不到1分钟:

  1. !using["fcopt"];
  2. s(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)= 1;   //约束条件定义
  3. f(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)=      //目标函数定义
  4.     ((sin(x1*sin(1*x10)))+(sin(x2*sin(2*x9)))+(sin(x3*sin(3*x8)))+(sin(x4*sin(4*x7)))+(sin(x5*sin(5*x6)))
  5.     +(sin(x6*sin(6*x5)))+(sin(x7*sin(7*x4)))+(sin(x8*sin(8*x3)))+(sin(x9*sin(9*x2)))+(sin(x10*sin(10*x1))))
  6.     -((cos(x1*cos(1*x10)))*(cos(x2*cos(2*x9)))*(cos(x3*cos(3*x8)))*(cos(x4*cos(4*x7)))*(cos(x5*cos(5*x6)))
  7.     *(cos(x6*cos(6*x5)))*(cos(x7*cos(7*x4)))*(cos(x8*cos(8*x3)))*(cos(x9*cos(9*x2)))*(cos(x10*cos(10*x1))));
  8. main(:f,i,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)=
  9. {
  10.     i=100, x1=5, x2=5, x3=5, x4=5, x5=5, x6=5, x7=5, x8=5, x9=5, x10=5,
  11.     f=RGOpt[HFor("f"),HFor("s"),optmax,5000,optbuf,&i, optstep,1, optexpand,5, optcontract,0.9 : &x1,0,10, &x2,0,10, &x3,0,10, &x4,0,10, &x5,0,10, &x6,0,10, &x7,0,10, &x8,0,10, &x9,0,10, &x10,0,10],
  12.     printff{"\r\nx1={1,r}, x2={2,r}, x3={3,r}, x4={4,r}, x5={5,r}, x6={6,r}, x7={7,r}, x8={8,r}, x9={9,r}, x10={10,r}, i={11,i}, f={12,r}\r\n", x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,i,f}
  13. };
复制代码

结果:

x1=1.4137810431334705, x2=1.5054934596766314, x3=5.6940855339374608, x4=5.8692516725605177, x5=1.6478998838206411, x6=3.4566005286507764, x7=6.52873339633806, x8=4.5170292953837201, x9=5.5137207405814381, x10=4.7123651214629687, i=99, f=-10.926612385584429

比1stOpt尚有差距。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-19 04:30 , Processed in 0.050814 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表