手动计算Obj价值
回答你好,
我一直在研究这个问题上的设施选址问题Gurobi使用提供的示例Gurobi团队在下面的链接。
# MIP模型公式
m = gp.Model (“facility_location”)
选择= m。addVars (num_facilities vtype =伽马线暴。二进制,name = '选择')# y_i
分配= m。addVars (cartesian_prod乌兰巴托= 1,vtype =伽马线暴。二进制名称=“分配”)# x_ij
m.addConstrs(分配((c、f)) < =选择[f] c、f cartesian_prod) name = ' Setup2ship ')
m.addConstrs ((gp.quicksum(分配((c、f)) f范围(num_facilities)) = = 1 c的范围(num_customers)), name = '需求')
m.addConstr (gp。quicksum(选择f (f)的范围(num_facilities)) = = 9, name = ' numberoffacilities ')
m.setObjective (select.prod (setup_cost) + assign.prod (shipping_cost) GRB.MINIMIZE)
m.optimize ()
一切都很好优化编程和结果。然而,我设计一个大型实例的近似算法来解决这个问题。
在Gurobi,通过使用
obj = m.getObjective ()
print (obj.getValue ())
我可以访问obj价值成就后的优化。此外,还提供了决策变量的数值结果
m.getVars ()
现在,我的问题是,近似算法输出不同的值决策变量(不同的选择和分配节点)的值。
我可以用Gurobi以计算的obj值优化问题使用近似算法的输出?换句话说,我想通过决策变量的值手动Gurobi和obj的输入值。
真诚地,
默罕默德
0
-
最简单的方法来处理这是Python编写自己的函数,评价的目标函数的解决方案。例如:
def evaluate_obj (ysol xsol):
”““字典的选择和评估目标函数赋值“”“
obj = 0
我,yval ysol.items ():
obj + = yval * setup_cost[我]
ij, xval xsol.items ():
obj + = xval * shipping_cost (ij)
返回obj
#范例用法与虚拟解决方案
yvals ={我:random.random()我的范围(num_facilities)}
xvals = {(i, j): random.random()因为我范围的j (num_customers)范围(num_facilities)}
打印(evaluate_obj (yvals, xvals))1 -
亲爱的伊莱,
谢谢你的建议。这似乎是一个合乎逻辑的方法。此外,我进行了一次深度搜索Gurobi文档。manbet体育手机客户端
我相信,通过我的gurobi作为解决方案MIP开始是另一种方法来达到我的目标。
如果有可能,gurobi将发布解决方案的客观价值。
MIP首manbet体育手机客户端先Gurobi的文档可能被发现在这里。用户MIP开始生产解决方案与客观的210500年(0.01加载用户MIP开始与客观的210500年
我只有一个问题。当我开始分配价值决策变量(使用python脚本和获取最终结果近似算法),也就是说,分配。开始和select.start),是否可以打印初始赋值为决策变量,以检查开始优化之前一切都是正确的吗?
例如,当我试着打印指定变量,仅我得到以下信息:
p的分配:
打印(分配[p])#输出
< gurobi。Var *等待模型更新* >0 -
是否可以打印初始赋值决策变量,以检查开始优化之前一切都是正确的吗?
不幸的是没有。MIP Gurobi并不处理开始,直到用户调用Model.optimize ()。
开始优化过程之后,您可以检查解决方案Gurobi构造从你MIP开始以下之一:
- 调用Model.cbGetSolution ()里面的MIPSOL回调。这是做的tsp.py的例子。
- 设置SolFiles参数。这个指导Gurobi立即编写新的现任磁盘解决方案,包括那些由用户提供的MIP开始。
0
请登录留下你的评论。
评论
3评论