第三天:c++中的cplex设计(初级)
来源:互联网 发布:java鱼雷公路车 编辑:程序博客网 时间:2024/05/21 10:27
CPLEX 对象对于 C++ 应用程序为必需。
清楚地了解 C++ 对象是结合使用 Concert Technology 和 CPLEX 对优化模型进行构建和求解的基础。 这些对象可分为两个类别:
建模对象用于对优化问题进行定义。 一般情况下,应用程序创建多个建模对象来指定一个优化问题。 这些对象分组在一个表示完整优化问题的IloModel 对象中。
IloCplex 对象用于对已通过建模对象创建的问题进行求解。 IloCplex 对象读取模型并将其数据抽取到 CPLEX 优化器的相应表示法中。 这样,IloCplex 对象便准备就绪,可以对其所抽取的模型求解并接受查询以获取解法信息。
一、构造环境:IloEnv
类IloEnv用于构造CPLEX环境,通常是创建的第一个对象
IloEnv env;
IloEnv是句柄类,只是创建了一个指针,可以:
IloEnv env2=env;
程序结束时需要销毁:
env.end();
二、创建模型
创建环境后,Concert应用程序便准备好创建一个或多个优化模型;
建模对象也称为可抽取对象,因为在您将优化模型抽取到IloCplex . 因此,通过被抽取到 IloCplex 之类的算法的可能性来描述可抽取对象。 实际上,它们全部都是从类IloExtractable 继承而来。 换言之,IloExtractable 是可抽取对象或建模对象的所有类的基类。
最基本的可抽取对象类为 IloModel。 该类的对象用于定义可在稍后抽取到IloCplex 对象的完整优化模型。 您通过构造类型为 IloModel 的对象来创建模型。 例如,为了在名为 env 的现有环境内构造名为 model 的建模对象,可编写以下行:
IloModel model(env);
构造 IloModel 对象后,将使用用于定义优化模型的可抽取对象来对其进行填充。 此处最重要的类包括:
IloNumVar x1(env, 0.0, 40.0, ILOFLOAT);
该定义创建下限为 0.0、上限为 40.0 且类型为 ILOFLOAT(指示此变量为连续变量)的建模变量x1。 其他可能的变量类型包括 ILOINT(针对整数变量)和ILOBOOL(针对布尔型变量)。
对于优化模型中的每个变量,必须创建类 IloNumVar 的一个对应对象。 Concert Technology 提供丰富的方法来帮助您构造所有IloNumVar 对象。
构造所有建模变量之后,它们可用于构建表达式,这些表达式进而用于定义类 IloObjective 和IloRange 的对象。
IloObjective obj = IloMinimize(env, x1 + 2*x2 + 3*x3);
model.add(obj);
通过以下语句可一样轻松地创建约束并将其添加到模型:
model.add(-x1 + x2 + x3 <= 20);
三、对模型求解
在 IloModel 对象中创建了优化问题后,便应该创建 IloCplex 对象,以通过创建类 IloCplex 的实例来对问题求解。 例如,要创建名为cplex 的对象,请编写以下行:
IloCplex cplex(env);
再次使用环境 env 作为参数。 然后,可以使用 CPLEX 对象抽取要求解的模型。 抽取模型的一种方法是调用cplex.extract(model)。 但是,有经验的 Concert 用户采用一种快捷方法,此方法在一行中执行cplex 对象的构造以及模型的抽取:
IloCplex cplex(model);
此快捷方法有用的原因是,建模对象 model 在其内部包含对名为 env 的环境的引用。
在该行之后,对象 cplex 便准备好对 model 所定义的优化问题进行求解。 要对模型求解,请调用:
cplex.solve ();
该方法会返回 IloBool 值,其中 IloTrue 指示 cplex 已成功找到可行(但不一定最优)的解法,而 IloFalse 指示未找到任何解法。 有关最后一次调用方法 IloCplex::solve 的结果的更准确信息可通过调用以下内容来获取:
cplex.getStatus ();
返回值告诉您 CPLEX 找到的有关模型的信息:它找到最优解法还是仅找到可行解法;它证明模型无边界还是不可行;或者此时是否尚未证明任何内容。 有关求解调用的终止的更详细信息可通过方法IloCplex::getCplexStatus 获取。
四、查询结果
在成功对优化问题求解后,您可能对访问解法感兴趣。 以下方法用于查询一个变量或一组变量的解法值:
IloNum IloCplex::getValue (IloNumVar var) const;void IloCplex::getValues (IloNumArray val, const IloNumVarArray var) const;
例如:
IloNum val1 = cplex.getValue(x1);
将建模变量 x1 的解法值存储到 val1 中。 提供了其他方法以用于查询其他解法信息。 例如,可使用以下示例来访问解法的目标函数值:
IloNum objval = cplex.getObjValue ();
五、处理错误
要在 Concert Technology 应用程序中从容地处理异常,可在一个 try/catch 子句中包含所有代码,如以下所示:
IloEnv env;try {// ...} catch (IloException& e) {cerr << "Concert Exception: " << e << endl;} catch (...) {cerr << "Other Exception" << endl;}env.end();
- 第三天:c++中的cplex设计(初级)
- Java初级第三天
- 第四天:c++中的CPLEX设计(进阶)
- CPLEX使用中的一点经验总结(一)
- 第三天课程(网页设计标签)
- c语言学习第三天(指针)
- C语言学习第三天(练习)
- C语言第三天
- C语言第三天
- c第三天
- C语言第三天
- c/c++第三天
- Object-C 第三天
- 第一天:认识CPLEX
- Cplex参数设置(C#)
- 领域驱动设计--第三天
- 网页设计大赛第三天
- 设计模式学习第三天
- Linux常用命令
- TextView跑马灯与EditText共存失效
- kafka+ss create stream
- spring国际化
- html文件中img的路径
- 第三天:c++中的cplex设计(初级)
- React 15.5.0更新
- 《挑战程序设计竞赛》2.3 记录结果再利用的动态规划(待续)
- VS中调试DLL工程的正确方法[转]
- Yii2.0 使用验证码
- Codeforces Round #408 (Div. 2) D. Police Stations
- Spring--IoC--基于XML的DI-内部Bean
- Linux 学习心得
- linux修改网卡名称