关于37楼, 38楼的疑惑 : "Excel 在问题有少许改变的时候,需要重新设置条件,很麻烦"
我个人的解决方法是这样的:
Excel 的规划求解模块,可以保存和装入一个解题方案, 保存位置是在一些你指定的普通的单元格上,所以用 VBA 直接改变这些单元格的内容,就可以改变规划求解的方案了
这等于是把 规划求解作为一个被调用的子模块,而自己的VBA语句作为预处理界面
有时候还可以借助宏和Excel本身就有的大量函数来随机应变
关于 求出一个问题的所有可行解 的问题
我的答案是:
1 实际应用上,你不需要求出所有可行解,比方说,在楼顶的装水问题中,水缸容积=125,所以所有能够装出125的方案,都是毫无区别的,找到一个就够了,如果认为某些125方案比其他的好,那么其实就是加入了一个新的条件了,你必须把 判断哪些125方案更好 的判断方法,写进新的规划求解约束条件里面
比方说,我们还希望尽可能少打开瓶子(或者说,优先打开大瓶子),这样就必须做 一个跟打开瓶子的数量有关的函数,比方说 =countif(状态 = 打开 的瓶子), 然后在约束条件加入 这个函数的单元格 <= 8 (希望可以找到只用8个瓶子就能完成 125完美装水)
2 比较大型的问题,如 100000个瓶子装入 1000 个容积各不相同的缸,这时候,瓶子-水缸 的组合方案是一个天文数字,用上全世界所有的计算机,都不可能在可接受的时间内把每一个解都找出来
这类大型问题的方法,目前还是世界性难题,谁能完全解决估计就能拿菲尔兹奖了. ^_^
幸好,实际生活也没有这么巨大的问题,或者可以把巨大的问题分割为许多小规模问题,逐一处理.
3 最后,如果一定要找出几个不同的 125解决方案 玩儿
可以试试增加约束条件 (比方说,一定不用某个已有方案选择了的瓶子,或者相反,一定选择某个没有被选择过的瓶子)
不过这类问题最让人头疼的是,对于大型问题:
1 不一定有解,而且在真正求解之前,无法确定这一点
2 有解也不一定能找到,可能一个解都找不到(大型问题)
对于初学者解决简单问题,经常头疼的是,除非你知道一定有解,否则在计算机给出无解的答案时,很难判断究竟是真的无解,还是自己的方案有错误. kakaka...... |