Cplex求解线性规划
生活随笔
收集整理的這篇文章主要介紹了
Cplex求解线性规划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
本文將介紹使用Cplex進行簡單的線性規劃求解,包括Cplex中兩種常用的建模方式,即按行建模和按列建模。實際上還有一種按非零元素建模,本文暫時不涉及。編程環境是VS2019+Cplex12100,環境配置可參考博客:環境配置
按行添加
代碼
#include<ilcplex/ilocplex.h>ILOSTLBEGIN/*數學模型Maximize x1+x2s.t. x1+2x2<=10 (1)x1-x2<=3 (2) */ int main() {IloEnv env;//環境IloModel model(env);//模型IloNumVarArray var(env);//變量IloRangeArray con(env);//約束var.add(IloNumVar(env, 0, IloInfinity, ILOINT));//添加變量(大于0,整型)var.add(IloNumVar(env, 0, IloInfinity, ILOINT));//添加變量(大于0,整型)IloObjective obj = IloMaximize(env, var[0] + var[1]);//目標函數(極大化)con.add(var[0] + 2 * var[1] <= 10);//約束(1)con.add(var[0] - var[1] <= 3);//約束(2)model.add(obj);//將目標導入模型model.add(con);//將約束導入模型IloCplex cplex(model);//將模型導入求解器cplex.solve();//求解env.out() << cplex.getObjValue() << endl;//輸出目標值for (int i = 0; i < var.getSize(); i++)env.out() << cplex.getValue(var[i]) << "\t";//輸出變量值env.out() << endl;env.end();system("pause"); }結果
按列添加
代碼
#include<ilcplex/ilocplex.h>ILOSTLBEGIN/*數學模型Maximize x1+x2s.t. x1+2x2<=10 (1)x1-x2<=3 (2) */ int main() {IloEnv env;//環境IloModel model(env);//模型IloNumVarArray var(env);//變量IloRangeArray con(env);//約束con.add(IloRange(env, -IloInfinity, 10));//約束1邊界條件con.add(IloRange(env, -IloInfinity, 3));//約束3邊界條件IloObjective obj = IloMaximize(env);//目標函數var.add(IloNumVar(obj(1) + con[0](1) + con[1](1), 0, IloInfinity, ILOINT));//添加x1列var.add(IloNumVar(obj(1) + con[0](2) + con[1](-1), 0, IloInfinity, ILOINT));//添加x2列model.add(obj);//將目標導入模型model.add(con);//將約束導入模型IloCplex cplex(model);//將模型導入求解器cplex.solve();//求解cplex.exportModel("test.lp");//將模型導出,命名為test.lpenv.out() << cplex.getObjValue() << endl;//輸出目標值for (int i = 0; i < var.getSize(); i++)env.out() << cplex.getValue(var[i]) << "\t";//輸出變量值env.out() << endl;env.end();system("pause"); }結果
總結
可以看到按行添加和按列添加得到的結果是一致的,我們添加的是同一個模型。
總結
以上是生活随笔為你收集整理的Cplex求解线性规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像处理与分析_第一章
- 下一篇: 机器人学导论第七章