繁体   English   中英

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

[英]Is is possible to set a large set of constraints for the Solver in Excel using named ranges?

所以,我有 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"

而不是 go 的 100 行:

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

...

等等?

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

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

这应该按预期工作。

这是一个完整的示例: A_A1:A50的名称, B_B1:B50的名称, C_C1:C50的名称。 我使用A51作为目标 function,它只是A_的总和。 我将A_初始化为全0 ,将B_初始化为全10 ,将C_初始化为全1 然后我运行以下代码:

Sub Test()
    SolverOk SetCell:="$A$51", MaxMinVal:=1, ByChange:="A_", Engine:=2
    SolverAdd CellRef:=Range("A_"), Relation:=1, FormulaText:="B_"
    SolverAdd CellRef:=Range("A_"), Relation:=3, FormulaText:="C_"
    SolverSolve True
End Sub

运行代码后, A_包含所有10 ,如预期的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM