簡體   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