gurobipy.Env#
- class Env#
Gurobi环境对象。请注意,环境在Python接口中的作用比其他Gurobi语言API中要小得多,主要是因为Python接口有一个默认环境。除非您显式地将自己的环境传递给需要环境的例程,否则将使用默认环境。
您希望使用自己的环境的主要情况是:
当您使用Gurobi计算服务器并希望从程序中选择服务器时。
当您需要控制环境的垃圾回收时。 Gurobi Python接口维护对默认环境的引用,因此默认情况下它永远不会被垃圾回收。通过创建您自己的环境,您可以精确控制程序何时释放它正在使用的任何许可证令牌或计算服务器。
当你在其中一个并发优化器中使用
concurrent environments
时。
在处理环境(和模型)对象时,使用
with
关键字是一个好习惯。这样,即使在某些时候抛出异常,与这些对象绑定的资源也能被正确释放。以下示例说明了两种典型的使用模式。- Example:
import gurobipy as gp with gp.Env("gurobi.log") as env, gp.Model(env=env) as model: # Populate model object here... model.optimize() with gp.Env(empty=True) as env: env.setParam("ComputeServer", "myserver1:32123") env.setParam("ServerPassword", "pass") env.start() with gp.Model(env=env) as model: # Populate model object here... model.optimize()
请注意,您可以通过调用
disposeDefaultEnv
手动移除对默认环境的引用。调用此函数后,并且在默认环境中构建的所有模型都被垃圾回收后,默认环境也将被垃圾回收。如果您调用需要一个默认环境的例程,将自动创建一个新的默认环境。- Env(logfilename='', empty=False, params=None)#
Env 构造函数。在 Gurobi Python 程序中,您通常希望使用默认环境。例外情况是当您希望对环境垃圾回收进行显式控制时。通过创建您自己的环境对象并始终将其传递给需要环境作为输入的方法(
read
或Model
构造函数),您将避免创建默认环境。一旦使用 Env 对象创建的每个模型都被垃圾回收,并且 Env 对象本身不再被引用,垃圾回收器将回收环境并释放所有相关资源。如果环境不为空,此方法还将填充您在
gurobi.lic
文件中指定的任何参数(ComputeServer、TokenServer、ServerPassword等)。此方法还将检查当前工作目录中是否存在名为gurobi.env
的文件,如果存在,它将尝试从此文件中读取参数设置。该文件应为PRM格式(简而言之,每行应包含一个参数名称,后跟该参数的所需值)。通常,您应该努力在程序中创建一个单一的Gurobi环境,即使您计划处理多个模型。重复使用一个环境比创建和销毁多个环境要高效得多。唯一的例外是如果您正在编写多线程程序,因为环境不是线程安全的。在这种情况下,您需要为每个线程单独创建一个环境。
- Parameters:
logfilename – 此环境的日志文件名。如果您不想要日志文件,请传递一个空字符串。
empty – 表示环境是否应为空。如果您希望在实际启动环境之前设置参数,则应使用
empty=True
。如果您希望连接到计算服务器、令牌服务器、Gurobi即时云、集群管理器或使用WLS许可证,这可能很有用。有关更多详细信息,请参阅环境部分。params – 一个包含Gurobi参数/值对的字典,这些参数应在环境创建时就已经设置好。任何与服务器相关的参数也可以通过这个字典来设置。
- Returns:
新环境对象。
- Example:
env = gp.Env("gurobi.log") model = gp.read("misc07.mps", env) model.optimize()
- Example:
p = {"ComputeServer": "localhost:33322", "ServerPassword": "pass", "TimeLimit": 120.0} with gp.Env(params=p) as env, gp.read('misc07.mps', env=env) as model: model.optimize()
- close()#
释放与此
Env
对象关联的所有资源。此方法是dispose
的同义词。用户应在关闭此
Env
对象之前关闭在此环境中创建的所有模型。调用此方法后,此
Env
对象不能再使用。- Example:
env = gp.Env() model = gp.read("misc07.mps", env) model.optimize() model.close() env.close()
- dispose()#
释放与此Env对象关联的所有资源。此方法是
close
的同义词。用户应在处理此Env对象之前处理在此环境中创建的所有模型。
调用此方法后,此Env对象不能再使用。
- Example:
env = gp.Env() model = gp.read("misc07.mps", env) model.optimize() model.dispose() env.dispose()
- getParam(paramname)#
获取参数的当前值。
- Parameters:
paramname – 包含您想要查询的参数名称的字符串。
paramname
的大小写和下划线将被忽略。- Returns:
当前环境中参数的值。
- resetParams()#
将所有参数的值重置为其默认值。
- Example:
env.resetParams()
- setParam(paramname, newvalue)#
将参数设置为新值。
- Parameters:
paramname – 包含您想要修改的参数名称的字符串。
paramname
的大小写和下划线将被忽略。newvalue – 参数的期望新值。
注意
请注意,模型在创建时会获得其自己的环境副本。对原始环境的更改不会影响副本,反之亦然。使用
Model.setParam
来更改现有模型上的参数。- Example:
env.setParam("Cuts", 2)
自版本12.0起已弃用:在
paramname
中使用'*'
和'?'
进行通配符名称匹配已弃用。将'default'
作为newvalue
传递已弃用。
- start()#
启动一个空的环境。如果环境已经启动,此方法将不执行任何操作。如果调用失败,环境将保持与调用此方法之前相同的状态。
此方法还将填充您的
gurobi.lic
文件中指定的任何参数(ComputeServer、TokenServer、ServerPassword等)。此方法还将检查当前工作目录中是否存在名为gurobi.env
的文件,如果存在,它将尝试从此文件中读取参数设置。该文件应为PRM格式(简而言之,每行应包含一个参数名称,后跟该参数的所需值)。之后,它将应用用户在此调用之前指定的所有参数更改。请注意,这可能会覆盖许可证文件或gurobi.env
文件(如果存在)中设置的参数。在执行所有这些更改后,代码将实际激活环境,并使其准备好与模型一起工作。
通常,您应该努力在程序中创建一个单一的Gurobi环境,即使您计划处理多个模型。重复使用一个环境比创建和销毁多个环境要高效得多。唯一的例外是如果您正在编写多线程程序,因为环境不是线程安全的。在这种情况下,您需要为每个线程单独创建一个环境。
- Example:
env = gp.Env(empty=True) env.setParam('ComputeServer', 'server.mydomain.com:61000') env.setParam('ServerPassword', 'mypassword') env.start()