Gurobi 12.0 中的新增、更改和移除#
发布亮点#
Gurobi V12 提供了跨多种模型系列的性能改进。这些改进的详细信息将在测试期结束后提供。
Gurobi 现在支持形式为 \(y = f(x)\) 的非线性约束, 其中 \(f\) 是由闭式表达式给出的多元函数。
新功能#
非线性约束#
Gurobi 现在支持形式为 \(y = f(x)\) 的非线性约束,其中 \(f: \mathbf{R}^n \rightarrow \mathbf{R}\)。Gurobi 将使用分支定界算法解决包含此类约束的模型,以达到全局最优。函数 \(f\) 在 gurobipy 中以闭式表达式提供(参见 下方),并从 C
、C++
、Java
和 .NET
中以 表达式树 的形式提供。
查询已分配的内存#
新的属性 已用内存 和 MaxMemUsed 已被添加到所有API中的 Model
类中。它们允许您查询持有该模型的环境分配的当前和最大内存量。
对应的 what
值 MEMUSED
和 MAXMEMUSED
可以用于从回调中查询这些值。详情请参见 回调代码。
来自MULTIOBJ回调的更多信息#
MULTIOBJ
回调现在可以提供每次优化过程的信息:状态、最佳目标值、最佳界限、MIP 间隙、单纯形迭代次数、已探索和未探索的节点、运行时间和工作量。更多详情请参见 什么值 表格。
模型就地转换为固定#
新增了一些函数,用于将MIP模型转换为连续模型。特别是,整数变量会被固定为加载解中的值。这些函数不会创建新模型,而是修改调用它们的现有模型。
调整多目标模型#
参数 MultiObjSettings 现在可以在命令行中使用,当调用 grbtune
来调整一个或多个多目标模型时。对于每个模型,第一个设置或参数集将应用于第一个多目标迭代,依此类推。以这种方式指定的参数被视为调谐器的固定参数。因此,它们会覆盖调谐器选择的任何参数值。
在API的情况下,可以通过多目标环境为每个单独的模型添加多目标设置。
限制要调整的参数集#
使用参数 TuneParams,用户可以提供一个逗号分隔的JSON文件列表,这些文件包含调谐器应考虑的参数及其属性。对于每个参数,可以定义最小值、最大值或参数可以取的值的列表。在 TuneParams 的参数描述中显示了一个示例。
使用Barrier解决的模型的新属性#
使用障碍算法求解的模型(即连续LP模型和连续凸QP模型)具有一个新的属性BarPi,该属性为最佳障碍迭代中的每个约束提供对偶值。
LP模型的新属性#
可设置的回调参数#
控制求解过程终止的几个参数可以在回调函数中修改。这些参数包括:时间限制、工作限制、NodeLimit、BarIterLimit、PumpPasses。这使得用户更容易实现自定义的终止标准,例如根据动态求解过程数据(如当前最优目标值)设置时间限制。如何为不同的API实现这一点,请参见这里。
gurobipy的更改#
非线性表达式支持#
gurobipy
现在支持使用现有的 Var
和 MVar
对象以及 Python 运算符原生构建非线性表达式。这些表达式可以直接使用 Model.addConstr
或 Model.addGenConstrNL
添加到模型中作为非线性约束。
新的NLExpr
建模对象提供了核心功能。该类的文档是了解可能性的良好起点。新的nlfunc
模块添加了用于表达式构建的Python函数,定义了正弦、余弦、指数、对数等。
非线性建模也通过新的MNLExpr
类与矩阵友好的API集成。
异步优化#
gurobipy
现在支持通过方法 Model.optimizeAsync
和 Model.sync
进行异步优化。这使得优化求解可以作为后台任务启动,从而提供了一种比回调更简单的前台进度监控方法。
记录更改#
参数 LogToConsole 的行为在 gurobipy
中发生了变化。以前,设置 LogToConsole=0
会抑制日志消息输出到标准输出,并阻止消息发送到 Python 的 logging
模块。在 Gurobi V12 中,设置 LogToConsole=0
仅抑制标准输出;日志消息仍会发送到 Python 的日志记录器。有关用法的更多详细信息,请参阅 监控进度 - 日志记录。
已弃用的功能#
如果您是从Gurobi的先前版本升级,我们建议首先在启用警告的情况下使用Gurobi 11运行您的代码,以捕获gurobipy
中的弃用。修复这些弃用用法将有助于保持与Gurobi V12及以后版本的兼容性。可以通过使用-X dev
或-W default
标志运行您的代码来启用警告。有关更多详细信息,请参阅Python开发模式或warnings包文档。
在Gurobi V12中,以下用法已被弃用,并将在未来版本中移除:
直接将
tupledict
传递给通用约束助手and_
,or_
,max_
,min_
, 和norm
, 或等效方法Model.addGenConstrAnd
,Model.addGenConstrOr
,Model.addGenConstrMax
,Model.addGenConstrMin
, 和Model.addGenConstrNorm
, 已被弃用。要在tupledicttd
中的所有变量上应用这些约束,请传递td.values()
。此更改是为了避免将tupledict和常规Python字典传递给这些方法时的不一致性。在
setParam
、Model.setParam
、Env.setParam
和Model.getParamInfo
中,使用‘*’和‘?’进行参数名称的通配符匹配已被弃用。在
setParam
、Model.setParam
和Env.setParam
中,传递字符串‘default’作为将单个参数重置为其默认值的方法已被弃用。
移除已弃用的功能#
三参数签名
Model.addConstr(lhs, sense, rhs)
已被移除,仅保留Model.addConstr(constr, name)
。单独的(lhs, sense, rhs)
参数仍然可以传递给Model.addLConstr
和Model.addQConstr
。直接调用
MVar
构造函数不再受支持。以下未记录的类已从
gurobipy
命名空间中移除,因此无法再直接访问:AttrConstClass
,CallbackClass
,ErrorConstClass
,ParamConstClass
, 和StatusConstClass
已被移除。要访问 Gurobi 常量,请使用GRB
命名空间中的等效属性:GRB.Attr
,GRB.Callback
,GRB.Error
,GRB.Param
, 和GRB.Status
。ParamClass
,GenExprAbs
,GenExprAnd
,GenExprMax
,GenExprMin
,GenExprNorm
, 和GenExprOr
已被移除。
其他显著变化#
FuncNonlinear
的新默认值#
FuncNonlinear 参数的默认值已更改。新的默认值(值1)将对所有单变量一般函数约束使用动态外逼近方法(除非它们的FuncNonlinear属性设置为0,在这种情况下将使用静态分段线性逼近)。
通过回调为计算服务器提供解决方案#
Gurobi V12 支持在计算服务器的上下文中通过回调插入用户提供的解决方案。有关更多详细信息,请参考 C
、C++
、Java
、.NET
和 Python
中的相应 API。
IgnoreNames
的新用例#
在写入文件时,如果IgnoreNames参数设置为1,则文件中写入的名称现在是默认名称,而不是对象的实际名称。
减少存储解决方案的内存#
在Gurobi V12中,存储解决方案池所需的内存量已大大减少。这一变化适用于大多数模型,并且在不适用的情况下不会增加内存使用量。它有助于处理解决方案池中非常大量的解决方案。
在求解结束时打印解决方案质量#
您现在可以使用--printquality
开关与Gurobi命令行工具一起,在求解结束时获取有关解质量的一些信息。
LP和MPS文件中的签名#
Gurobi优化器在写入LP或MPS文件时会插入一个Signature
注释。此签名有助于正确识别模型的所有者,并在您将模型提交给Gurobi以获取支持时处理您的数据。
对于一个LP文件,这可能看起来像这样:
\ LP format - for model browsing. Use MPS format to capture full model detail.
\ Signature: 0x879dda9303b81740
Minimize
...
签名是从写入模型时使用的许可证中的LICENSEID
字段计算得出的。它是LICENSEID
的匿名形式,只有Gurobi工作人员才能从签名中解码LICENSEID
。即使使用相同的LICENSEID
,对于不同的模型,签名也是不同的。它包含在所有类型的LP和MPS文件中,包括REW和RLP格式。
支持XZ压缩工具#
除了.zip
、.gz
、.bz2
和.7z
压缩格式外,如果安装了适当的工具,Gurobi V12还支持.xz
扩展名。有关Gurobi文件格式的详细信息,请参阅参考手册中的文件格式部分。
已弃用的功能#
随着Gurobi V12的发布,我们弃用了命令行工具gurobi_cl
和grbtune
的几个标志。这些标志的功能现在可以通过参数来实现。
交互式 shell 的弃用#
Gurobi 交互式 shell(gurobi.sh 和 gurobi.bat)自版本 11.0.2 起已弃用,并将在未来的版本中移除。请设置您自己的 Python 环境以使用 gurobipy。有关安装说明,请参阅 https://support.gurobi.com/hc/en-us/articles/360044290292