Excel解算器:有没有办法迭代2个变化的变量?

时间:2014-08-24 12:23:20

标签: excel solver

解决方法存在以下问题(简化版): 所以我有一个嵌套的If语句描述了2个变化变量(x,y)的条件。例如: 在一个单元中:IF(AND((x <= 2),(x> = 0.5),(y <= 10),(y> = 5)),1,0
其下方的单元格:IF(AND((x <= 2.5),(x> = 1.9),(y <= 11),(y> = 9)),1,0
目标函数是这两个变量之和 解决者或目标寻求(除非我给它一个awnser)似乎不会得到除0,0之外的一个芒果。   我的实际问题是我有6个这样的IF单元,我试图找到一个(x,y)最大化我的目标函数。我希望excel能够通过尽可能多的组合。

有任何想法或其他方法吗?谢谢。

1 个答案:

答案 0 :(得分:3)

Solver 在此玩具问题中找不到最佳解决方案的原因是因为使用IFAND语句会使问题不凸。对于非凸问题,GRG Nonlinear求解方法(求解器使用的默认方法)不能保证最优解,因为它可以被困在本地最佳解决方案中,而这些解决方案并非最优。

话虽如此,有一种方法可以将您的问题表示为一个混合整数程序,虽然它仍然是非凸的,但可以使用&#34; Simplex LP&#34;求解器的方法,并保证最大值。

模型设置

以下是电子表格设置的屏幕截图:

enter image description here

为方便起见,我使用了多个数量的命名范围。 特别是:

 - B2 --> x_var
 - C2 --> x_UB1
 - D2 --> x_LB1
 - E2 --> x_UB2
 - F2 --> x_LB2

,对于第3行,我使用相同的约定,但我们x_代替y_

红色单元格(B4E4)具有您描述的条件,蓝色单元格(B5)的总和。

例如,B4的条件为

 =IF(AND(x_var<=x_UB1,x_var>=x_LB1,y_var<=y_UB1,y_var>=y_LB1),1,0)

我们将用两个二进制变量替换这些表达式,如果满足每个表达式则等于一,否则为零。

逻辑是我们可以强加约束而不是IF表达式:

LB_x * z <= x <= UB_x * z
LB_y * z <= y <= UB_y * z
z is binary

然后z = 1 ==> LB_x <= x <= UB_x LB_y <= y <= UB_y

因为我们最大化了两个z变量的总和,xy会尝试拟合相应的范围,以便尽可能多地z等于1。

enter image description here

绿色单元格H2, J2有两个新的二进制变量,分别称为cond1_true, cond2_true。其他单元格具有上述约束条件:

例如,对于第一个表达式:

J2: =x_var-cond1_true*x_UB1
J3: =y_var-cond1_true*y_UB1
K2: =x_LB1*cond1_true-x_var
K3: =y_LB1*cond1_true-y_var

所有这些单元格在求解器模型中都需要<= 0

解算器型号:

enter image description here

在该模式中,目标函数单元格是二元变量的总和。决策变量为x_var, y_yar, cond1_true, cond2_true。约束都是expression <= 0格式。以下是工作表:https://www.dropbox.com/s/uek2k9gownhh3ni/excel-solver-is-there-a-way-to-iterate-over-2-changing-variables.xlsx?dl=0

使用这个公式,求解器经历了许多变量组合,并试图找到最好的变量。它通常可以保证最佳解决方案(对于小问题几乎总是如此)

<强>更新

如果间隔不重叠,我们需要身体     LB_x * z&lt; = x&lt; = UB_x * z 至     min(LB_x)*(1-z)+ LB_x * z&lt; = x&lt; = UB_x * z + max(UB_x)*(1-z)

其中min(LB_x)是所有区间的最小下限(同样对于UB和y)。这样,如果x不落入区间(z = 0),则仅强制其落入某个其他区间。

我希望这有帮助!