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,并且文件可以选择使用gzip
、bzip2
或7z
进行压缩。有关接受的格式的更多信息,请参阅文件格式讨论。
最基本的命令行命令如下:
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将返回到目前为止找到的最小不可行子系统。
IISConstrForce、IISLBForce、IISUBForce、IISSOSForce、IISQConstrForce和IISGenConstrForce属性允许您标记模型元素以包含或排除在计算的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
文件填充了VBasis和CBasis属性,而一个.ord
文件填充了BranchPriority属性。一个.mst
或.sol
文件填充了开始属性。一个.hnt
文件填充了VarHintVal和VarHintPri属性。一个.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调用章节。