8.9.1. MATLAB 函数

MindOpt MATLAB 函数。

函数

mindopt()

这个函数用于优化求解提供的模型

mindopt_iis()

计算至少包含一个IIS (不可约不一致子系统)

mindopt_read()

从文件中读取一个模型

mindopt_write()

将模型数据序列化到文件

mindopt(model, params[optional])

这个函数用于优化求解提供的模型。将根据模型的类型自动调用合适的算法。无论求解成功与否,都会返回一个包含求解相关信息的 MATLAB 结构体变量。

Parameters
  • model – 模型结构体,其必须含有合法的mindopt model字段,具体可以参考model章节。

  • params[optional] – 参数结构体,其必须含有合法的mindopt 参数字段,具体可以参考参数章节。为了符合matlab中字段名的合法性,参数中的’/’,将以’_’替代。例如,可以通过输入params.MIP_MaxNodes来指定参数”MIP/MaxNodes”的值。

Returns

mindopt 函数返回一个结构体,其中优化的各种结果存储在其字段中。具体可用的结果取决于所解决的模型类型、使用的参数以及优化的状态。返回值中包含以下属性,Status、ObjVal、X、RC、SolverTime、PresolverTime、SolutionTime、MIP_GapAbs、MIP_GapRel、IPM_NumIters、 SPX_NumIters。其中,只有求解结果为’OPTIMAL’时,ObjVal和X的值才是有效的;只有求解MIP问题时,MIP_GapAbs, MIP_GapRel才是有效的;只有采用内点法(IPM)时,IPM_NumIters才是有效的;只有采用单纯形法时,SPX_NumIters才是有效的。

example:

result = mindopt(model, params);
if strcmp(result.Status, 'OPTIMAL')
    fprintf('Optimal objective: %e\n', result.ObjVal);
    disp(result.X);
else
    fprintf('Optimization returned status: %s\n', result.Status);
end
mindopt_iis(model, params[optional])

计算至少包含一个IIS (不可约不一致子系统)。 IIS是变量边界和约束边界的子集,该子集满足: (1)子集对应的子问题仍然不可行(2)删除该子集中的任何边界后,子问题变得可行。有关更多详细信息,请参考IIS相关属性的变量和约束。

Parameters
  • model – 模型结构体,其必须含有合法的mindopt model字段,具体可以参考model章节。

  • params[optional] – 参数结构体,其必须含有合法的mindopt 参数字段,具体可以参考参数章节。为了符合matlab中字段名的合法性,参数中的’/’,将以’_’替代。例如,可以通过输入params.MIP_MaxNodes来指定参数”MIP/MaxNodes”的值。

Returns

返回值中包含以下属性,Status、IISRow、IISCol。其中,IISRow指示该约束的LHS和RHS是否属于IIS,值的具体含义参考约束属性IISRow。IISCol指示该变量的上界和 (或) 下界是否属于IIS,值的具体含义参考变量属性IISCol。

example:

iis = mindopt_iis(model, params);
if strcmp(iis.Status, 'OPTIMAL')
    fprintf('The model is OPTIMAL.\n');
else
    fprintf('Optimization returned status: %s\n', iis.Status);
    fprintf('IISvar\n');
    disp(iis.IISVar);
end
mindopt_read(filename, params[optional])

从文件中读取一个模型。请注意,文件格式及其压缩类型 (可选) 在文件名后缀中编码。有效的后缀为:.lp,.mps,.qps和.dat-s,可选的压缩类型为.gz或.bz2。 mindopt_read() 函数在读取模型并将读取结果写入 MATLAB 结构体。mindopt_read() 函数在 model 的属性设置上,会遵循以下一些规则:

  • 对于各类约束,若不存在,则读取到的 model 中则没有相应的属性字段。

  • 对于线性约束和二次约束,将采用读取到的 lhs 和 rhs 来表示约束的取之范围,而不是 sense 和 rhs 的方式。当 lhs 和 rhs 相等时,表示该约束为’=’约束;当 lhs 为 -1e20(mindopt 中定义的正无穷值),表示该约束为’>’约束;当 rhs 为 1e20(mindopt 中定义的负无穷值),表示该约束为’<’约束。且 lhs 和 rhs 为 n*1 的 array。

  • 对于 varnames,将读取到一个长度为变量数的 cell;针对 constrnames,将读取到一个长度为线性约束数的 cell。其读取到的值为模型文件中的变量名和约束名。

  • 对于 vtype,将读取到一个长度和变量数相同的字符数组,其中每一个字符表示相应变量的变量类型。

  • 对于 quadcon,读取的二次约束项将由 Qrow、Qcol、Qval 来表示,其将为一个行列数为变量数的上三角矩阵。读取的 quadcon 不会包含 Qc 属性字段。读取的线性约束项 q 将采用稠密的一维向量的来表示。

  • 对于 genconind, 将采用读取到的 rhs 和 sense 来表示约束的取之范围。读取的线性约束项 a 将采用稠密的一维向量的来表示。

如果用户先采用 mindopt_write() 函数将建立的模型 modelA 写入一个模型文件,再采用 mindopt_read() 函数读取该模型文件,得到 modelB,以上规则可能会导致 modelA 和 modelB 的属性值存在一些不同,但不影响求解 modelA 和 modelB 可以获得相同的结果。

Parameters
  • filename – 模型文件路径,必须为char_array。

  • params[optional] – 参数结构体,其必须含有合法的 mindopt 参数字段,具体可以参考参数章节。为了符合matlab中字段名的合法性,参数中的’/’,将以’_’替代。例如,可以通过输入params.MIP_MaxNodes来指定参数”MIP/MaxNodes”的值。

Returns

返回值为一个模型结构体,其含有合法的mindopt model字段,具体可以参考 model章节。

example:

model = mindopt_read('a.mps');
result = mindopt(model);
mindopt_write(model, filename, params[optional])

将模型数据序列化到文件。包括模型本身或其他设置。请注意,数据类型及其压缩 类型 (可选) 在文件名后缀中编码。有效的后缀为.lp,.mps,.qps 这些后缀将序列化模型本身而.sol,.bas,.prm,以及.mst将序列化模型的解,变量的基值,参数设置,以及MIP的初始解到文件。可选的压缩类型后缀.gz或.bz2。

Parameters
  • model – 模型结构体,其必须含有合法的mindopt model字段,具体可以参考model章节。

  • filename – 序列化的文件路径,必须为char array。

  • params[optional] – 参数结构体,其必须含有合法的mindopt 参数字段,具体可以参考参数章节。为了符合matlab中字段名的合法性,参数中的’/’,将以’_’替代。例如,可以通过输入params.MIP_MaxNodes来指定参数”MIP/MaxNodes”的值。

example:

model = mindopt_read('a.mps');
mindopt_write(model, 'b.mps');
result = mindopt(model);