GLPK/GMPL 文件处理步骤
外观
< GLPK
本页面描述 GLPK 处理用 GMPL(也称为 MathProg)编写的模型时所采取的步骤。
GLPK 通过一系列步骤求解模型。
GMPL 文件的模型部分被解析,并创建描述不同对象(如变量、约束和表达式)的内部结构。此阶段由函数执行glp_mpl_read_model.
模型文件的数据部分用于初始化参数和集合。如果数据部分包含在模型文件中,则此阶段由函数执行glp_mpl_read_model. 如果提供了数据文件(可选),则此阶段由函数执行glp_mpl_read_data.
在此阶段,模型中直至 GMPL solve 语句的语句和表达式都会被求值。此阶段由函数执行glp_mpl_generate. 模型生成可能在计算上很昂贵,用户应该预期生成大型或复杂模型的过程需要时间。
约束本身将根据以下规则进行标准化
原始形式 | 标准形式 |
---|---|
对偶值使用约束的标准形式进行计算。这意味着,在以下示例中,c2的对偶值将相对于c1的对偶值取相反符号,用于否则等效的约束公式
s.t. c1 : 3 * z = 1; s.t. c2 : 1 = 3 * z;
因此,在解释非标准约束的对偶值时需要谨慎。反之,良好的做法建议在实际情况下使用标准形式。
创建求解器的实例问题。此阶段由函数执行glp_mpl_build_prob. 如果没有在前面调用glp_mpl_generate.
通过调用适当的求解器来尝试求解:单纯形、内点或 MIP。
求解器调用的结果被转移回 GMPL 变量和约束。模型文件中 solve 语句之后的语句都会被执行。此阶段由函数执行glp_mpl_postsolve.
更多细节可以通过检查以下内容获得:
- 函数glp_main在实现文件src/glpapi19.c(截至 GLPK 4.45)
- 第 3.2 章 用于处理 MathProg 模型的例程 中的示例doc/glpk.pdf来自源代码分发。
使用 GLPSOL 时,无法指定可行(但可能是次优)的起始解 - 但此功能在使用 GLPK API 进行编程时受支持,使用 回调挂钩 的分支定界算法。