ILOG CPLEX OPL 编程手册,使用心得与简单例子
2016-12-08 01:34
543 查看
CPLEX 自己的编程语言本来没打算学,这边导师说我若用OPL编写程序,他可以帮我改程序,于是就查了查。
OPL 的帮助文档很长很全,看上面几个例子就会简单的建模编程了。网上有国内东北大学一位老师的几个课件可以找到,跟OPL自己的帮助文档差不多,但因为是中文,不像帮助文档那么冗长,更适合学习。
我自己也找到几个有用的学习资料:
1. Ilog manual1: http://download.csdn.net/download/robert_chen1988/10118785
2. Ilog manual2: http://download.csdn.net/download/robert_chen1988/10118790
3. java 调用 cplex 使用手册:http://download.csdn.net/download/robert_chen1988/10119473
使用体会:
1. 语法规则很怪异。参数跟求解变量必须严格指定;有一个 dexpr 函数可以表示变量之间的组合.
2. 不易调试程序。试了试调试程序,不能够断点,若要想知道某个变量在运行时值,必须用 writeln 函数输出,很麻烦。
也有优点:
1. 非常容易表示分段线性函数。 OPL有专门的 Piecewise 函数来表示分段线性函数, 这一点 Matlab 做不到。
2. 非常容易表示一些逻辑关系。 OPL有一个 => 符号,可以方便表示逻辑关系,就不用写出数学表达式了。 例如 x>0 时, y=0,用OPL语言表示为:x>0 => y==0;
当然了, CPLEX本身功能强大,甚至可以求解二次凸规划问题了。目前来看,若不需要 Piecewise 函数, 其他功能可以 通过 Yalmip 工具箱调用 CPLEX 求解,就用不着 OPL 编程了。
一个简单的例子:
\begin{align} &\max\quad &&x_1 + 2x_2 +3x_3\nonumber\\ &s.t.&&\nonumber\\ & &&-x_1 + x_2 + x_3 \leq 20\nonumber\\ & &&x_1 - 3x_2 + x_3 \leq 30\nonumber\\ & &&0\leq x_1\leq 40\nonumber \end{align}
Ilog OPL 的代码:
运行结果:
// solution (optimal) with objective 202.5
// Quality There are no bound infeasibilities.
// There are no reduced-cost infeasibilities.
// Maximum Ax-b residual = 0
// Maximum c-B'pi residual = 0
// Maximum |x| = 42.5
// Maximum |slack| = 0
// Maximum |pi| = 2.75
// Maximum |red-cost| = 3.5
// Condition number of unscaled basis = 3.0e+000
//
x1 = 40;
x2 = 17.5;
x3 = 42.5;
OPL 的帮助文档很长很全,看上面几个例子就会简单的建模编程了。网上有国内东北大学一位老师的几个课件可以找到,跟OPL自己的帮助文档差不多,但因为是中文,不像帮助文档那么冗长,更适合学习。
我自己也找到几个有用的学习资料:
1. Ilog manual1: http://download.csdn.net/download/robert_chen1988/10118785
2. Ilog manual2: http://download.csdn.net/download/robert_chen1988/10118790
3. java 调用 cplex 使用手册:http://download.csdn.net/download/robert_chen1988/10119473
使用体会:
1. 语法规则很怪异。参数跟求解变量必须严格指定;有一个 dexpr 函数可以表示变量之间的组合.
2. 不易调试程序。试了试调试程序,不能够断点,若要想知道某个变量在运行时值,必须用 writeln 函数输出,很麻烦。
也有优点:
1. 非常容易表示分段线性函数。 OPL有专门的 Piecewise 函数来表示分段线性函数, 这一点 Matlab 做不到。
2. 非常容易表示一些逻辑关系。 OPL有一个 => 符号,可以方便表示逻辑关系,就不用写出数学表达式了。 例如 x>0 时, y=0,用OPL语言表示为:x>0 => y==0;
当然了, CPLEX本身功能强大,甚至可以求解二次凸规划问题了。目前来看,若不需要 Piecewise 函数, 其他功能可以 通过 Yalmip 工具箱调用 CPLEX 求解,就用不着 OPL 编程了。
一个简单的例子:
\begin{align} &\max\quad &&x_1 + 2x_2 +3x_3\nonumber\\ &s.t.&&\nonumber\\ & &&-x_1 + x_2 + x_3 \leq 20\nonumber\\ & &&x_1 - 3x_2 + x_3 \leq 30\nonumber\\ & &&0\leq x_1\leq 40\nonumber \end{align}
Ilog OPL 的代码:
dvar float x1 in 0..40; dvar float x2; dvar float x3; maximize x1 + 2*x2 +3*x3; subject to{ -x1 + x2 + x3 <= 20; x1 - 3*x2 + x3 <= 30; }
运行结果:
// solution (optimal) with objective 202.5
// Quality There are no bound infeasibilities.
// There are no reduced-cost infeasibilities.
// Maximum Ax-b residual = 0
// Maximum c-B'pi residual = 0
// Maximum |x| = 42.5
// Maximum |slack| = 0
// Maximum |pi| = 2.75
// Maximum |red-cost| = 3.5
// Condition number of unscaled basis = 3.0e+000
//
x1 = 40;
x2 = 17.5;
x3 = 42.5;
相关文章推荐
- 关于使用PRO*C编程的一些简单说明和例子
- 关于使用PRO*C编程的一些简单说明和例子
- 关于使用PRO*C编程的一些简单说明和例子
- dtree使用手册以及简单的例子
- [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之tomcat篇
- [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之jetty篇(二)
- [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之jetty篇(三)
- 关于使用PRO*C编程的一些简单说明和例子
- 关于使用PRO*C编程的一些简单说明和例子
- [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之glassfish篇(一)
- 关于使用PRO*C编程的一些简单说明和例子
- 【Echarts】百度Echarts的使用入门+两个简单的小例子+心得
- [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之glassfish篇(二)
- GDB 7.0 中文手册 —— 1. GDB简介和一个简单的使用例子
- 关于使用PRO*C编程的一些简单说明和例子
- 关于使用PRO*C编程的一些简单说明和例子
- dtree使用手册以及简单的例子
- 用 WIA对象 编程使用扫描仪的例子
- 数据库封装类DataOperation改进(支持事务、存储过程、简单使用例子)