Gurobi 命令行工具#

Gurobi命令行工具允许您执行简单的命令,而无需交互界面的开销或复杂性。虽然命令行工具的最基本用法相当直接,但该工具还有许多可能不太明显的用途。本节将讨论其全部功能。

要使用此工具,您需要在命令行界面中输入命令。Linux 和 Mac 用户可以使用终端窗口。Windows 用户需要打开命令提示符(也称为控制台窗口或cmd窗口)。要启动它,请同时按住开始R键,然后在出现的运行框中输入cmd

使用命令行工具求解模型的命令是:

gurobi_cl [parameter=value]* modelfile

Gurobi日志文件在模型求解时打印到屏幕上,求解完成后命令终止。参数从Gurobi参数中选择。最后一个参数是包含优化模型的文件名,该文件以MPS或LP格式存储。您可以在本节中了解更多关于使用命令行工具求解模型的信息。

命令行工具也可以用于回放 API调用的记录。此用途的命令是:

gurobi_cl recordingfile

录制文件是由Gurobi生成的二进制文件,扩展名为.grbr。您可以在本节中了解更多关于使用命令行工具回放录制的信息。

命令行工具也可以用于检查Gurobi令牌服务器的状态。命令是:

gurobi_cl --tokens

此命令将显示令牌服务器当前是否正在提供令牌,以及当前哪些用户和机器正在使用令牌。

您还可以输入:

gurobi_cl --help

获取有关工具使用的帮助,或:

gurobi_cl --version

获取版本信息,或者:

gurobi_cl --license

获取当前Gurobi许可证文件的位置。

解决模型#

命令行工具提供了一种简单的方法来解决存储在文件中的模型。模型可以以多种不同的格式存储,包括MPS、REW、LP和RLP,并且文件可以选择使用gzipbzip27z进行压缩。有关接受的格式的更多信息,请参阅文件格式讨论。

最基本的命令行命令如下:

gurobi_cl model.mps

这将从指定的文件中读取模型,进行优化,并在求解过程中显示Gurobi日志文件。

你可以选择在文件名前包含任意数量的parameter=value命令。例如:

gurobi_cl Method=2 TimeLimit=100 model.mps

Gurobi参数的完整集合在参数部分中描述。

如果你添加了--printquality开关,一些关于最佳解决方案质量的信息将在搜索结束时显示。例如:

gurobi_cl --printquality model.mps
[...]
Solution quality statistics for unnamed model:
  Maximum violation (unscaled/scaled):
    Bound           : 4.39052800e-07 / 4.39052800e-07 (x1431)
    Constraint      : 4.41337988e-09 / 4.41337988e-09 (c35)
    Dual            : 1.82136816e-10 / 1.82136816e-10
    Complementarity : 1.05410510e-08

Gurobi 计算服务器用户可以添加 --server= 开关来指定服务器。例如,命令:

gurobi_cl --server=server1 Method=2 TimeLimit=100 model.mps

将解决存储在文件 model.mps 中的模型,假设它在机器 server1 上运行 Gurobi 计算服务器。如果计算服务器有访问密码,请使用 --password= 开关来指定它。

Gurobi Instant Cloud 用户可以添加 --accessid=--secretkey=--pool= 开关以在云实例上运行模型。例如,命令:

gurobi_cl --accessid=0f5e0ace-f929-a919-82d5-02272b3b0e19 \
          --secretkey=8EDZOIf7T9avp0ZHef9Tsw --pool=mypool model.mps

将解决存储在文件 model.mps 中的模型,在云池 mypool 上使用提供的访问ID和密钥。如果池当前未激活,它将首先启动它。

写入结果文件#

虽然简单地解决模型并显示日志通常很有用,但通常也希望查看生成的解决方案。您可以使用结果文件参数将解决方案写入文件:

gurobi_cl ResultFile=model.sol model.mps

文件名后缀决定了写入文件的类型。用于解决方案信息的有用文件格式是.sol(用于解决方案向量)和.bas(用于单纯形基础信息)。再次,您应该查阅文件格式部分以获取支持的格式列表。

如果你有一个不可行的模型,你可能想要检查一个相应的不可约不一致子系统(IIS)以确定不可行性的原因。你可以要求命令行工具写入一个.ilp格式的文件。它将尝试解决模型,如果发现模型不可行,它将自动计算一个IIS并将其写入请求的文件名。

IIS 是具有以下属性的约束和变量边界的子集:

  • 这仍然是不可行的,并且

  • 如果移除单个约束或边界,子系统将变得可行。

请注意,一个不可行的模型可能有多个IIS。Gurobi返回的不一定是最小的一个;可能存在其他具有更少约束或边界的IIS。

IIS 结果以多个属性返回: IISConstr, IISLB, IISUB, IISSOS, IISQConstr, 和 IISGenConstr. 每个属性指示相应的模型元素是否是计算出的 IIS 的成员。

请注意,对于具有一般函数约束的模型,约束的分段线性近似可能会导致不可靠的IIS结果。

IIS日志提供了关于算法进度的信息,包括对最终IIS大小的猜测。

如果IIS计算在完成之前被中断,Gurobi将返回到目前为止找到的最小不可行子系统。

IISConstrForceIISLBForceIISUBForceIISSOSForceIISQConstrForceIISGenConstrForce属性允许您标记模型元素以包含或排除在计算的IIS中。将属性设置为1会强制将相应元素包含在IIS中,将其设置为0会强制将其排除在IIS之外,将其设置为-1则允许算法决定。

为了举例说明这些属性何时可能有用,考虑一种情况,即已知初始模型是可行的,但在添加约束或收紧边界后变得不可行。如果你只对了解哪些更改导致了不可行性感兴趣,你可以强制将未修改的边界和约束纳入IIS。这使得IIS算法能够专注于新的约束,这通常会显著加快速度。

请注意,将任何Force属性设置为0可能会使生成的子系统变得可行,这将使得无法构建IIS。无论如何尝试都会导致IIS_NOT_INFEASIBLE错误。同样,将此属性设置为1可能会导致IIS不可约。更准确地说,系统仅在具有-1或0的强制值的模型元素方面才是不可约的。

结果文件 的另一个用途是在文件格式之间进行转换。例如,如果您想将模型从 MPS 格式转换为 LP 格式,您可以发出以下命令:

gurobi_cl TimeLimit=0 ResultFile=model.lp model.mps

Gurobi 可以直接写入压缩文件,因此这个命令也可以工作(假设你的机器上安装了 7zip):

gurobi_cl TimeLimit=0 ResultFile=model.lp.7z model.mps

结果文件 参数在命令行界面中的工作方式与其他参数不同。虽然一个参数通常只接受一个值,但实际上您可以指定多个结果文件。例如,以下命令:

gurobi_cl ResultFile=model.sol ResultFile=model.bas model.mps

将写入两个文件。

读取输入文件#

您可以使用InputFile参数在优化过程中读取输入文件。最常见的输入格式是.bas(一个单纯形基础),.mst(一个MIP开始),.sol(也是一个MIP开始),.hnt(MIP提示),.ord(一个MIP优先级顺序),.attr(一组属性),或.prm(一组参数)。例如,以下命令:

gurobi_cl InputFile=model.bas InputFile=params.prm model.mps

将开始优化存储在文件model.mps中的连续模型,使用文件model.bas中提供的基础和在params.prm中指定的参数。

除了.prm文件外,读取输入文件等同于设置Gurobi属性的值。一个.bas文件填充了VBasisCBasis属性,而一个.ord文件填充了BranchPriority属性。一个.mst.sol文件填充了开始属性。一个.hnt文件填充了VarHintValVarHintPri属性。一个.attr文件可以包含这些属性的集合。

.prm文件的情况下,读取文件等同于直接在命令行上使用parameter=value语法设置参数。

再次,您应该查阅文件格式部分以获取有关支持的文件格式的更多信息。

回放录制文件#

如果您已经生成了程序所进行的Gurobi API调用的记录,您可以使用命令行工具来重放此记录。

录音存储在带有.grbr扩展名的文件中。要从名为recording000.grbr的文件中回放录音,请发出以下命令:

gurobi_cl recording000.grbr

您应调整文件名以匹配您希望回放的录音。

如果你在命令行工具输出的开头看到类似以下的行,你就知道你已经成功重放了一个记录:

*Replay* Replay of file 'recording000.grbr'
*Replay* Recording captured Tue Sep 13 19:28:48 2023
*Replay* Recording captured with Gurobi version 10.0.3 (linux64)

有关记录API调用并重放它们的信息,请参阅 记录API调用章节。