第四天:c++中的CPLEX设计(进阶)

来源:互联网 发布:小米5c网络制式 编辑:程序博客网 时间:2024/06/02 05:29

一、选择优化器

如优化器选项中所提及,提供了各种优化器选项以用于对 LP、QP 和 QCP 求解。 虽然缺省优化器适用于多种模型,但 IloCplex 使您能够通过以下方法来控制分别使用哪个选项对根和节点进行求解:

void IloCplex::setParam(IloCplex::RootAlg, alg)void IloCplex::setParam(IloCplex::NodeAlg, alg)

其中 IloCplex::Algorithm 是枚举类型。 它定义以下符号及其含义:

优化器描述IloCplex::AutoAlg允许 CPLEX 选择算法IloCplex::Dual使用对偶单纯形法算法IloCplex::Primal使用主单纯形法算法IloCplex::Barrier使用内点法IloCplex::Network使用针对内嵌网络的网络单纯形法算法IloCplex::Sifting使用筛选法IloCplex::Concurrent允许 CPLEX 在多个计算机处理器上使用多种算法

对于 QP 模型,只有 AutoAlgDualPrimalBarrierNetwork 算法适用。

二、编写和读取模型及文件

cplex.exportModel ("lpex1.lp");

该语句使 cplex 将它当前已抽取的模型写入名为 lpex1.lp 的文件。 在本例中,文件将以 LP 格式编写。 (该格式在《CPLEX 文件格式》参考手册中进行了记录。) 支持用于将问题写入文件的其他格式为 MPS 和 SAV(也记录在《CPLEX 文件格式》参考手册中)。IloCplex 根据文件名的扩展名来决定以哪种文件格式进行编写。

IloCplex 还支持通过其某个 importModel 方法来读取文件。 调用 importModel 将使 CPLEX 从文件 file.lp 读取问题,并将其中的所有数据都作为新对象添加到model。 (同样,也支持 MPS 和 SAV 格式文件。) 尤其是,CPLEX 将创建以下项的实例

建模类描述IloObjective针对在 file.lp 中找到的目标函数;IloNumVar针对在 file.lp 中找到的每个变量,以下项除外IloSemiContVar针对在 file.lp, 中找到的每个半连续或半整数变量;IloRange针对在 file.lp 中找到的每一行;IloSOS1针对在 file.lp 中找到的每个类型为 1 的 SOS 以及IloSOS2针对在 file.lp 中找到的每个类型为 2 的 SOS。

如果您还需要访问 importModel 所创建的建模对象,那么提供了另外两个签名:

void IloCplex::importModel (IloModel& m,                           const char* filename,                           IloObjective& obj,                           IloNumVarArray vars,                           IloRangeArray  rngs) const;

void IloCplex::importModel (IloModel& m,                           const char* filename,                           IloObjective& obj,                           IloNumVarArray vars,                           IloRangeArray rngs,                           IloSOS1Array sos1,                           IloSOS2Array sos2) const;

它们提供其他参数,以使新创建的建模对象将返回到调用者。 示例程序 ilolpex2.cpp 显示如何使用方法importModel


  
0 0
原创粉丝点击