是否可以使用命名范围为Excel中的规划求解设置大量约束?

问题描述

因此,我有50个变量,它们具有最小值和最大值。

我想将这些设置为约束。

50个变量位于A1到A50单元格中

最大约束在B1到B50中,最小值在C1到C50中。

我可以命名A1:A50 A,B1:B50 B和C1:C50 C,然后按如下所示设置约束:

SolverAdd cellRef:="A",relation:=1,formulaText:="B"

SolverAdd cellRef:="A",relation:=3,formulaText:="C"

而不是100行:

SolverAdd cellRef:=range("A1)",formulaText:=Range("B1")
SolverAdd cellRef:=Range("A1"),formulaText:=Range("C1")
...
SolverAdd cellRef:=range("A25)",formulaText:=Range("B25")
SolverAdd cellRef:=Range("A25"),formulaText:=Range("C25")

...

以此类推?

解决方法

您可以使用命名范围,实际上,这是提高可读性的一个好主意。 "A","B","C"本身不是有效的名称,但是类似"A_"的东西(尽管在模型中有意义的东西,例如"Purchase"可能更好)。要使用命名范围,请使用以下语法(与您建议的语法类似):

SolverAdd CellRef:=Range("A_"),Relation:=1,FormulaText:="B_"
SolverAdd CellRef:=Range("A_"),Relation:=3,FormulaText:="C_"

应该可以正常工作。

这是一个完整的示例:A_A1:A50B_的{​​{1}}和B1:B50的{​​{1}}的名称。我使用C_作为目标函数,它只是C1:C50的总和。我将A51初始化为全部A_,将A_初始化为全部0,将B_初始化为全部10。然后我运行以下代码:

C_

运行代码后,1包含了所有Sub Test() SolverOk SetCell:="$A$51",MaxMinVal:=1,ByChange:="A_",Engine:=2 SolverAdd CellRef:=Range("A_"),FormulaText:="B_" SolverAdd CellRef:=Range("A_"),FormulaText:="C_" SolverSolve True End Sub ,符合预期。