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