MATLAB API - 常用参数#
Gurobi MATLAB 接口中最常见的参数是 MATLAB struct
变量,每个变量都有多个字段。其中一些字段是可选的。请注意,您可以通过在变量名末尾添加句点,后跟字段名称来引用结构变量的字段。例如,model.A
指的是变量 model
的字段 A
。
模型参数#
模型变量存储优化问题(如问题描述中所述)。
模型可以通过多种方式构建。您可以使用标准的MATLAB例程填充model
结构体的适当字段。您还可以使用gurobi_read
从文件中读取模型。一些API函数(gurobi_feasrelax
和gurobi_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).Qrow
、model.quadcon(i).Qcol
和model.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.multiobj
与model.obj
、model.objcon
、model.pwlobj
或model.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}\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}])\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}]}\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}])\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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)\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}]))\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}])\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}])\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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}])\]函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPieces、FuncPieceError、FuncPieceLength 和 FuncPieceRatio。或者,通过设置属性 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 参数来控制。
参数更改通过使用具有多个fields
的struct
变量来指定,该变量作为参数传递给适当的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';