我有一个17个方程的线性系统,506个变量解决了总变量的最小总和。到目前为止,这种方法很好,但解决方案是19个变量组合的结果。
但最后我想将所选变量的数量限制为10,而不事先知道哪些变量是最佳变量(解算器为我计算,以及它们的比例)。
我认为如果值大于0,我可以设置boolean = 1 :(意味着选择变量),如果没有为最佳解决方案选择变量,则设置为0。
然后将布尔的总和最多为10。
然而,这看起来有点复杂,我想知道openolver中是否有内置选项,因为我认为解决带有子集的大型集合是一个非常常见的问题。
所以有人建议:
根据下面提供的信息,我首先缩小了问题的大小:
我有三个数据列表,列中包含18个条目:
W7:W23,AC7:AD23
手动(使用:W28 = 6000, AC28=600,W29 = 1,AC29 =1
),线性组合,等于/超过目标列表:
EGM34:EG50
所以我做的是将descion变量放在W28:W29, AC28:AD29
中
我在求解器中添加约束W28,AC28:AD28 = integer
的位置(原始的excel解算器都像在opensolver中一样)
我在求解器中添加了约束W29,AC29:AD29 = Boolean
(原始的excel求解器和openolver一样)
然后我有一个整数的乘法* boolean = (W7:W23 etc)
为了限制所选变量的nr,除了所描述的约束之外,我还尝试用=sum(W29,AC29:AD29) to <= 10
限制单元格(有效地将布尔数量设置为低于11,或者我想到了,但解决者并没有将布尔值评为布尔值。
这些新的乘法列表放在W34:W50,AC34:AD50
中,求和位于:EGY34:EGY50
因此,最终检查将作为约束添加:
EGY34:EGY50 =>EGM34:EGM50
我有一个关于线性求解器如何评估这些约束的问题,是吗:
一个。想想EGY34:EGY50 must be larger or equal than/to EGM34:EGM50
或
湾是否认为:“对于每一行x EGYx must be larger or equal than/to EGMx
到目前为止,我已经注意到了b。但我想确定一下。
但我的主要问题是:
在使用Evolutionary算法之后,如下面的评论中所提出的那样,对于指定为布尔值的desicion变量,它如何/为什么尝试将值设为0.99994?
答案 0 :(得分:2)
二进制变量的引入确实是实现这种约束的标准方法。不幸的是,它将问题从线性规划问题转变为integer programming problem(特别是混合整数线性规划问题)。 branch and bound algorithm是解决此类问题的标准方法。这就是Excel的内置求解器似乎使用的,我不确定您正在使用的开放求解器。在最好的情况下(有很多边界)它会运行得相当快,即使你的尺寸有问题。在最坏的情况下,对于您的问题,它可能比通过运行单纯形算法C(506,10) = 2.8 x 10^20
次(对于每个可能的10个决策变量集合一次)获得的要好一些。换句话说,它可能是不可行的。已知整数编程是NP难的。
如果确切的解决方案不可行,您可以始终使用启发式算法,例如渐进式方法。