模型参数

模型参数

模型变量存储优化问题(如问题声明)。

模型可以以多种方式构建。您可以填充相应的字段模型结构使用标准MATLAB例程。您还可以使用文件读取模型gurobi_read..一些API函数(gurobi_feasrelax.gurobi_relax.)也返回模型。

请注意,所有矢量字段模型变量必须是密集的向量,所有矩阵字段必须是稀疏矩阵,并且所有字符串,名称等必须是char阵列。

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

常用的字段:

一个
线性约束矩阵。

obj(可选)
线性物镜矢量(c矢量在问题声明)。的每个列都必须指定一个值一个.当不存在时,每个变量的默认客观系数为0。

意义(可选)
线性约束的意义。允许的值是'=''<',或'>'.您必须为每行指定一个值一个,或一个单一值来指定所有约束具有相同的意义。当不在场的时候,所有的感觉都会默认'<'

园艺学会(可选)
线性约束的右侧向量(< span > < / span > b < span >美元< / span >在里面问题声明)。您必须为每行指定一个值一个.当不存在时,右侧向量默认为零向量。

LB(可选)
下界向量。的每个列都必须指定一个值一个.不存在的情况下,每个变量具有0的默认下限0。

乌兰巴托(可选)
上界向量。的每个列都必须指定一个值一个.当不存在时,变量具有无限的上限。

VTYPE(可选)
变量类型。该向量用于捕获变量完整性约束。允许的值是“C”(连续)“B”(二进制),'一世'(整数),“年代”(半连续),或“N”(semi-integer)。二进制变量必须是0或1。整型变量可以在指定的下界和上界之间取任何整型值。半连续变量可以取指定的下界和上界之间的任何值,或者取0的值。半整型变量可以取指定下界和上界之间的任何整型值,也可以取0的值。的每个列都必须指定一个值一个,或单个值,以指定所有变量具有相同的类型。当不存在时,每个变量都被视为连续的。指本节有关变量类型的更多信息。

modelsense(可选)
优化意义。允许的值是“最小值”(减少)或'最大限度'(最大化)。缺席时,默认的优化感觉是最小化的。

modelname(可选)
模型的名称。该名称出现在Gurobi日志中,以及将模型写入文件时。

objcon(可选)
目标函数中的恒定偏移量( < span > < /美元跨度> \ mathrm{α}< span > < / span >美元在里面问题声明)。

varnames(可选)
变量名为vector。一个细胞数组。这个向量的每个元素都定义了一个变量的名称。的每个列必须指定名称一个

constrames(可选)
约束命名为vector。一个细胞数组。当出现时,vector的每个元素都定义了约束的名称。的每一行都必须指定一个名称一个

二次目标和约束字段:

q(可选)
二次目标矩阵。当礼物,必须是一个方形矩阵,其行和列计数等于列的数量一个

Quadcon(可选)
二次约束。一个结构体数组。当存在时,每个元素quadcon定义单个二次约束: <span> $ </ span> x ^ tqc x + q ^ tx \ le \ mathrm {beta} <span> $ </ span>

质量控制矩阵必须是正方形矩阵,其行和列计数等于列数一个.它被存储在model.quadcon .Qc(我)

向量定义了约束条件中的线性项。的每个列必须指定一个值一个.它被存储在model.quadcon q(我)

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

可选感觉字符串定义了二次混凝器的感觉。允许的值是'<''='或者'>'.如果不存在,默认感觉是'<'.它被存储在model.quadcon .sense(我)

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

SOS约束字段:

SOS(可选)
特殊有序集(SOS)约束。一个结构体数组。当出现时,每个条目SOS.定义了一个SOS约束。SOS约束可以是类型1或2。SOS约束的类型<span> $ </ span> i <span> $ </ span>通过指定model.sos .type(我).类型1 SOS约束是一组变量,其中,该组中的大多数变量可以采用除零之外的值。类型2 SOS约束是一个有序的变量集,其中该组中的大多数变量可以采用非零值。如果两个取非零值,则它们必须在有序集中连续。SOS约束的成员通过将其指数放在向量中来指定model.sos .index(我).向量中提供与SOS成员相关联的权重model.sos .weight(我).请参阅本节参阅SOS约束的详情。

多目标字段:

multiobj(可选)
模型的多目标规范。一个结构体数组。当出现时,每个条目multiob.定义多目标问题中的单个目标。请参阅多个目标更多关于多目标优化的细节。每一个目标<span> $ </ span> i <span> $ </ span>可能有以下字段:
objn
指定Viamodel.multiobj(i).objn.这是th目标向量。

objcon(可选)
指定Viamodel.multiobj(i).objcon.如果提供,这是th目标不变。缺省值为0。

优先级(可选)
指定Viamodel.multiobj(i).priority.如果提供的话,这个值是分层优先实现这一目标。缺省值为0。

重量(可选)
指定Viamodel.multiobj .weight(我).如果提供此值,则该值是聚合目标时使用的乘数。默认值为1.0。

Reltol(可选)
指定Viamodel.multiobj .reltol(我).如果提供,该值指定进行分层多目标优化时的相对目标退化。缺省值为0。

abstol(可选)
指定Viamodel.multiobj(i).abstol.如果提供,则该值指定进行分层多目标优化时的绝对目标退化。缺省值为0。

名称(可选)
指定Viamodel.multiobj(我). name.如果提供的话,此字符串指定的名称- 客观函数。

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

多目标模型不能有其他目标。因此,结合model.multiobj与任何的model.objmodel.objcon.model.pwlobj,或模型是一个错误。

一般约束字段:

下面描述的结构阵列用于添加一般约束到一个模型。

数学规划传统上定义了一组基本约束类型:变量约束、线性约束、二次约束、完整性约束和SOS约束。这些通常由底层求解器直接处理(尽管并非总是如此),并且是整个算法的基础。手机万博登录

Gurobi接受许多额外的约束类型,我们统称为一般约束.这些通常是由求解器直接处理。手机万博登录相反,它们由预定转换为数学上等同的约束(和变量),从上面列出的基本类型中选择。为用户提供这些总约束。如果此类约束出现在您的模型中,但如果您愿意使用基本约束类型更愿意为自己重新格式化它们,您当然可以这样做。但请注意,Gurobi有时可以利用模型中其他约束中包含的信息来构建比您可能创建的更有效的配方。

下降的附加约束类型一般的约束伞是:

  • MAX (genconmax):设置一个决策变量等于一组决策变量中的最大值
  • MIN (genconmin):设置一个决策变量等于一组决策变量中的最小值
  • ABS (genconabs):设置一个决策变量等于另一个决策变量的绝对值
  • AND (genconand):当且仅当一组二进制决策变量都等于1时,将一个二进制变量设为1
  • 或(genconor):如果只有在一组二进制判决变量中的至少一个变量等于一个,则设置等于​​1的二进制变量
  • 指示符(genconind):当一个给定的二进制变量取某个值时,则必须满足给定的线性约束

请参阅本节有关一般约束的更多细节。

genconmax(可选)
一个结构体数组。当出现时,每个条目genconmax定义表单的最大一般约束

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

每个条目可能有以下字段:
resvar
指定Viamodel.genconmax .resvar(我).约束左侧变量的索引。
var
指定Viamodel.genconmax(i).vars,它是一个向量的指标的变量在右边的约束。
反对(可选)
指定Viamodel.genconmax .con(我).如果存在,则指定左边的常量。默认值是<span> $ </ span>  -  \ idty <span> $ </ span>
名称(可选)
指定Viamodel.genconmax(我). name.对象的名称<span> $ </ span> i <span> $ </ span>-th MAX一般约束。

genconmin(可选)
一个结构体数组。当出现时,每个条目genconmax定义表单的最小一般约束

x[\ \开始{displaymath} mathrm {resvar}] = \敏\左\ {\ mathrm {con}, x [j]: j \ \ mathrm {var} \右\}\ {displaymath}结束

每个条目可能有以下字段:
resvar
指定Viamodel.genconmin .resvar(我).约束左侧变量的索引。
var
指定Viamodel.genconmin .vars(我),它是一个向量的指标的变量在右边的约束。
反对(可选)
指定Viamodel.genconmin(i).con.如果存在,则指定左边的常量。默认值是<span> $ </ span> \ idty <span> $ </ span>
名称(可选)
指定Viamodel.genconmin(我). name.对象的名称<span> $ </ span> i <span> $ </ span>-第th最小一般约束。

Genconabs(可选)
一个结构体数组。当出现时,每个条目genconmax定义了窗体的ABS一般约束

\begin{displaymath}x[\ mathm {resvar}] = \vert x[\ mathm {argvar}]\vert\end{displaymath}

每个条目可能有以下字段:
resvar
指定Viamodel.genconabs .resvar(我).约束左侧变量的索引。
argvar
指定Viamodel.genconabs(i).argvar.约束右边的变量的索引。
名称(可选)
指定Viamodel.genconabs(i).name.对象的名称<span> $ </ span> i <span> $ </ span>-th abs一般约束。

genconand(可选)
一个结构体数组。当出现时,每个条目哥伦兰定义了表单的AND一般约束

x[\ \开始{displaymath} mathrm {resvar}] = \ mathrm{和}\ {x[我]:我\ \ mathrm {var} \} \ {displaymath}结束

每个条目可能有以下字段:
resvar
指定Viamodel.genconand(i).resvar.约束左侧变量的索引。
var
指定Viamodel.genconand(i).vars,它是一个向量的指标的变量在右边的约束。
名称(可选)
指定Viamodel.genconand(i).name.对象的名称<span> $ </ span> i <span> $ </ span>- 和一般约束。

Genconor(可选)
一个结构体数组。当出现时,每个条目genconor定义表单的或一般约束

\ begin {displaymath} x [\ mathrm {resvar}] = \ mathrm {或} \ {x [i]:i \ in \ mathrm {vars} \} \ end {displaymath}

每个条目可能有以下字段:
resvar
指定Viamodel.genconor(i).resvar.约束左侧变量的索引。
var
指定Viamodel.genconor .vars(我),它是一个向量的指标的变量在右边的约束。
名称(可选)
指定Viamodel.genconor(我). name.对象的名称<span> $ </ span> i <span> $ </ span>- 或一般约束。

Genconind(可选)
一个结构体数组。当出现时,每个条目g定义表单的INDICATOR通用约束

\begin{displaymath}x[\mathrm{binvar}] = \mathrm{binvar} \右箭头\和\左(x\M... ...MRalternative{(j)}{[[j]]}\右)\mathrm{sense} \mathrm{rhs}\end{displaymath}

此约束指示当二进制变量时 <span> $ </ span> x [\ mathrm {binvar}] <span> $ </ span>需要的值宾Val.然后是线性约束 < span > < / span > \总和\离开美元(x [\ mathrm {var} \ MRalternative {(j)} {[[j]]}] \ cdot \ mathrm {val} \ MRalternative {(j)} {[[j]]} \) \ mathrm{感觉}\ mathrm {rhs} < span > < / span >美元必须持有。注意感觉是其中之一'=''<',或'>'平等(< span > < / span > = < span >美元< / span >),小于或等于(< span > < / span > \ leq美元美元< span > < / span >)或大于或等于(< span > < /美元跨度> \组< span > < / span >美元)约束。每个条目可能有以下字段:
宾VAR.
指定Viamodel.genconind .binvar(我).隐含二进制变量的索引。
宾Val.
指定Viamodel.genconind .binval(我).强制满足以下线性约束的二进制变量的值。它可以是0或1。
一个
指定Viamodel.genconind(我)。.参与隐含线性约束的变量系数的向量。的值一个对于每列一个
感觉
指定Viamodel.genconind .sense(我).隐含线性约束的感觉。必须是其中一个'=''<',或'>'
园艺学会
指定Viamodel.genconind(i).rhs.隐含线性约束的右侧值。
名称(可选)
指定Viamodel.genconind(我). name.对象的名称<span> $ </ span> i <span> $ </ span>-th指标一般约束。

先进的领域:

pwlobj(可选)
分段 - 线性目标功能。一个结构体数组。当出现时,每个条目pwlobj定义单个变量的分段线性目标函数。定义了目标函数的变量的索引model.pwlobj(i).var.的< span > < /美元跨度> x < span > < / span >美元定义分段 - 线性函数的点的值存储在
model.pwlobj(我)方式.价值< span > < /美元跨度> x < span > < / span >美元矢量必须是非减少的顺序。的<span> $ </ span> y <span> $ </ span>定义分段 - 线性函数的点的值存储在model.pwlobj .y(我)

vbasis(可选)
变量基状态向量。用于为单纯形算法提供一个先进的起点。您通常不会关心这个向量的内容,而是简单地将它从上一次优化运行的结果传递到后续运行的输入。的每个列都必须指定一个值一个

CBASIS(可选)
约束基状态向量。用于为单纯形算法提供一个先进的起点。咨询VBASIS.详细说明。当存在时,您必须为每行指定一个值一个

varhintval(可选)
一组用户提示。如果您知道在MIP模型的高质量解决方案中,某个变量可能使用某个特定的值,那么您可以提供该值作为提示。属性的提示中还可以(可选地)提供关于信心级别的信息varhintpri字段。如果存在,则必须为每列指定一个值一个.使用价值对于没有已知这种提示的变量。有关详情,请参阅VarHitVal属性文档。manbet体育手机客户端

varhintpri(可选)
用户提示的优先级。的变量提示之后varhintval.结构,您可以选择选择提示优先级,以指示您对暗示的信心水平。如果存在,则必须为每列指定一个值一个.有关详情,请参阅VarHintPri属性文档。manbet体育手机客户端

分支资产(可选)
可变分支优先级。如果存在,则此属性的值被用作用于在MIP搜索期间选择用于分支的分数变量的主要标准。具有较大值的变量始终优先于具有较小值的那些。使用标准分支变量选择标准破坏关系。如果存在,则必须为每列指定一个值一个

pstart(可选)
当前的单纯形开始向量。如果你设置了pstart模型和中每个变量的值DSTART.每个约束的值,然后单纯形将使用这些值来计算一个热启动基。有关详情,请参阅PStart属性文档。manbet体育手机客户端

dstart(可选)
当前的单纯形开始向量。如果你设置了DSTART.模型中每个线性约束的值pstart每个变量的值,那么Simplex将使用这些值来计算温暖的开始。有关详情,请参阅DStart属性文档。manbet体育手机客户端

懒惰(可选)
确定线性约束是否被视为懒惰的约束.如果存在,则必须为每行指定一个值一个.有关详情,请参阅懒惰的属性文档。manbet体育手机客户端

开始(可选)
MIP开始矢量。MIP求解器将尝手机万博登录试从此向量中构建初始解决方案。存在时,您必须为每个变量指定启动值。请注意,您可以将变量的启动值设置为,它指示MIP求解器尝试为该变量填充一个值。手机万博登录

分区(可选)
MIP变量分区号,用于MIP解决方案改进启发式。如果存在,则必须为的每个变量指定一个值一个.有关详情,请参阅分区属性文档。manbet体育手机客户端

如果上面列出的任何强制性组件缺失,则gurobi ()函数将返回错误。

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


模型.A =稀疏([1 2 3; 1 1 0]);
model.obj = [1 1 1];
模型。模型感觉= 'max';
模型。园艺学会= [4; 1];
model.sense ='<>'