Fw: [VBA ] 規劃求解

作者: Tampa (光芒)   2016-11-19 17:10:17
※ [本文轉錄自 Visual_Basic 看板 #1OC1QXPU ]
作者: Tampa (光芒) 看板: Visual_Basic
標題: [VBA ] 規劃求解
時間: Sat Nov 19 17:08:47 2016
各位大大好
我用的是excel 2010
有試著錄製一段規劃求解的巨集
程式碼如下
快速鍵: Ctrl+s
'
SolverOk SetCell:="$AB$2", MaxMinVal:=2, ValueOf:=0, ByChange:="$G$2",
Engine:= _
3, EngineDesc:="Evolutionary"
SolverDelete CellRef:="$G$3432", Relation:=1, FormulaText:="48"
SolverAdd CellRef:="$G$2", Relation:=1, FormulaText:="$E$2"
SolverOk SetCell:="$AB$2", MaxMinVal:=2, ValueOf:=0, ByChange:="$G$2",
Engine:= _
3, EngineDesc:="Evolutionary"
SolverDelete CellRef:="$G$3432", Relation:=4
SolverAdd CellRef:="$G$2", Relation:=4, FormulaText:="整數"
SolverOk SetCell:="$AB$2", MaxMinVal:=2, ValueOf:=0, ByChange:="$G$2",
Engine:= _
3, EngineDesc:="Evolutionary"
SolverDelete CellRef:="$G$3432", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$E$2", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$AB$2", MaxMinVal:=2, ValueOf:=0, ByChange:="$G$2",
Engine:= _
3, EngineDesc:="Evolutionary"
SolverOk SetCell:="$AB$2", MaxMinVal:=2, ValueOf:=0, ByChange:="$G$2",
Engine:= _
3, EngineDesc:="Evolutionary"
SolverSolve
End Sub
簡單來說
我輸入變數在G欄位的所有儲存格,範圍從G2到G17860,限制式如下
G2<=E2
G2>=0
G2=整數
求AB2的最小值
.
.
.
G3<=E3
G3>=0
G3=整數
求AB3的最小值
.
.一直到
.
G17860<=E17860
G17860>=0
G17860=整數
求AB17860的最小值
巨集結束
問題一:規劃求解似乎不能直接用複製來做
所以需要用巨集,但小弟我 對程式碼不很了解
所以附上程式碼,希望各位大大可以指點一下,需要修改哪幾個地方
以方便我順利求解
ps計算方式為演化
感謝
作者: soyoso (我是耀宗)   2016-11-19 17:56:00
加上迴圈,setcell、bychange等,所帶入的儲存格位置字串改以變數以&連接,如因出現規劃求解結果的視窗中斷,再於solversolve後加true或是搜尋版上規劃求解,#1LjuNjw6#1IeB04ZV等原文有寫到迴圈的部分出現沒定義這個sub或function的話,看#1NpNv6SIrange(cells(j,7))方面將range()拿掉試試
作者: Tampa (光芒)   2016-11-19 22:23:00
S大 拍謝 還是噴一樣的錯QQ
作者: soyoso (我是耀宗)   2016-11-19 22:33:00
作者: Tampa (光芒)   2016-11-19 23:07:00
試過S大的方法 現在還在跑XDD
作者: soyoso (我是耀宗)   2016-11-19 23:39:00
連結提供上為解決原文的錯誤;巨集內因迴圈會一直新增設定限制式,也請自行加入solverreset
作者: Tampa (光芒)   2016-11-20 00:36:00
請問 是加在最後一行嗎?
作者: soyoso (我是耀宗)   2016-11-20 00:41:00
這要看原po檔案內設定限制式是否已有設定,再決定為迴圈內的前或後
作者: Tampa (光芒)   2016-11-20 01:32:00
感謝S大 最後一個問題 我的模型不是 唯一解所以跑完 他都會叫我選擇停止還是繼續SolverSolve True 應該要選擇甚麼? True應該要改成甚麼?
作者: soyoso (我是耀宗)   2016-11-20 01:40:00
如要不出現的話,可於true後面接個自訂程序名稱程序內可不執行動作
作者: Tampa (光芒)   2016-11-20 01:45:00
SolverSolve(UserFinish, ShowRef) 是指showRef那參數?
作者: soyoso (我是耀宗)   2016-11-20 01:45:00
原po所述
作者: Tampa (光芒)   2016-11-20 01:51:00
showRef 我查了 大概也1-5這五種參數?
作者: soyoso (我是耀宗)   2016-11-20 02:24:00
測試如不要出現視窗的話,則只是打上自訂程序名稱而已原po所述的1-5參數,應為1-5的情況則呼叫該程序(巨集)
作者: Tampa (光芒)   2016-11-20 18:33:00
所以我直接打一個solversolve(ture,111)?假設111為我程序名稱(那要先定義嗎?
作者: soyoso (我是耀宗)   2016-11-20 19:09:00
可不用括號,可先設定個程序名稱,且showref是以字串形式
作者: Tampa (光芒)   2016-11-20 19:19:00
orz 沒設定過程序名稱 vba新手 請S大指點迷津一下成功了 謝謝S大

Links booklink

Contact Us: admin [ a t ] ucptt.com