wujianjack2 发表于 2014-1-4 20:33

“K-Best Solution” in LINGO

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

  本帖以一个简单的实例讨论LINGO求解整数规划中存在多解问题时的求解策略,如knapsack。

声明: 自LINGO 11版本后,已可以直接求解了,此处仅作简单分享。
           本帖内容主要参考文献:Lingo 11 Users Manual

1.示例程序(来自LINGO 11安装文件Samples文件夹,KBEST.lg4)
MODEL:
SETS:
   ITEMS: INCLUDE, WEIGHT, RATING;
   MYFAVORITES( ITEMS);
ENDSETS
DATA:
   KNAPSACK_CAPACITY = 15;
   ITEMS   WEIGHT  RATING =
     BRATS       3      1
     BROWNIES    3      1
     BEER        3      1
     ANT_REPEL   7      1
     BLANKET     4      6
     FRISBEE     1      6
     SALAD       5     10
     WATERMELON  7      9;
   MYFAVORITES = BRATS BROWNIES BEER;
ENDDATA
MAX = @SUM( ITEMS: RATING * INCLUDE);
@SUM( ITEMS: WEIGHT * INCLUDE) <= KNAPSACK_CAPACITY;
@FOR( ITEMS: @BIN( INCLUDE));
NUMFAVE = @SUM( MYFAVORITES: INCLUDE);
END

2.问题求解:(求解使用LINGO 11 Extended_English Crack)
如果直接用LINGO求解,无论是使用默认设置,还是使用Global Solver,均得到如下结果:

以上结果为Global Solver求解结果。

然而,这种问题最优解往往不止一个,或者,我们还想知道一些次优解,如何简单地利用LINGO实现呢?
操作流程:(以LINGO 11为例)
LINGO->Options->Integer Solver->K-Best Solutions(修改Desired值)
截图如下:(本例修改Desired值为3)


运行结果:


完整结果:


自定义选择结果:(以第一个值为23的解为例)


     对于类似的问题,采用上述操作,则可以得到所需的多解,但Desired值也不宜过大,建议由小到大逐个试。程序也要保证有多个解,这样避免出现不可预知的错误。
     有意者详情见参考文献。


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

是否可以拜师学艺 真心觉得佩服

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

真是既简便,又快速啊,我们组是真没想到这样做啊

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

秋の名山で戦 发表于 2014-1-24 18:23 static/image/common/back.gif
是否可以拜师学艺 真心觉得佩服

   新年快乐!承蒙厚爱!享受在论坛的时光,加油!祝你好运!

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

紫菱666 发表于 2014-1-24 21:04 static/image/common/back.gif
真是既简便,又快速啊,我们组是真没想到这样做啊

   新年快乐!希望对你有帮助!

空木葬花 发表于 2014-3-4 22:08

非常感谢楼主的福利!

fanwenzhe52 发表于 2014-3-6 11:18

真是既简便,又快速啊,我们组是真没想到这样做啊123

csdl1314 发表于 2014-3-10 10:50

学习了啊哈哈

&me 发表于 2014-3-10 22:09

初学者   不大看得懂呢

飞翔的大白菜3 发表于 2014-4-2 08:12

不错。以后大家多多交流!!!
页: [1] 2 3 4
查看完整版本: “K-Best Solution” in LINGO