MATLAB API - 常用参数#

Gurobi MATLAB 接口中最常见的参数是 MATLAB struct 变量,每个变量都有多个字段。其中一些字段是可选的。请注意,您可以通过在变量名末尾添加句点,后跟字段名称来引用结构变量的字段。例如,model.A 指的是变量 model 的字段 A

模型参数#

模型变量存储优化问题(如问题描述中所述)。

模型可以通过多种方式构建。您可以使用标准的MATLAB例程填充model结构体的适当字段。您还可以使用gurobi_read从文件中读取模型。一些API函数(gurobi_feasrelaxgurobi_relax)也会返回模型。

请注意,model 变量中的所有向量字段必须是密集向量,除了二次约束的线性部分和 INDICATOR 一般约束外,所有矩阵字段必须是稀疏矩阵,所有字符串、名称等都必须是 char 数组。

以下是Gurobi在优化模型时将考虑的所有model参数的字段枚举:

常用字段#

A

线性约束矩阵。

obj (optional)

线性目标向量(在问题陈述中的c向量)。当存在时,您必须为A的每一列指定一个值。当不存在时,每个变量都有一个默认的目标系数0。

sense (optional)

线性约束的意义。允许的值为 =<>。您必须为 A 的每一行指定一个值,或者指定一个单一值以表示所有约束具有相同的意义。当未指定时,所有意义默认为 <

rhs (optional)

线性约束的右侧向量(在问题陈述中的\(b\))。您必须为A的每一行指定一个值。如果未指定,右侧向量默认为零向量。

lb (optional)

下界向量。当存在时,您必须为A的每一列指定一个值。当不存在时,每个变量的默认下界为0。

ub (optional)

上界向量。当存在时,您必须为A的每一列指定一个值。当不存在时,变量具有无限的上界。

vtype (optional)

变量类型。此向量用于捕获变量的完整性约束。允许的值为C(连续)、B(二进制)、I(整数)、S(半连续)或N(半整数)。二进制变量必须为0或1。整数变量可以取指定下限和上限之间的任何整数值。半连续变量可以取指定下限和上限之间的任何值,或零值。半整数变量可以取指定下限和上限之间的任何整数值,或零值。如果存在,您必须为A的每一列指定一个值,或指定一个值以表示所有变量具有相同的类型。如果不存在,则每个变量被视为连续变量。有关变量类型的更多信息,请参阅参考手册的变量部分

modelsense (optional)

优化方向。允许的值为 min(最小化)或 max(最大化)。如果未指定,默认的优化方向是 最小化。

modelname (optional)

模型的名称。该名称会出现在Gurobi日志中,并且在将模型写入文件时也会显示。

objcon (optional)

目标函数中的常数偏移量(在问题陈述中的\(\mathrm{alpha}\))。

varnames (optional)

变量名称向量。一个单元格数组。当存在时,此向量的每个元素定义一个变量的名称。您必须为A的每一列指定一个名称。

constrnames (optional)

约束名称向量。一个单元数组。当存在时,向量的每个元素定义一个约束的名称。您必须为A的每一行指定一个名称。

二次目标和约束字段#

Q (optional)

二次目标矩阵。当存在时,Q 必须是一个方阵,其行数和列数必须与 A 中的列数相等。

quadcon (optional)

二次约束。一个结构体数组。当存在时,quadcon中的每个元素定义一个单独的二次约束:\(x^TQc\, x + q^Tx \le \mathrm{beta}\)

Qc 矩阵必须是一个方阵,其行数和列数必须等于 A 的列数。有两种存储矩阵的方式:(i) 在 model.quadcon(i).Qc 中作为稀疏矩阵存储;(ii) 通过三个密集向量 model.quadcon(i).Qrowmodel.quadcon(i).Qcolmodel.quadcon(i).Qval 以三元组格式指定矩阵,分别表示行索引、列索引和值。

可选的 q 向量定义了约束中的线性项。 它可以是一个为 A 的每一列指定值的密集向量 或一个稀疏向量(稀疏的 n×1 矩阵)。它存储在 model.quadcon(i).q 中。

标量 beta 存储在 model.quadcon(i).rhs 中。它定义了 约束的右侧值。

可选的sense字符串定义了二次约束的意义。允许的值为<=>。如果未提供,默认意义为<。它存储在model.quadcon(i).sense中。

可选的 name 字符串定义了二次约束的名称。它存储在 model.quadcon(i).name 中。

SOS约束字段#

sos (optional)

特殊有序集(SOS)约束。一个结构体数组。当存在时,sos中的每个条目定义一个单独的SOS约束。SOS约束可以是类型1或类型2。SOS约束\(i\)的类型通过model.sos(i).type指定。类型1的SOS约束是一组变量,其中最多一个变量可以取非零值。类型2的SOS约束是一个有序的变量集,其中最多两个变量可以取非零值。如果两个变量取非零值,它们必须在有序集中是连续的。SOS约束的成员通过将其索引放入向量model.sos(i).index来指定。与SOS成员相关的权重在向量model.sos(i).weight中提供。有关SOS约束的详细信息,请参阅参考手册中的SOS约束部分。

多目标字段#

multiobj (optional)

模型的多目标规范。一个结构体数组。当存在时,multiobj中的每个条目定义了多目标问题的一个单一目标。请参考参考手册中的多目标部分,了解更多关于多目标优化的详细信息。每个目标\(i\)可能具有以下字段:

objn

通过model.multiobj(i).objn指定。 这是第i个目标向量。

objcon (optional)

通过 model.multiobj(i).objcon指定。如果提供, 这是第i个目标常数。默认值为0。

priority (optional)

通过 model.multiobj(i).priority指定。如果 提供,此值为该目标的层次优先级。默认值为0。

weight (optional)

通过 model.multiobj(i).weight指定。如果提供, 此值是聚合目标时使用的乘数。默认值为1.0。

reltol (optional)

通过 model.multiobj(i).reltol 指定。如果提供, 此值指定在进行分层多目标优化时的相对目标退化。默认值为0。

abstol (optional)

通过 model.multiobj(i).abstol 指定。如果提供, 此值指定在进行分层多目标优化时的绝对目标退化。默认值为 0。

name (optional)

通过model.multiobj(i).name指定。 如果提供,此字符串指定第i个目标函数的名称。

请注意,当存在多个目标时,优化调用结果中返回的result.objval字段将是一个与model.multiobj长度相同的向量。

多目标模型不能有其他目标。因此,将model.multiobjmodel.objmodel.objconmodel.pwlobjmodel.Q中的任何一个结合使用是错误的。

计算IIS#

在计算不可行模型的不可约不一致子系统(IIS)时,可能会设置变量边界、线性约束、二次约束和一般约束的额外模型属性,以指示相应的实体是否应明确包含在IIS中或从IIS中排除:

iislbforce (optional)

长度等于变量数量的数组。model.iislbforce(i)的值指定了第\(i\)个变量下界的IIS强制属性。

iisubforce (optional)

长度等于变量数量的数组。model.iisubforce(i)的值指定了第\(i\)个变量上界的IIS强制属性。

iisconstrforce (optional)

长度等于约束数量的数组。model.iisconstrforce(i)的值指定了第\(i\)个约束的IIS力属性。

iisqconstrforce (optional)

长度等于二次约束数量的数组。model.iisqconstrforce(i)的值指定了第\(i\)个二次约束的IIS强制属性。

iisgenconstrforce (optional)

长度等于一般约束数量的数组。model.iisgenconstrforce(i)的值指定了第\(i\)个一般约束的IIS力属性。

上述所有五个属性数组的可能值为:\(-1\) 让算法决定,\(0\) 将相应的实体排除在IIS之外,以及\(1\) 始终将相应的实体包含在IIS中。

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

通用约束字段#

下面描述的结构数组用于向模型添加一般约束。有关一般约束的更多详细信息,请参阅参考手册中的一般约束部分。

genconmax (optional)

一个结构体数组。当存在时,genconmax 中的每个条目定义一个形式为 MAX 的通用约束。

\[x[\mathrm{resvar}] = \max\left\{\mathrm{con},x[j]:j\in\mathrm{vars}\right\}\]

每个条目可能包含以下字段:

resvar

通过 model.genconmax(i).resvar指定。约束左侧变量的索引。

vars

通过 model.genconmax(i).vars指定,它是 约束右侧变量的索引向量。

con (optional)

通过model.genconmax(i).con指定。 当存在时,指定左侧的常数。 默认值为\(-\infty\)

name (optional)

通过 model.genconmax(i).name指定。当 存在时,指定第\(i\)个MAX通用约束的名称。

genconmin (optional)

一个结构体数组。当存在时,genconmax 中的每个条目定义一个形式为 MIN 的通用约束。

\[x[\mathrm{resvar}] = \min\left\{\mathrm{con},x[j]:j\in\mathrm{vars}\right\}\]

每个条目可能包含以下字段:

resvar

通过 model.genconmin(i).resvar指定。约束左侧变量的索引。

vars

通过 model.genconmin(i).vars指定,它是 约束右侧变量的索引向量。

con (optional)

通过model.genconmin(i).con指定。 当存在时,指定左侧的常数。 默认值为\(\infty\)

name (optional)

通过 model.genconmin(i).name指定。当 存在时,指定第\(i\)个MIN通用约束的名称。

genconabs (optional)

一个结构体数组。当存在时,genconmax 中的每个条目定义一个形式为

\[x[\mathrm{resvar}] = \vert x[\mathrm{argvar}]\vert\]

每个条目可能包含以下字段:

resvar

通过 model.genconabs(i).resvar指定。约束左侧变量的索引。

argvar

通过 model.genconabs(i).argvar指定。约束右侧变量的索引。

name (optional)

通过 model.genconabs(i).name指定。当 存在时,指定第\(i\)个ABS通用 约束的名称。

genconand (optional)

一个结构体数组。当存在时,genconand 中的每个条目定义一个形式为 AND 的通用约束。

\[x[\mathrm{resvar}] = \mathrm{and}\{x[i]:i\in\mathrm{vars}\}\]

每个条目可能包含以下字段:

resvar

通过 model.genconand(i).resvar指定。约束左侧变量的索引。

vars

通过 model.genconand(i).vars指定,它是 约束右侧变量的索引向量。

name (optional)

通过 model.genconand(i).name指定。当 存在时,指定第\(i\)个AND通用 约束的名称。

genconor (optional)

一个结构体数组。当存在时,genconor 中的每个条目定义一个形式如下的 OR 通用约束

\[x[\mathrm{resvar}] = \mathrm{or}\{x[i]:i\in\mathrm{vars}\}\]

每个条目可能包含以下字段:

resvar

通过 model.genconor(i).resvar指定。约束左侧变量的索引。

vars

通过 model.genconor(i).vars指定,它是 约束右侧变量的索引向量。

name (optional)

通过 model.genconor(i).name指定。当 存在时,指定第\(i\)个OR通用 约束的名称。

genconnorm (optional)

一个结构体数组。当存在时,genconnorm 中的每个条目定义一个 NORM 一般约束,形式为

\[x[\mathrm{resvar}] = \mathrm{norm}(x[i]:i\in\mathrm{vars}, \mathrm{which})\]

每个条目可能包含以下字段:

resvar

通过 model.genconnorm(i).resvar指定。 约束左侧变量的索引。

vars

通过 model.genconnorm(i).vars指定,它是 约束右侧变量的索引向量。

which

通过 model.genconnorm(i).which指定。指定 使用哪种p-范数。可能的值为0、1、2和 \(\infty\)

name (optional)

通过 model.genconnorm(i).name指定。当 存在时,指定第\(i\)个NORM一般 约束的名称。

genconind (optional)

一个结构体数组。当存在时,genconind中的每个条目定义一个INDICATOR一般约束,形式如下

\[x[\mathrm{binvar}] = \mathrm{binval}\Rightarrow\sum\left( x[j]\cdot\mathrm{a}[j]\right) \ \mathrm{sense} \ \mathrm{rhs}\]

此约束规定,当二进制变量 \(x[\mathrm{binvar}]\) 取值 binval 时,线性约束 \(\sum\left(x[\mathrm{vars}[j]]\cdot\mathrm{val}[j]\right) \ \mathrm{sense} \ \mathrm{rhs}\) 必须成立。请注意,sense=<> 之一,分别表示 等式(\(=\))、小于或等于(\(\leq\))或大于 或等于(\(\geq\))约束。每个条目可能包含以下字段:

binvar

通过 model.genconind(i).binvar指定。隐含的二进制变量的索引。

binval

通过 model.genconind(i).binval 指定。该值 用于强制满足以下线性约束的二进制变量。它可以是0或1。

a

通过 model.genconind(i).a 指定。参与隐含线性约束的变量的系数向量。您可以为 A 的每一列指定 a 的值(密集向量)或传递一个稀疏向量(稀疏的 n×1 矩阵)。

sense

通过 model.genconind(i).sense 指定。隐含线性约束的方向。必须是 =, <, 或 > 之一。

rhs

通过 model.genconind(i).rhs指定。 隐含线性约束的右侧值。

name (optional)

通过 model.genconind(i).name指定。当存在时,指定第\(i\)个INDICATOR通用约束的名称。

genconpwl (optional)

一个结构体数组。当存在时,genconpwl中的每个条目定义一个分段线性约束,形式为

\[x[\mathrm{yvar}] = f(x[\mathrm{xvar}])\]

函数 \(f\) 的断点作为参数提供。有关如何定义分段线性函数的详细信息,请参阅 分段线性目标 的描述。

每个条目可能包含以下字段:

xvar

通过 model.genconpwl(i).xvar指定。约束右侧变量的索引。

yvar

通过 model.genconpwl(i).yvar指定。约束左侧变量的索引。

xpts

通过 model.genconpwl(i).xpts指定。 指定定义分段线性函数的点的\(x\)值。必须按非递减顺序排列。

ypts

通过 model.genconpwl(i).ypts指定。 指定定义分段线性函数的点的\(y\)值。

name (optional)

通过 model.genconpwl(i).name指定。当 存在时,指定第\(i\)个 分段线性一般约束的名称。

genconpoly (optional)

一个结构体数组。当存在时,genconpoly中的每个条目定义一个多项式函数约束,形式为

\[x[\mathrm{yvar}] = p_0 x[\mathrm{xvar}]^d + p_1 x[\mathrm{xvar}]^{d-1} + ... + p_{d-1} x[\mathrm{xvar}] + p_{d}\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconpoly(i).xvar指定。约束右侧变量的索引。

yvar

通过 model.genconpoly(i).yvar指定。约束左侧变量的索引。

p

通过 model.genconpoly(i).p指定。指定 多项式函数的系数(从最高次幂的系数开始)。如果\(x^d\)是最高 次幂项,则返回长度为\(d+1\)的密集向量。

name (optional)

通过 model.genconpoly(i).name指定。当 存在时,指定第\(i\)个 多项式函数约束的名称。

funcpieces (optional)

通过 model.genconpoly(i).funcpieces指定。 当存在时,指定第\(i\)个多项式函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconpoly(i).funcpiecelength指定。 当存在时,指定第\(i\)个多项式函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconpoly(i).funcpieceerror指定。 当存在时,指定第\(i\)个多项式函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconpoly(i).funcpieceratio指定。 当存在时,指定第\(i\)个多项式函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconpoly(i).funcnonlinear指定。 当存在时,指定第\(i\)个多项式函数约束的FuncNonlinear属性。

genconexp (optional)

一个结构体数组。当存在时,genconexp中的每个条目定义了形式的自然指数函数约束

\[x[\mathrm{yvar}] = \mathrm{exp}(x[\mathrm{xvar}])\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconexp(i).xvar 指定。约束右侧变量的索引。

yvar

通过 model.genconexp(i).yvar指定。约束左侧变量的索引。

name (optional)

通过 model.genconexp(i).name指定。当 存在时,指定第\(i\)个自然 指数函数约束的名称。

funcpieces (optional)

通过 model.genconexp(i).funcpieces指定。 当存在时,指定第\(i\)个自然指数函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconexp(i).funcpiecelength指定。 当存在时,指定第\(i\)个自然指数函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconexp(i).funcpieceerror指定。 当存在时,指定第\(i\)个自然指数函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconexp(i).funcpieceratio指定。 当存在时,指定第\(i\)个自然指数函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconexp(i).funcnonlinear指定。 当存在时,指定第\(i\)个自然指数函数约束的FuncNonlinear属性。

genconexpa (optional)

一个结构体数组。当存在时,genconexpa 中的每个条目定义一个指数函数约束,形式如下

\[x[\mathrm{yvar}] = \mathrm{a}^{x[\mathrm{xvar}]}\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconexpa(i).xvar指定。约束右侧变量的索引。

yvar

通过 model.genconexpa(i).yvar指定。约束左侧变量的索引。

a

通过 model.genconexpa(i).a指定。指定 指数函数的基数\(a > 0\)

name (optional)

通过 model.genconexpa(i).name指定。当 存在时,指定第\(i\)个 指数函数约束的名称。

funcpieces (optional)

通过 model.genconexpa(i).funcpieces指定。 当存在时,指定第\(i\)个指数函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconexpa(i).funcpiecelength指定。 当存在时,指定第\(i\)个指数函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconexpa(i).funcpieceerror指定。 当存在时,指定第\(i\)个指数函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconexpa(i).funcpieceratio指定。 当存在时,指定第\(i\)个指数函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconexpa(i).funcnonlinear指定。 当存在时,指定第\(i\)个指数函数约束的FuncNonlinear属性。

genconlog (optional)

一个结构体数组。当存在时,genconlog 中的每个条目定义了自然对数函数约束的形式

\[x[\mathrm{yvar}] = \mathrm{log}(x[\mathrm{xvar}])\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconlog(i).xvar 指定。约束右侧变量的索引。

yvar

通过 model.genconlog(i).yvar指定。约束左侧变量的索引。

name (optional)

通过 model.genconlog(i).name指定。当 存在时,指定第\(i\)个自然 对数函数约束的名称。

funcpieces (optional)

通过 model.genconlog(i).funcpieces指定。 当存在时,指定第\(i\)个自然对数函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconlog(i).funcpiecelength指定。 当存在时,指定第\(i\)个自然对数函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconlog(i).funcpieceerror指定。 当存在时,指定第\(i\)个自然对数函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconlog(i).funcpieceratio指定。 当存在时,指定第\(i\)个自然对数函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconlog(i).funcnonlinear指定。 当存在时,指定第\(i\)个自然对数函数约束的FuncNonlinear属性。

genconloga (optional)

一个结构体数组。当存在时,genconloga 中的每个条目定义一个对数函数约束,形式为

\[x[\mathrm{yvar}] = \mathrm{log}(x[\mathrm{xvar}])\setminus\mathrm{log}(a)\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconloga(i).xvar 指定。约束右侧变量的索引。

yvar

通过 model.genconloga(i).yvar 指定。约束左侧变量的索引。

a

通过 model.genconloga(i).a指定。指定 对数函数的底数\(a > 0\)

name (optional)

通过 model.genconloga(i).name指定。当 存在时,指定第\(i\)个 对数函数约束的名称。

funcpieces (optional)

通过 model.genconloga(i).funcpieces指定。 当存在时,指定第\(i\)个对数函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconloga(i).funcpiecelength指定。 当存在时,指定第\(i\)个对数函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconloga(i).funcpieceerror指定。 当存在时,指定第\(i\)个对数函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconloga(i).funcpieceratio指定。 当存在时,指定第\(i\)个对数函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconloga(i).funcnonlinear指定。 当存在时,指定第\(i\)个对数函数约束的FuncNonlinear属性。

genconlogistic (optional)

一个结构体数组。当存在时,genconlog 中的每个条目定义了以下形式的逻辑函数约束

\[x[\mathrm{yvar}] = 1 / (1 + \mathrm{exp}(-x[\mathrm{xvar}]))\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconlogistic(i).xvar指定。 约束右侧变量的索引。

yvar

通过 model.genconlogistic(i).yvar指定。 约束左侧变量的索引。

name (optional)

通过 model.genconlogistic(i).name指定。 当存在时,指定第\(i\)个 逻辑函数约束的名称。

funcpieces (optional)

通过 model.genconlogistic(i).funcpieces指定。 当存在时,指定第\(i\)个逻辑函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconlogistic(i).funcpiecelength指定。 当存在时,指定第\(i\)个逻辑函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconlogistic(i).funcpieceerror指定。 当存在时,指定第\(i\)个逻辑函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconlogistic(i).funcpieceratio指定。 当存在时,指定第\(i\)个逻辑函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconlogistic(i).funcnonlinear指定。 当存在时,指定第\(i\)个逻辑函数约束的FuncNonlinear属性。

genconpow (optional)

一个结构体数组。当存在时,genconpow 中的每个条目定义一个幂函数约束,形式为

\[x[\mathrm{yvar}] = x[\mathrm{xvar}]^\mathrm{a}\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconpow(i).xvar 指定。约束右侧变量的索引。

yvar

通过 model.genconpow(i).yvar指定。约束左侧变量的索引。

a

通过 model.genconpow(i).a 指定。指定 幂函数的指数。

name (optional)

通过 model.genconpow(i).name指定。当 存在时,指定第\(i\)个幂函数 约束的名称。

funcpieces (optional)

通过 model.genconpow(i).funcpieces指定。 当存在时,指定第\(i\)个幂函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconpow(i).funcpiecelength指定。 当存在时,指定第\(i\)个幂函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconpow(i).funcpieceerror指定。 当存在时,指定第\(i\)个幂函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconpow(i).funcpieceratio指定。 当存在时,指定第\(i\)个幂函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconpow(i).funcnonlinear指定。 当存在时,指定第\(i\)个幂函数约束的FuncNonlinear属性。

genconsin (optional)

一个结构体数组。当存在时,genconsin 中的每个条目定义了形式如下的正弦函数约束

\[x[\mathrm{yvar}] = \mathrm{sin}(x[\mathrm{xvar}])\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconsin(i).xvar 指定。变量在约束右侧的索引。

yvar

通过 model.genconsin(i).yvar 指定。约束左侧变量的索引。

name (optional)

通过 model.genconsin(i).name指定。当 存在时,指定第\(i\)个正弦函数 约束的名称。

funcpieces (optional)

通过 model.genconsin(i).funcpieces指定。 当存在时,指定第\(i\)个正弦函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconsin(i).funcpiecelength指定。 当存在时,指定第\(i\)个正弦函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconsin(i).funcpieceerror指定。 当存在时,指定第\(i\)个正弦函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconsin(i).funcpieceratio指定。 当存在时,指定第\(i\)个正弦函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconsin(i).funcnonlinear指定。 当存在时,指定第\(i\)个正弦函数约束的FuncNonlinear属性。

genconcos (optional)

一个结构体数组。当存在时,genconcos 中的每个条目定义了如下形式的余弦函数约束

\[x[\mathrm{yvar}] = \mathrm{cos}(x[\mathrm{xvar}])\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.genconcos(i).xvar指定。约束右侧变量的索引。

yvar

通过 model.genconcos(i).yvar指定。约束左侧变量的索引。

name (optional)

通过 model.genconcos(i).name指定。当存在时,指定第\(i\)个余弦函数约束的名称。

funcpieces (optional)

通过 model.genconcos(i).funcpieces指定。 当存在时,指定第\(i\)个余弦函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.genconcos(i).funcpiecelength指定。 当存在时,指定第\(i\)个余弦函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.genconcos(i).funcpieceerror指定。 当存在时,指定第\(i\)个余弦函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.genconcos(i).funcpieceratio指定。 当存在时,指定第\(i\)个余弦函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.genconcos(i).funcnonlinear指定。 当存在时,指定第\(i\)个余弦函数约束的FuncNonlinear属性。

gencontan (optional)

一个结构体数组。当存在时,gencontan 中的每个条目定义了形式的切线函数约束。

\[x[\mathrm{yvar}] = \mathrm{tan}(x[\mathrm{xvar}])\]

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

每个条目可能包含以下字段:

xvar

通过 model.gencontan(i).xvar指定。变量在约束右侧的索引。

yvar

通过 model.gencontan(i).yvar指定。约束左侧变量的索引。

name (optional)

通过 model.gencontan(i).name指定。当 存在时,指定第\(i\)个切线函数 约束的名称。

funcpieces (optional)

通过 model.gencontan(i).funcpieces指定。 当存在时,指定第\(i\)个切线函数约束的FuncPieces属性。

funcpiecelength (optional)

通过 model.gencontan(i).funcpiecelength指定。 当存在时,指定第\(i\)个切线函数约束的FuncPieceLength属性。

funcpieceerror (optional)

通过 model.gencontan(i).funcpieceerror指定。 当存在时,指定第\(i\)个切线函数约束的FuncPieceError属性。

funcpieceratio (optional)

通过 model.gencontan(i).funcpieceratio指定。 当存在时,指定第\(i\)个切线函数约束的FuncPieceRatio属性。

funcnonlinear (optional)

通过 model.gencontan(i).funcnonlinear指定。 当存在时,指定第\(i\)个切线函数约束的FuncNonlinear属性。

高级字段#

pwlobj (optional)

分段线性目标函数。一个结构体数组。当存在时,pwlobj中的每个条目为单个变量定义了一个分段线性目标函数。定义目标函数的变量的索引存储在model.pwlobj(i).var中。定义分段线性函数的点的\(x\)值存储在model.pwlobj(i).x中。\(x\)向量中的值必须是非递减的。定义分段线性函数的点的\(y\)值存储在model.pwlobj(i).y中。

vbasis (optional)

变量基础状态向量。用于为单纯形算法提供一个高级的起点。通常你不需要关心这个向量的内容,而是简单地将它从前一次优化运行的结果传递到后续运行的输入中。当存在时,你必须为A的每一列指定一个值。

cbasis (optional)

约束基础状态向量。用于为单纯形算法提供一个高级起点。详情请参阅vbasis描述。当存在时,您必须为A的每一行指定一个值。

varhintval (optional)

一组用户提示。如果您知道某个变量在MIP模型的高质量解决方案中可能取特定值,您可以提供该值作为提示。您还可以(可选)通过varhintpri字段提供关于您对提示的置信度的信息。如果存在,您必须为A的每一列指定一个值。对于没有此类提示的变量,请使用nan值。有关更多详细信息,请参阅参考手册中的属性部分。

varhintpri (optional)

用户提示的优先级。通过varhintval结构体提供变量提示后,您还可以选择提供提示优先级,以表明您对提示的信心水平。如果存在,您必须为A的每一列指定一个值。更多详情,请参阅参考手册中的属性部分。

branchpriority (optional)

变量分支优先级。如果存在,此属性的值将用作在MIP搜索期间选择分支的分数变量的主要标准。具有较大值的变量总是优先于具有较小值的变量。使用标准分支变量选择标准来打破平局。如果存在,您必须为A的每一列指定一个值。

pstart (optional)

当前的单纯形起始向量。如果您为模型中的每个变量设置了pstart值,并为每个约束设置了dstart值,那么单纯形将使用这些值来计算一个热启动基。更多详情,请参考参考手册中的属性部分。

dstart (optional)

当前的单纯形起始向量。如果您为模型中的每个线性约束设置了dstart值,并为每个变量设置了pstart值,那么单纯形将使用这些值来计算热启动基。有关更多详细信息,请参阅参考手册中的属性部分。

lazy (optional)

确定线性约束是否被视为惰性约束。如果存在,您必须为A的每一行指定一个值。有关更多详细信息,请参阅参考手册中的属性部分。

start (optional)

MIP起始向量。MIP求解器将尝试从此向量构建初始解。当存在时,您必须为每个变量指定一个起始值。请注意,您可以将变量的起始值设置为nan,这会指示MIP求解器尝试为该变量填充一个值。

partition (optional)

MIP变量分区号,用于MIP解决方案改进启发式算法。如果存在,您必须为A的每个变量指定一个值。有关更多详细信息,请参阅参考手册中的属性部分。

如果上述列出的任何必需组件缺失,gurobi() 函数将返回错误。

下面是一个演示如何构建简单优化模型的示例:

model.A = sparse([1 2 3; 1 1 0]);
model.obj = [1 1 1];
model.modelsense = 'max';
model.rhs = [4; 1];
model.sense = '<>'

params参数#

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

参数更改通过使用具有多个fieldsstruct变量来指定,该变量作为参数传递给适当的Gurobi函数(例如,gurobi)。每个字段的名称必须是Gurobi参数的名称,关联的值应该是该参数的期望值。您可以在参考手册中找到可用Gurobi参数的完整列表。

要创建一个结构体,将Gurobi的 方法参数设置为2,并将 结果文件参数设置为model.mps, 你可以执行以下操作:

params params.Method = 2;
params.ResultFile = 'model.mps';

我们应该多说一点关于结果文件参数的内容。 如果设置了此参数,最终传递给Gurobi的优化模型也将输出到指定的文件中。文件名 后缀应该是.mps, .rew, .lp, .rlp, .dua, .dlp, .ilp, 或 .opb之一,以指示所需的文件 格式(有关Gurobi文件格式的详细信息,请参阅参考手册中的文件格式部分)。

params 结构体也可用于设置特定于许可证的参数,这些参数定义了要使用的计算环境。接下来我们将讨论两种最常见的用例,并再次参考参考手册中所有可用参数的集合。

使用计算服务器许可证#

Gurobi 计算服务器允许您将优化任务卸载到远程服务器。服务器被组织成集群。通过提供集群中任何节点的名称,您的任务将自动发送到集群中负载最轻的节点。如果所有节点都已满负荷,您的任务将被放入队列,并在有可用容量时继续进行。您可以在Gurobi 远程服务参考手册中找到有关 Gurobi 计算服务器的更多信息。最常用的参数如下。

ComputeServer

一个计算服务器。您可以使用其名称或IP地址来引用该服务器。如果您使用的是非默认端口,服务器名称后应跟随端口号(例如,server1:61000)。

ServerPassword (optional)

计算服务器集群上的用户密码。请从您的计算服务器管理员处获取此密码。

CSPriority (optional)

作业的优先级。优先级必须在-100到100之间,默认值为0(按照惯例)。较高优先级的作业会优先从服务器作业队列中被选择。优先级为100的作业会立即运行,绕过作业队列并忽略服务器上的作业限制。您应该谨慎使用优先级为100的作业,因为它们可能会严重超载服务器,导致作业失败,在极端情况下可能会导致服务器崩溃。

CSRouter (optional)

计算服务器集群的路由器。路由器可用于提高计算服务器部署的鲁棒性。您可以使用其名称或IP地址来引用路由器。典型的远程服务部署不会使用路由器,因此通常不需要设置此项。

CSTLSinsecure (optional)

指示是否在TLS(传输层安全)中使用不安全模式。除非服务器管理员另有指示,否则请保持默认值为0。

以下是如何使用params参数连接到计算服务器的示例:

params params.ComputeServer = 'server1.mycompany.com:61000';
params.CSPriority = 5;

使用Gurobi即时云许可证#

Gurobi Instant Cloud 允许您将优化任务卸载到云端的 Gurobi 计算服务器上。如果已经有合适的机器在运行,任务将在该机器上运行。否则,它将自动启动一台新机器。请注意,启动新机器可能需要几分钟时间。您可以在参考手册中找到有关 Gurobi Instant Cloud 服务的更多信息。最常用的参数如下。

CloudAccessID

您的Gurobi Instant Cloud许可证的访问ID。这可以从Gurobi Instant Cloud网站上获取。当与您的CloudSecretKey结合使用时,这将允许您启动Instant Cloud实例并向其提交作业。

CloudSecretKey

您的Gurobi Instant Cloud许可证的密钥。这可以从Gurobi Instant Cloud网站上获取。当与您的CloudAccessID结合使用时,这将允许您启动Instant Cloud实例并向其提交作业。请注意,您应保持您的密钥私密。

CloudPool (optional)

机器池。机器池允许您在Instant Cloud网站上创建固定配置(捕获诸如机器类型、地理区域等信息),然后从客户端程序启动和共享机器,而无需每次启动机器时重新声明配置信息。如果未提供,您的作业将在与您的云许可证关联的默认池中启动。

CSPriority (optional)

作业的优先级。优先级必须在-100到100之间,默认值为0(按照惯例)。较高优先级的作业会优先从服务器作业队列中被选择。优先级为100的作业会立即运行,绕过作业队列并忽略服务器上的作业限制。您应该谨慎使用优先级为100的作业,因为它们可能会严重超载服务器,导致作业失败,在极端情况下可能会导致服务器崩溃。

这里是一个如何使用params参数启动Gurobi即时云实例的示例:

params params.CloudAccessID = '3d1ecef9-dfad-eff4-b3fa';
params.CloudSecretKey = 'ae6L23alJe3+fas';