8.9.1. MATLAB 函数¶
MindOpt MATLAB 函数。
函数
这个函数用于优化求解提供的模型
计算至少包含一个IIS (不可约不一致子系统)
从文件中读取一个模型
将模型数据序列化到文件
- 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);