簡體   English   中英

使用求解器編寫值

[英]using solver an writing values

我對VBA的經驗不是很豐富,但是我對此有基本的了解。 我正在嘗試創建一個優化模型,其中規划求解會為一組約束生成最小值:

-單元格O40需要最小化,並且在單元格Kx中記錄和打印的值-單元格O41是我的動態約束,其中對於求解器的每次迭代,都需要將其設置為等於單元格Jx中的值。 -單元格J40:J45是要更改的權重,並且受約束J46 = 1(其中J46 = SUM(J40:J45)使得權重之和為1)

我運行了Solver一次並記錄了一個宏,並得到以下輸出:

子求解()

SolverAdd CellRef:="$J$46", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$O$41", Relation:=2, FormulaText:="$J17"
SolverOk SetCell:="$O$40", MaxMinVal:=2, ValueOf:=0, ByChange:="$J$40:$J$45", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve

結束子

現在,我需要規划求解來做兩件事:

  1. 在例程結束時,將在單元格O40中求解的值寫到單元格Kx中,其中單元格Kx對應於確定單元格O41固定值約束的相鄰單元格Jx。

  2. 對范圍J17:J33重復該過程,更改單元格O41中的固定值約束。

結果應該是,對於單元格J17:J33中的給定級別,將單元格K17:K33中的值填充並最小化。

感謝您能提供的任何幫助。

我認為進行遞歸的最佳方法是執行While循環,如下所示:

Dim a as Variant 
a = 17

While a <= 33  
  'Solver functionality in here   
   a = a + 1 
Wend

這將涵蓋您問題的第一部分。 下一個問題是使您的求解器引用保持不變。 在這種情況下,我會將您的值在J17:J33中放在單獨的位置,然后在需要時將值移到相關的單元格中。 這意味着在每個解決方案之后,您都將建議的答案復制到另一個位置,並為下次嘗試求解提供新信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM