GRBEnv#
- GRBEnv#
Gurobi环境对象。Gurobi模型总是与一个环境相关联。在创建和填充模型之前,您必须先创建一个环境。在您的程序中,通常只需要一个环境对象。
环境对象上的方法主要用于管理Gurobi参数(例如,
get
,getParamInfo
,set
)。虽然Java垃圾收集器最终会收集未使用的
GRBEnv
对象,但在收集发生之前,环境将保留资源(Gurobi许可证、文件描述符等)。如果你的程序创建了多个GRBEnv
对象,我们建议你在使用完一个后调用GRBEnv.dispose
。- GRBEnv GRBEnv()#
用于创建Gurobi环境(禁用日志记录)的
GRBEnv
对象的构造函数。此方法还将填充在gurobi.lic
文件中指定的任何参数(ComputeServer、TokenServer、ServerPassword等)。此方法还将检查当前工作目录中是否存在名为gurobi.env
的文件,如果存在,它将尝试从此文件中读取参数设置。该文件应为PRM格式(简而言之,每行应包含参数名称,后跟该参数的所需值)。通常,您应该努力在程序中创建一个单一的Gurobi环境,即使您计划处理多个模型。重复使用一个环境比创建和销毁多个环境要高效得多。唯一的例外是如果您正在编写多线程程序,因为环境不是线程安全的。在这种情况下,您需要为每个线程单独创建一个环境。
- Return value:
一个环境对象(没有关联的日志文件)。
- Example:
// Create environment GRBEnv env = new GRBEnv();
- GRBEnv GRBEnv(boolean empty)#
GRBEnv
对象的构造函数。如果empty=true
,则创建一个空的环境。使用start
来启动环境。如果empty=false
,结果与不提供任何参数给构造函数相同。通常,您应该努力在程序中创建一个单一的Gurobi环境,即使您计划处理多个模型。重复使用一个环境比创建和销毁多个环境要高效得多。唯一的例外是如果您正在编写多线程程序,因为环境不是线程安全的。在这种情况下,您需要为每个线程单独创建一个环境。
- Arguments:
empty – 表示环境是否应为空。如果您希望在实际启动环境之前设置参数,则应使用
empty=true
。如果您希望连接到计算服务器、令牌服务器、Gurobi即时云、集群管理器或使用WLS许可证,这可能很有用。有关更多详细信息,请参阅环境部分。- Return value:
一个环境对象。
- Example:
// Create empty environment GRBEnv env = new GRBEnv(true); // Populate Compute Server parameters env.set("ComputeServer", "server1:61000"); env.set("ServerPassword", "passwd"); // Start the environment env.start();
- GRBEnv GRBEnv(String logFileName)#
用于创建Gurobi环境的
GRBEnv
对象的构造函数(启用日志记录)。此方法还将填充您的gurobi.lic
文件中指定的任何参数(ComputeServer、TokenServer、ServerPassword等)。此方法还将检查当前工作目录中是否存在名为gurobi.env
的文件,如果存在,它将尝试从此文件中读取参数设置。该文件应为PRM格式(简而言之,每行应包含参数名称,后跟该参数的所需值)。通常,您应该努力在程序中创建一个单一的Gurobi环境,即使您计划处理多个模型。重复使用一个环境比创建和销毁多个环境要高效得多。唯一的例外是如果您正在编写多线程程序,因为环境不是线程安全的。在这种情况下,您需要为每个线程单独创建一个环境。
- Arguments:
logFileName – 所需的日志文件名。
- Return value:
一个环境对象。
- Example:
// Create environment with associated log file GRBEnv env = new GRBEnv("gurobi.log");
- void dispose()#
释放与
GRBEnv
对象关联的资源。虽然Java垃圾收集器最终会回收这些资源,但如果你的程序创建了多个环境,我们建议你在使用完环境后调用dispose
方法。在调用
dispose
方法之前,应该先调用在该环境中创建的所有模型上的dispose
方法。在调用dispose
之后,不应尝试使用GRBEnv
对象。- Example:
// Create environment GRBEnv env = new GRBEnv(); // ... // Clean up environment env.dispose()
- double get(GRB.DoubleParam param)#
查询一个双精度值参数的值。
- Arguments:
param – 正在查询的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、最大值和默认值。
- Return value:
请求参数的当前值。
- Example:
// Query value of TimeLimit parameter double value = env.get(GRB.DoubleParam.TimeLimit);
- int get(GRB.IntParam param)#
查询一个整数值参数的值。
- Arguments:
param – 正在查询的参数。请参阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、最大值和默认值。
- Return value:
请求参数的当前值。
- Example:
// Query value of PumpPasses parameter int value = env.get(GRB.IntParam.PumpPasses);
- String get(GRB.StringParam param)#
查询字符串值参数的值。
- Arguments:
param – 正在查询的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、 最大值和默认值。
- Return value:
请求参数的当前值。
- Example:
// Query value of LogFile parameter String value = env.get(GRB.StringParam.LogFile);
- String getErrorMsg()#
查询与此环境相关的最新异常的错误信息。
- Return value:
错误字符串。
- Example:
// Query the error message of the most recent exception String msg = env.getErrorMsg();
- void getParamInfo(GRB.DoubleParam param, double[] info)#
获取有关双精度参数的详细信息。
- Arguments:
param – 感兴趣的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、 最大值和默认值。
info – 返回的信息。结果将包含四个条目:参数的当前值、允许的最小值、允许的最大值和默认值。
- Example:
// Query information about TimeLimit parameter double[] info = new double[4]; env.getParamInfo(GRB.DoubleParam.TimeLimit, info);
- void getParamInfo(GRB.IntParam param, int[] info)#
获取有关整数参数的详细信息。
- Arguments:
param – 感兴趣的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、 最大值和默认值。
info – 返回的信息。结果将包含四个条目:参数的当前值、允许的最小值、允许的最大值和默认值。
- Example:
// Query information about PumpPasses parameter int[] info = new int[4]; env.getParamInfo(GRB.IntParam.PumpPasses, info);
- void getParamInfo(GRB.StringParam param, String[] info)#
获取有关字符串参数的详细信息。
- Arguments:
param – 感兴趣的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述以及最小、最大和默认值。
info – 返回的信息。结果将包含两个条目:参数的当前值和默认值。
- Example:
// Query information about LogFile parameter String[] info = new String[2]; env.getParamInfo(GRB.StringParam.LogFile, info);
- void message(String message)#
向控制台和日志文件写入一条消息。
- Arguments:
message – 要写入的消息。
注意
除非设置了OutputFlag参数,否则此调用无效。此外,在
MESSAGE
回调(参见WHERE 值)和日志回调中,它会被忽略。控制台日志可以通过LogToConsole进行控制。- Example:
// Write message env.message("Hello Gurobi!");
- void readParams(String paramFile)#
从文件中读取新的参数设置。
请参考 参数部分以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、最大值和默认值。
参数应每行列出一个,首先是参数名称,其次是所需的值。例如:
# Gurobi parameter file Threads 1 MIPGap 0
空白行和以井号开头的行将被忽略。
- Arguments:
paramFile – 包含参数设置的文件名称。
- Example:
// Read params.prm file env.readParams("params.prm");
- void release()#
释放与此环境关联的许可证。在许可证被释放后,您将无法再对使用此环境创建的模型调用
optimize
。- Example:
// Release license from environment env.release();
- void resetParams()#
将所有参数重置为其默认值。
请参考 参数部分以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、最大值和默认值。
- Example:
// Reset all parameters to their default values env.resetParams();
- void set(GRB.DoubleParam param, double newval)#
设置一个双精度值参数的值。
- Arguments:
param – 正在修改的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述以及最小、最大和默认值。
newval – 参数的期望新值。
注意
请注意,模型在创建时会获得其自己的环境副本。对原始环境的更改不会影响副本,反之亦然。使用适当版本的重载方法
GRBModel.set
来更改现有模型上的参数。- Example:
// Set TimeLimit parameter env.set(GRB.DoubleParam.TimeLimit, 2.0);
- void set(GRB.IntParam param, int newval)#
设置一个整型参数的值。
- Arguments:
param – 正在修改的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述以及最小、最大和默认值。
newval – 参数的期望新值。
注意
请注意,模型在创建时会获得其自己的环境副本。对原始环境的更改不会影响副本,反之亦然。使用适当版本的重载方法
GRBModel.set
来更改现有模型上的参数。- Example:
// Set PumpPasses parameter env.set(GRB.IntParam.PumpPasses, 10);
- void set(GRB.StringParam param, String newval)#
设置字符串类型参数的值。
- Arguments:
param – 正在修改的参数。请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述以及最小、最大和默认值。
newval – 参数的期望新值。
注意
请注意,模型在创建时会获得其自己的环境副本。对原始环境的更改不会影响副本,反之亦然。使用适当版本的重载方法
GRBModel.set
来更改现有模型上的参数。- Example:
// Set LogFile parameter env.set(GRB.StringParam.LogFile, "mylog.log");
- void set(String param, String newval)#
仅使用字符串设置任何参数的值。
- Arguments:
param – 正在修改的参数的名称。 请查阅 参数部分 以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、最大值和默认值。
newval – 参数的期望新值。
注意
请注意,模型在创建时会获得其自己的环境副本。对原始环境的更改不会影响副本,反之亦然。使用适当版本的重载方法
GRBModel.set
来更改现有模型上的参数。- Example:
// Set TimeLimit parameter via strings env.set("TimeLimit", "2.0");
- void setLogCallback(java.util.function.Consumer<String> logCallback)#
设置一个日志回调函数,用于查询环境对象发布的所有输出。可以在创建空环境后设置。
- Arguments:
logCallback – 日志回调函数。
- void start()#
启动一个空的环境。如果环境已经启动,此方法将不执行任何操作。如果调用失败,环境将保持与调用此方法之前相同的状态。
此方法还将填充您的
gurobi.lic
文件中指定的任何参数(ComputeServer、TokenServer、ServerPassword等)。此方法还将检查当前工作目录中是否存在名为gurobi.env
的文件,如果存在,它将尝试从此文件中读取参数设置。该文件应为PRM格式(简而言之,每行应包含一个参数名称,后跟该参数的所需值)。之后,它将应用用户在此调用之前指定的所有参数更改。请注意,这可能会覆盖许可证文件或gurobi.env
文件(如果存在)中设置的参数。在执行所有这些更改后,代码将实际激活环境,并使其准备好与模型一起工作。
通常,您应该努力在程序中创建一个单一的Gurobi环境,即使您计划处理多个模型。重复使用一个环境比创建和销毁多个环境要高效得多。唯一的例外是如果您正在编写多线程程序,因为环境不是线程安全的。在这种情况下,您需要为每个线程单独创建一个环境。
请参考 参数部分以获取Gurobi参数的完整列表,包括它们的用途描述及其最小值、最大值和默认值。
- Example:
// Create empty environment GRBEnv env = new GRBEnv(true); // Populate Compute Server parameters env.set("ComputeServer", "server1:61000"); env.set("ServerPassword", "passwd"); // Start the environment env.start()