CPLEX-OPL编程手册

CPLEX有自己的编程语言–OPL,但许多学者都是采用第三方语言(如Java、C语言、MATLAB…),使用OPL语言的人较少,若想学习OPL语言,可参考OPL的编程手册:
http://download.csdn.net/download/robert_chen1988/10118785
http://download.csdn.net/download/robert_chen1988/10118790
Java语言调用Cplex的手册:
https://download.csdn.net/download/robert_chen1988/10119473

使用OPL语言优点
1.容易表示分段线性函数。OPL有专门的 Piecewise 函数来表示分段线性函数
2.容易表示一些逻辑关系。 OPL有一个 => 符号,可以方便表示逻辑关系,就不用写出数学表达式了。 例如 x>0 时, y=0,用OPL语言表示为:x>0 => y==0

使用OPL语言缺点
不易调试程序,不能够断点调式,若要想知道某个变量在运行时值,必须用 writeln 函数输出,很麻烦。

我们以下面的分段函数为例,来比较OPL语言和Java语言
CPLEX-OPL编程手册_第1张图片
上面的分段函数如果用OPL语言表示,则为

piecewise{1 -> 100; 2->200;-3}(0,300) x; 

其中, 1, 2, -3 分别是3个线段的斜率, 100, 200 是3个线段的分割点(3个线段有两个分割点), 而 (0, 300) 表示分段线性函数其中一点的横坐标与纵坐标, x 是自变量。

用Java语言表示,则为

IloCplex cplex = new IloCplex();
			
IloNumVar x = cplex.numVar(-Double.MAX_VALUE, Double.MAX_VALUE);
			
double[] points = {100, 200};
double[] slopes = {1, 2, -3};
IloNumExpr fx = cplex.piecewiseLinear(x, points, slopes, 0, 300);

可见,对于分段函数,OPL语言比Java语言简洁的多

若没有分段函数,可用其它语言编写,就用不着 OPL 编程了。

OPL语言求解模型的例子:
CPLEX-OPL编程手册_第2张图片
上诉模型的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;
}

OPL语言的文件是以.mps或.lp结尾的

参考文献:https://blog.csdn.net/robert_chen1988/article/details/53458689

你可能感兴趣的:(CPLEX)