Gurobi模型运行python函数
回答目前我们使用的是Gurobi python。所以,我实例化模型,定义了模型在一个python函数,得到结果。这个函数被调用多次——一个函数调用来评估一个问题实例。
结束时,函数返回客观价值,做model.reset (1)。我这样做,这样模型重置和每个问题分别评估实例。两个问题实例应该完全不同的Gurobi(没有参数值重叠)。
这是正确的,还有其他事情要注意包装Gurobi模型在python函数?
(例如,模型应该删除的函数而不是重置等)。
我也要做model.reset(0)或model.reset (1) ?目前做model.reset (1)。
所以一个玩具我是什么意思的例子:
def run_gurobi_model(物品,背包,item_weights、item_profits knapsack_capacities):
# initlializing模型
= gp模型。模型(有些名字)
#初始化变量-决定放置物品的背包
x =模型。addVars(物品、背包、名称=物品放置)
#属
1。一些数学表达式限制项配售,违反了背包容量
#设置目标和优化
obj =利润总额的基础上放置的物品的利润值
模型。setObjective (obj GRB.MAXIMIZE)
model.optimize ()
#重置模型和返回利润模型运行
.getValue obj_value = model.getObjective () ()
model.reset (1)
返回obj_value
谢谢。
-
嗨Aryaman,
在每个函数调用,你不改变Gurobi参数变化问题输入,结果在一个新的模型对象。你可以删除model.reset (1)的就已经结束model.dispose ()删除模型对象。在下一个函数调用,当你初始化模型,创建一个新的模型对象输入的新问题。
如果你调用函数\ (\ texttt {run_gurobi_model} \)同时,重要的是要创建一个单独的环境对象为每个并行作业。请检查这篇文章我如何在Python中使用多处理Gurobi吗?
最好的问候,
Maliheh
0 -
嗨Maliheh,
非常感谢你的回应。我有两个跟踪问题。
1。将保持model.reset(1)而不是model.dispose()会导致一个不正确的解决方案?
2。如果我运行多个Jupyter笔记本文件中的函数run_gurobi_model同时我需要显式地改变环境吗?我问因为我认为每个Jupyter笔记本有自己的ipykernel,应该创建一个新的gurobi环境在每个笔记本。这种想法是正确的吗?
再一次,非常感谢你的帮助。
Shaan
0 -
嗨Shaan,
1。将保持model.reset(1)而不是model.dispose()会导致一个不正确的解决方案?
不一定。model.reset(1)基本上没有任何影响,因为你已经查询你所需要的结果,将会创建一个新模式下一个函数调用。最佳实践是所有资源免费当你不需要的对象。狗万app足彩因此,强烈建议叫model.dispose最后()和delete model.reset(1),因为它不做任何事情在你的设置。
2。如果我运行多个Jupyter笔记本文件中的函数run_gurobi_model同时我需要显式地改变环境吗?我问因为我认为每个Jupyter笔记本有自己的ipykernel,应该创建一个新的gurobi环境在每个笔记本。这种想法是正确的吗?
我认为你是对的,每个笔记本将使用一个不同的环境。上面的最佳实践建议后,当你依赖默认环境之后,您就可以调用disposeDefaultEnv ()释放所有只要你不需要的资源环境。狗万app足彩这是Jupyter笔记本,更重要的是一个长时间运行的Python会话和Gurobi环境将存在于整个时间,除非它是显式地释放。
最好的问候,
Maliheh
0
请登录留下你的评论。
评论
3评论