当使用Gurobi远程服务,重要的是考虑通信开销,尤其是计算服务器并不在你的本地网络。有一些机制有效地访问变量和约束的名字在服务器和云计算的部署场景。
一个一个地访问约束名称:
从Gurobi v9.0.1、变量和约束名称缓存在本地调用getvar ()
和getConstrs ()
。特别是Gurobi v9.0.1之后,运行:
若干= model.getConstrs ()
对于c在若干:
打印(c.constrName)
near-minimal延迟。因此使用约束访问约束属性的名字,最简单的方法提出了建议。
在一个调用查询所有约束名称:
如果有延迟搜索限制,添加一个查询将所有约束名称:
名称=模型。getAttr (constrName, model.getConstrs ())
然后用当地的工作cname
数组访问约束名称可能减少延迟。
存储在模型创建约束名称
另一种替代方法,它适用于早些时候Gurobi版本,是建立在模型创建本地字典为约束名称:
my_constr = {}
my_constr [“myConstrName”] =模型。addConstr (x + y < = 1, name = " myConstrName ")
类似的考虑也适用于变量名。
按名称查询
按名称搜索模型组件使用getVarByName
或getConstrByName
仍可能导致明显的通信开销。有很大的区别,因为字符串值(比如一个变量名)并不缓存:
name_single = [v。VarName model.getVars的v () #时间:46.20
name_all =模型。getAttr (VarName, model.getVars()) #时间:0.05
他们没有缓存,因为他们通常需要大量的内存(使用时)。Gurobi不注意这些值在内部只有将它们存储作为模式的一部分。你看到一个延迟的原因是,每个请求的属性值的结果在一个新的请求发送到服务器。
出于这个原因,运行代码,如以下应该避免在云计算服务器环境,因为它会打开一个新的通信为每个调用:
名字的名字:
x = model.getVarByName(名字)
评论
0评论
文章是关闭了评论。