MATLAB API概述

MATLAB API概述

本节记录了Gurobi MATLAB®接口。对于那些不熟悉MATLAB的同学,它是一个做数值计算的环境。请访问MATLAB的网站为更多的信息。本手册首先简要介绍MATLAB API提供的方法。接着是a全面的介绍所有可用的方法,它们的参数和它们的返回值。

如果您是Gurobi Optimizer的新手,我们建议您从快速入门指南或者是例子之旅.这些文档提供了如何使用这里描述的方法的具体示例。

MATLAB优化工具箱为构建优化模型提供了自己的接口(从版本2017b开始)。Gurobi也支持这个接口。我们将在具体问题具体分析建模部分;咨询的linprogintlinprogopttoolbox_lp,opttoolbox_mip1示例,以说明如何将使用此接口构建的模型传递给Gurobi。

给新用户一个简短的提示:数学编程中的约定是变量是非负的,除非另有说明。如果希望变量能够取负值,就需要显式设置下界。

模型

我们的Gurobi MATLAB界面使您能够表达以下形式的问题:

最小化 < span > < /美元跨度> x ^ TQx + c ^ Tx + \ mathrm{α}< span > < / span >美元
< span > < /美元跨度> Ax = b < span > < / span >美元 (线性约束)
<span>$</span>\ell \le x \le u<span>$</span> (绑定约束)
一些< span > < /美元跨度> x_j < span > < / span >美元积分 (完整性约束)
< span > < / span > x美元全面质量管理x + q ^ ^ Tx \ le \ mathrm{β}< span > < / span >美元 (二次约束)
一些< span > < /美元跨度> x_i < span > < / span >美元在SOS (特殊有序集约束)
最小,最大,腹肌,还是… (一般约束)



模型存储为结构体变量,每个由多个字段.字段捕获上面列出的不同模型组件。许多模型组件是可选的。例如,完整性约束可以省略。

可以从文件加载优化模型(使用gurobi_read函数),也可以通过填充模型变量的适当字段来构建(使用标准MATLAB构造)。我们将讨论模型如何在模型论证部分。

我们经常提到一个优化模型。具有线性目标函数、线性约束和连续变量的模型为线性规划(LP).如果目标是二次的,模型是a二次规划(QP).如果任何约束条件是二次的,则模型是aQuadratically-Constrained计划(QCP).我们有时也会讨论QCP的一种特殊情况二阶锥程序(SOCP).如果模型包含任何整数变量、半连续变量、半整数变量、特殊有序集(SOS)约束或一般约束,则该模型是一个混合整数程序(MIP).我们有时也会讨论MIP的特殊情况,包括混合整数线性规划(MILP)混合整数二次规划(MIQP)混合整数二次约束规划,混合整数二阶锥规划(MISOCP).Gurobi Optimizer处理所有这些模型类。

解决一个模型

一旦你建立了一个模型,你可以调用gurobi计算一个解。默认情况下,gurobi将使用并发优化器用barrier算法求解QP和QCP模型,用branch-and-cut算法求解混合整数模型。解决方案以a的形式返回结构体变量。在讨论时,我们将讨论如何表示优化结果的细节gurobi函数。

下面是MATLAB API中可能的命令序列的一个简单示例:
模型= gurobi_read(例子/数据/ stein9.mps);
结果= gurobi(模型);

多方案多目标

默认情况下,Gurobi Optimizer假定您的目标是找到具有单一目标函数的模型的一个经过验证的最优解决方案。Gurobi提供了一些特性,可以让您放松这两种假设。你应该参考一下溶液池有关如何请求多个解决方案的信息,或有关多个目标有关如何指定多个目标函数和控制它们之间的权衡的信息。

不可行模型

如果发现一个模型不可行,您有几个选择。您可以尝试诊断不可行性的原因,尝试修复不可行性,或两者兼有。为了获得对诊断不可行性的原因有用的信息,调用gurobi_iis计算不可约不一致子系统(IIS)。这种方法可以用于连续模型和MIP模型,但是您应该知道MIP版本可能非常昂贵。我们将详细讨论IIS结果如何在gurobi_iis函数文档。manbet体育手机客户端

想要修复一个不可行的问题,请打电话gurobi_feasrelax计算模型的可行性松弛。这种松弛允许您找到一个解,使违反约束的幅度最小化。

管理参数

Gurobi优化器提供了一组参数,允许您控制优化过程的许多细节。在开始优化之前,可以通过修改Gurobi参数来控制可行性和最优性容差、算法选择、探索MIP搜索树的策略等因素。

每个Gurobi参数都有一个默认值。将所需的参数更改传递到结构体变量。这个结构中的每个字段的名称必须是Gurobi参数的名称,关联的值应该是该参数的期望值。您可以找到可用Gurobi参数的完整列表在这里.我们将提供关于更改参数设置的更多详细信息参数个数论证部分。

监测进展

可以通过Gurobi日志记录来监控优化的进程。默认情况下,Gurobi将输出发送到屏幕上。可以使用一些简单的控件来修改默认的日志记录行为。如果您想将输出直接输出到文件和屏幕,请设置日志文件参数设置为所需日志文件的名称。日志输出的频率可以用DisplayInterval参数,可以完全关闭日志记录OutputFlag参数。中可以找到Gurobi日志文件的详细描述日志记录部分。

错误处理

如果不成功,Gurobi MATLAB接口的方法将返回一个错误代码和一个错误消息。可能的错误代码列表可以在错误代码部分。

环境

默认情况下,各种Gurobi函数将查找一个有效的许可文件并创建一个本地Gurobi环境。只要相应的MATLAB API函数在运行,这个环境就存在,并在完成后发布。

另一种选择是提供可选的env参数(也通过a结构体).此参数允许您在Gurobi Compute Server或使用Gurobi Instant Cloud上解决给定的问题。我们将在。中进一步讨论这个话题env论证部分。

Gurobi将检查当前工作目录中名为gurobi.env,如果该文件存在,它将尝试从该文件读取参数设置。文件应该在人口、难民和移民事务局格式(简单地说,每行应该包含一个参数名,后面跟着该参数的期望值)。