wujianjack2 发表于 2014-1-4 22:19

一个小小的LINGO建模技巧

本帖最后由 wujianjack2 于 2014-11-25 18:53 编辑

  本帖将以一个看似简单,实则求解很难的优化测试题来讨论LINGO的求解能力(LINDO API),个人见识有限,敬请谅解!
  参考帖子:
  http://forum.simwe.com/thread-806242-1-1.html     (原问题提出者为shamohu版主,16楼为我的回复)

1.问题陈述:
   参考文献:
   1stOpt and Global Optimization Platform-Comparison and Case Study.caj
   
   
   文献给出参考结果:(取较优解)
   

2.LINGO程序代码:(以LINGO 14及【LINGO学习杂谈 二】中Patch的LINDO API版本为求解引擎)
   方案一:直接编写
  (1)源代码一:
MIN=(X1^X2+X2^X1-5*X1*X2*X3-85)^2+(X1^3*X2^X3*X3^X2-60)^2+(X1^X3+X3^X1-X2-0.55)^2;            @FREE(X1);@FREE(X2);@FREE(X3);
   
   运行结果截图:
   运行状态:
   

   运行结果:
   

(2)源代码二:
X1^X2+X2^X1-5*X1*X2*X3-85=0;X1^3*X2^X3*X3^X2-60=0;
X1^X3+X3^X1-X2-0.55=0;
@FREE(X1);@FREE(X2);@FREE(X3);

  运行结果截图:
  Global Solver Status:
  
   
  Local Nonlinear Solver Status:
  
  
   Local Nonlinear Solver运行结果:
   
  综上,可以看出,如果直接编写,LINGO对于此题的求解结果并不理想,但这并不意味着此题LINGO无法求解,只是,我们需要改变下策略。

   方案二:把复杂的约束简化(前提:把X1,X2,X3的定义域缩小为非负)
   对于方案一的代码,LINDO Systems公司的Mark Wiley先生给出了评价,并给出了合理的建议:
   

   如下代码基本沿用Mark Wiley先生给出的思路,稍作调整:
  X1^X2+X2^X1-5*X1*X2*X3-85=0;
3*@LOG(X1)+X3*@LOG(X2)+X2*@LOG(X3)-@LOG(60)=0;
  X1^X3+X3^X1-X2-0.55=0;

   使用Global Solver与否均可较快得到较好的结果:(以下结果为Global Solver求解结果)
   
   有兴趣的可尝试其它版本,包括各种Crack,由于LINDO API版本号的不同,求解效果也可能出现差异。


雪夜邀月 发表于 2014-1-5 09:08

不明觉厉。。500体力值?本人数学中国菜鸟一枚

wujianjack2 发表于 2014-1-5 10:29

雪夜邀月 发表于 2014-1-5 09:08 static/image/common/back.gif
不明觉厉。。500体力值?本人数学中国菜鸟一枚

  嗯,对,每天我会总共拿出上限为500体力的体力奖励来奖励大家的精彩回帖。
  祝新年快乐!

秋の名山で戦 发表于 2014-1-24 18:21

太感谢慷慨的楼主了  可以建个群 大家一起讨论?感觉楼主比较大牛

紫菱666 发表于 2014-1-24 21:02

这个问题用这种方法真是很好啊  !

wujianjack2 发表于 2014-2-4 16:03

秋の名山で戦 发表于 2014-1-24 18:21 static/image/common/back.gif
太感谢慷慨的楼主了  可以建个群 大家一起讨论?感觉楼主比较大牛

   不客气,承蒙抬举!在论坛交流也不错啊。

wujianjack2 发表于 2014-2-4 16:04

紫菱666 发表于 2014-1-24 21:02 static/image/common/back.gif
这个问题用这种方法真是很好啊  !

   同感,欢迎积极发言讨论!新年快乐!

晴璟123 发表于 2014-2-4 18:26

被你折服了,真的很有用,谢谢楼主分享

糖姑娘。 发表于 2014-2-4 20:56

{:3_50:}{:3_41:}{:3_42:}{:3_42:}

cpholzn 发表于 2014-2-4 23:20

这对于LINGO初学者来说很难把握啊
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 一个小小的LINGO建模技巧