[英]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.