在浮动许可环境中,可能所有的令牌都在使用中。当这种情况发生时,在发布令牌之前,没有其他应用程序能够使用Gurobi来解决优化问题。
从命令行检查令牌的可用性
在命令行中,可以使用以下命令来检查令牌服务器的可用性:
gurobi_cl——令牌
但是,不建议通过解析这个命令的输出来确定一个令牌是否可用。在解析输出并启动优化应用程序时,可能已经没有任何令牌可用了。
从应用程序中检查令牌的可用性
而不是解析输出gurobi_cl——令牌,应用程序可以直接与令牌服务器交互,以确定令牌的可用性。
在建模和解决优化问题之前,必须创建一个Gurobi环境。当使用指向令牌服务器的客户端许可证文件时,Gurobi环境的构造需要与令牌服务器通信,以确定是否有令牌可用。
- 如果令牌可用,则将其发布到Gurobi环境。然后可以使用该环境来解决优化问题。令牌保留在这个Gurobi环境中,直到环境被破坏。
- 另一方面,如果在试图构造Gurobi环境时没有令牌可用,则会引发Gurobi异常,并且不会创建环境。
例如,在gurobipy,一个Gurobi环境创建与调用Env ()构造函数:
env = env(“gurobi.log”)
如果令牌服务器中没有可用令牌,则GurobiError异常:
回溯(最近的电话last):
文件"",第1行,在<模块>
文件“env。pxi",第48行,在gurobipy.Env.__init__
gurobipy。GurobiError:请求被拒绝:使用限制(2)超过
为避免此类错误,可以使用具有异常处理的简单循环。以下代码片段尝试每分钟构建Gurobi环境,直到可用令牌。一旦成功创建了Gurobi环境,环境可用于构建和解决优化问题。
导入gurobipy作为gp
进口时间
而真正的:
试一试:
#尝试构建一个Gurobi环境
env = gp.Env(“gurobi.log”)
打印(“令牌检索!”)
打破
除了医生。GurobiError:
打印(“没有令牌…”)
等待60秒
time . sleep (60)
这是一个基本的例子;改进包括限制尝试的次数,以避免无限循环。
检查其他建模框架中令牌的可用性
在其他建模框架中,也适用类似的思想。所有有助于Gurobi使用的建模框架都必须在某个时刻构建一个Gurobi环境。
例如,在Pyomo中,Gurobi环境是在求解模型时构建的。在浮动许可证设置中,Pyomo引发了一个pyutilib.common.ApplicationError异常,如果由于缺乏可用标记而无法构造模型。因此,可以修改前面的代码片段,以每隔60秒不断尝试解决Pyomo模型,直到有令牌可用:
从pyomo。环境导入*
从pyutilib.common导入ApplicationError
进口时间
#“简单模型”,来自Pyomo文档manbet体育手机客户端
模型= ConcreteModel ()
模型。x = Var([1,2], domain= nonnegatirealals)
模型。(expr = 2*模型。x [1] + 3 * model.x [2])
模型。(expr = 3*model.)x[1] + 4 *模型。x [2] > = 1)
选择= So手机万博登录lverFactory(“gurobi”)
而真正的:
试一试:
#尝试解决模型
#这是Pyomo试图构建古罗比环境的地方
结果= opt.solve(模型)
model.display ()
打破
除了ApplicationError:
打印(“没有令牌…”)
等待60秒
time . sleep (60)
注意:令牌服务器不对请求进行排队,为了检索下一个可用令牌,不建议使用不必要的网络流量淹没服务器。最好是增加令牌的数量,而不是围绕几个不同的应用程序竞争有限数量的令牌。
进一步的信息
- 快速入门指南>设置和使用浮动(令牌)许可证(用于窗户,Linux,Mac)
- 如何从客户端检查令牌服务器的状态?
- 如何发布共享许可证?
- 如何监视和定制令牌服务器日志?