模型参数
模型参数
模型变量存储优化问题(如所描述的问题声明)。模型可以以多种方式。你可以填充适当的字段模型结构使用标准的MATLAB程序。你也可以从文件中读取一个模型,使用gurobi_read。一些API函数(gurobi_feasrelax和gurobi_relax)也回归模型。
注意所有向量场中模型变量必须密集的向量,矩阵所有字段必须稀疏矩阵,和所有字符串,名称等字符数组。
以下是所有字段的枚举模型认为Gurobi时会考虑优化模型:
常用的字段:
- 一个
- 线性约束矩阵。
- obj(可选)
- (线性目标向量c向量的问题声明)。当礼物时,你必须为每一列指定一个值一个。当缺席,每个变量都有一个默认的目标系数为0。
- 意义(可选)
- 感官的线性约束。允许的值是“=”,“<”,或“>”。您必须指定一个值为每一行一个或一个值来指定所有约束都有相同的意义。当缺席,所有感官默认“<”。
- 园艺学会(可选)
- 右边的向量线性约束(在问题声明)。您必须指定一个值为每一行一个。当缺席,右边向量默认为零向量。
- 磅(可选)
- 下界向量。当礼物时,你必须为每一列指定一个值一个。当缺席,每个变量都有一个默认的下界为0。
- 乌兰巴托(可选)
- 上界向量。当礼物时,你必须为每一列指定一个值一个。在缺席时,变量具有无限的上界。
- vtype(可选)
- 变量类型。这个向量是用来捕获变量完整性约束。允许的值是“C”(连续)“B”(二进制),“我”(整数),“年代”(半连续),或“N”(semi-integer)。二进制变量必须是0或1。整型变量可以采取任何指定的上下边界之间的整数值。之间的半连续变量可以取任何值指定的上下边界,或值为零。Semi-integer变量之间可以采取任何整数值指定的上下边界,或值为零。当礼物时,你必须为每一列指定一个值一个或一个值来指定所有变量具有相同的类型。当缺席,每个变量看作是连续的。指本节有关变量类型的更多信息。
- modelsense(可选)
- 优化的意义。允许的值是“最小值”(减少)或“马克斯”(最大化)。缺席时,默认的优化意义上是最小化。
- modelname(可选)
- 该模型的名称。这个名字出现在Gurobi日志,当写一个模型到一个文件。
- objcon(可选)
- 目标函数的常数抵消( 在问题声明)。
- varnames(可选)
- 变量名向量。一个细胞数组。当礼物,这个向量的每个元素定义了一个变量的名称。您必须指定一个名称为每个列的一个。
- constrnames(可选)
- 约束名称向量。一个细胞数组。当礼物,向量的每个元素定义了一个约束的名称。您必须指定一个名称为每一行一个。
二次目标和约束字段:
- 问(可选)
- 二次目标矩阵。当礼物,问必须一个方阵的行和列数等于列数一个。
- quadcon(可选)
-
二次约束。一个结构体数组。当礼物,每个元素quadcon定义一个二次约束:
。
的质量控制矩阵必须是一个方阵的行和列数等于列数的一个。它存储在model.quadcon .Qc(我)。
的问向量定义了线性条件的约束。它必须指定每一列的值一个。它存储在model.quadcon q(我)。
标量β存储在model.quadcon .rhs(我)。它定义了右边的值约束。
可选感觉字符串定义了二次constrint的感觉。允许的值是“<”,“=”或“>”。如果不存在,则默认的感觉“<”。它存储在model.quadcon .sense(我)。
可选的名字字符串定义二次约束的名称。它存储在model.quadcon(我). name。
SOS约束字段:
- sos(可选)
- 特殊的有序集(SOS)的约束。一个结构体数组。当礼物,每个条目紧急求救信号定义了一个单一的SOS约束。SOS约束可以1型或2。SOS约束的类型通过指定model.sos .type(我)。1型SOS约束是一组变量最多一个变量的设置可能需要一个非零值。2型SOS约束是一个有序集合的变量最多两个变量的设置可能需要非零值。如果两个非零值,它们必须是连续的有序集。SOS的成员将指标约束指定的向量model.sos .index(我)。重量与SOS成员提供了向量model.sos .weight(我)。请参考本节有关SOS约束。
多目标字段:
- multiobj(可选)
-
多目标模型规范。一个结构体数组。当礼物,每个条目multiobj定义了一个单一目标的多目标问题。请参考多个目标部分多目标优化的更多细节。每一个目标可能有以下字段:
- objn
- 通过指定model.multiobj .objn(我)。这是我th目标向量。
- objcon(可选)
- 通过指定model.multiobj .objcon(我)。如果提供,这是我th目标不变。默认值是0。
- 优先级(可选)
- 通过指定model.multiobj .priority(我)。如果提供,此值分层这一目标的优先事项。默认值是0。
- 重量(可选)
- 通过指定model.multiobj .weight(我)。如果提供,这个值是乘数时使用聚合目标。默认值是1.0。
- reltol(可选)
- 通过指定model.multiobj .reltol(我)。如果提供,这个值指定了相对客观的退化时分层多目标优化。默认值是0。
- abstol(可选)
- 通过指定model.multiobj .abstol(我)。如果提供,这个值指定的绝对客观退化时分层多目标优化。默认值是0。
- 名称(可选)
- 通过指定model.multiobj(我). name。如果提供,这个字符串指定的名称我th目标函数。
注意,当多个目标存在时,result.objval返回的字段在一个优化调用的结果将是一个向量的长度相同model.multiobj。
不能有其它目标的多目标模型。因此,结合model.multiobj与任何的model.obj,model.objcon,model.pwlobj,或model.Q是一个错误。
一般约束字段:
下面描述的结构体数组是用来添加一般的约束一个模型。
数学规划传统上定义的一组基本约束类型:变量绑定约束线性约束,二次约束、完整性约束和SOS约束。这些通常是由底层直接解算器治疗(虽然不总是),整个算法的基础。手机万博登录
Gurobi接受许多额外的约束类型,我们集体称为一般的约束。这些都是典型的不由解算器直接治疗。手机万博登录相反,它们是通过presolve变成数学等效约束集(变量),从上面列出的基本类型中选择。这些一般约束是为了方便用户提供。如果这样的限制出现在您的模型,但如果你喜欢将自己使用的基本约束类型相反,你当然可以这样做。然而,请注意,Gurobi有时可以利用信息包含在其他模型中约束来构建一个更高效的配方比你可以创建。
额外的约束类型,这种概念一般的约束伞是:
- 马克斯(genconmax):设置一个决策变量等于从一组决策变量中最大值
- 分钟(genconmin):设置一个决策变量等于从一组决策变量中最小值
- ABS (genconabs):设置一个决策变量等于其他决策变量的绝对值
- 和(genconand):设置一个二进制变量等于1当且仅当一组二元决策变量都等于1
- 或(genconor):设置一个二进制变量等于1当且仅当至少一个变量的一组二元决策变量等于1
- 指示器(genconind):当给定二进制变量需要一定的值,那么必须满足给定的线性约束
请参考本节额外的细节一般约束。
- genconmax(可选)
-
一个结构体数组。当礼物,每个条目genconmax定义了一个最大的一般约束形式
每个条目可能有以下字段:- resvar
- 通过指定model.genconmax .resvar(我)。指数在左边的变量的约束。
- var
- 通过指定model.genconmax .vars(我),它是一个向量指标变量的右手边的约束。
- 反对(可选)
- 通过指定model.genconmax .con(我)。时,指定了恒定的左边。默认值是。
- 名称(可选)
- 通过指定model.genconmax(我). name。时,指定的名称th马克斯一般约束。
- genconmin(可选)
-
一个结构体数组。当礼物,每个条目genconmax定义了一个最小的一般约束形式
每个条目可能有以下字段:- resvar
- 通过指定model.genconmin .resvar(我)。指数在左边的变量的约束。
- var
- 通过指定model.genconmin .vars(我),它是一个向量指标变量的右手边的约束。
- 反对(可选)
- 通过指定model.genconmin .con(我)。时,指定了恒定的左边。默认值是。
- 名称(可选)
- 通过指定model.genconmin(我). name。时,指定的名称th最小通用约束。
- genconabs(可选)
-
一个结构体数组。当礼物,每个条目genconmax定义了一个ABS的一般约束形式
每个条目可能有以下字段:- resvar
- 通过指定model.genconabs .resvar(我)。指数在左边的变量的约束。
- argvar
- 通过指定model.genconabs .argvar(我)。指数在右边的变量的约束。
- 名称(可选)
- 通过指定model.genconabs(我). name。时,指定的名称th ABS一般约束。
- genconand(可选)
-
一个结构体数组。当礼物,每个条目genconand定义了一个和一般形式的约束
每个条目可能有以下字段:- resvar
- 通过指定model.genconand .resvar(我)。指数在左边的变量的约束。
- var
- 通过指定model.genconand .vars(我),它是一个向量指标变量的右手边的约束。
- 名称(可选)
- 通过指定model.genconand(我). name。时,指定的名称th和通用约束。
- genconor(可选)
-
一个结构体数组。当礼物,每个条目genconor定义了一个或一般约束的形式
每个条目可能有以下字段:- resvar
- 通过指定model.genconor .resvar(我)。指数在左边的变量的约束。
- var
- 通过指定model.genconor .vars(我),它是一个向量指标变量的右手边的约束。
- 名称(可选)
- 通过指定model.genconor(我). name。时,指定的名称th或一般约束。
- genconind(可选)
-
一个结构体数组。当礼物,每个条目genconind定义了一个指标的一般约束形式
这个约束状态,当二进制变量 需要的值binval然后线性约束 必须持有。请注意,感觉是其中之一“=”,“<”,或“>”平等()、小于或等于()或大于或等于()的约束。每个条目可能有以下字段:- binvar
- 通过指定model.genconind .binvar(我)。暗示二进制变量的指数。
- binval
- 通过指定model.genconind .binval(我)。值的二进制变量部队以下线性约束得到满足。它可以是0或1。
- 一个
- 通过指定model.genconind(我)。。变量的系数向量参与隐含线性约束。你必须指定一个值一个每一列的一个。
- 感觉
- 通过指定model.genconind .sense(我)。隐含的线性约束。必须一个“=”,“<”,或“>”。
- 园艺学会
- 通过指定model.genconind .rhs(我)。右边的隐含线性约束。
- 名称(可选)
- 通过指定model.genconind(我). name。时,指定的名称th指标约束。
先进的领域:
- pwlobj(可选)
-
分段线性目标函数。一个结构体数组。当礼物,每个条目pwlobj定义了一个分段线性单变量目标函数。变量的指数,其目标函数是定义存储在model.pwlobj .var(我)。的点的值定义存储在的分段线性函数
model.pwlobj(我)方式。中的值向量必须引入秩序。的点的值定义存储在的分段线性函数model.pwlobj .y(我)。 - vbasis(可选)
- 变量基础状态向量。用于提供一个先进的单纯形算法的起点。你通常不会关心这个向量的内容,而是简单地把它从以前的结果优化的输入随后跑。当礼物时,你必须为每一列指定一个值一个。
- cbasis(可选)
- 约束基础状态向量。用于提供一个先进的单纯形算法的起点。查阅vbasis描述的细节。时,您必须指定一个值为每一行一个。
- varhintval(可选)
- 一组用户提示。如果你知道一个变量可能需要高质量的解决方案中的一个特定值的MIP模型,您可以提供该值作为一个提示。你也可以(可选)提供信息的提示你的信心水平varhintpri字段。如果现在,你必须为每一列指定一个值一个。使用的值南为变量,没有这样的提示。有关详细信息,请参阅VarHitVal属性文件。manbet体育手机客户端
- varhintpri(可选)
- 重点对用户提示。通过提供变量后提示varhintval结构,您还可以提供提示重点给的提示你的信心水平。如果现在,你必须为每一列指定一个值一个。有关详细信息,请参阅VarHintPri属性文件。manbet体育手机客户端
- branchpriority(可选)
- 变量分支优先。如果存在,这个属性的值被用作分支的主要选择标准部分变量在MIP搜索。变量有较大值总是优先于那些规模较小的值。关系破碎的使用标准的分支变量选择标准。如果现在,你必须为每一列指定一个值一个。
- pstart(可选)
- 当前单纯形开始向量。如果你设置pstart每个模型中变量和值dstart每个约束值,那么单纯形将使用这些值来计算热启动的基础上。有关详细信息,请参阅PStart属性文件。manbet体育手机客户端
- dstart(可选)
- 当前单纯形开始向量。如果你设置dstart值为每个模型和线性约束pstart值为每一个变量,那么单纯形将使用这些值来计算热启动的基础上。有关详细信息,请参阅DStart属性文件。manbet体育手机客户端
- 懒惰(可选)
- 决定是否视为一个线性约束懒惰的约束。如果现在,你必须指定一个值为每一行一个。有关详细信息,请参阅懒惰的属性文件。manbet体育手机客户端
- 开始(可选)
- MIP开始向量。MIP解算器将尝手机万博登录试构建这个向量的初始解。时,您必须指定一个开始为每个变量值。注意,可以设置变量值开始南指示MIP的解算器来填写一个变量的值。手机万博登录
- 分区(可选)
- MIP变量分区号,改进启发式MIP所使用的解决方案。如果现在,你必须为每个变量的指定一个值一个。有关详细信息,请参阅分区属性文件。manbet体育手机客户端
如果任何强制失踪,上面列出的组件gurobi ()函数将返回一个错误。
下面是一个示例,演示了一个简单的结构优化模型:
模型。一个= sparse([1 2 3; 1 1 0]);
model.obj= [1 1 1];
模型。模型感觉= 'max';
模型。园艺学会= [4; 1];
模型。感觉= '<>'