ILOG CPLEX 部分语法汇总

从两天前开始接触CPLEX的OPL语言,各种错误不断,但网上参考资料又很少。本博文基于自己的摸索,汇总部分基础语法,以备不时之需。以TSP为例。

关键词 range 表示一个范围,使用范例:range city=0..CityNum-1; 表示定义了一个city的变量,取值是0到CityNum-1,其中CityNum是我在此之前定义的int型变量,表示城市数量。

关键词 dvar 表示变量。其中常见的是 dvar boolean flag[city],其中boolean表示该变量是一个0-1变量,需要注意的是,在定义数组时,其中的索引需要用range类型的变量。一开始我定义成 dvar boolean flag[CityNum],系统报错。

关键词 forall表示循环,与R语言中for循环用法类似,使用范例:forall(c1 in city) x[c1]=x[c1]+1; 其中c1不需要定义类型,city是range型。也可以在forall中表示多维for循环,例如:forall(c1,c2 in city) x[c1][c2]=x[c1][c2]+1;等价于forall(c1 in city) forall(c2 in city) x[c1][c2]=x[c1][c2]+1; 这一条不过多解释。

关键词 execute,表示嵌入的代码块,其后可以紧跟一串字符表示该代码块的名称,也可以直接用花括号表示代码段,常用于数据预处理和数据输出等。在execute代码块中,用for表示for循环,例如:for(var c1 in city)x[c1]=x[c1]+1;需要定义变量c1为 var c1。与execute功能相似的是main表示的代码块,但main代码块还能控制程序流程,功能更加复杂,目前我暂未涉及。

整体而言,如果有其他编程语言的基础,学习OPL语言并不是非常困难的事情,只是有些细节需要注意。顺便一提,还不会在cplex中用OPL读取文档,只会整句读入,但不会对数据进行诸如字符串分割,字符串提取等数据预处理操作。因此,今天还尝试了一下在eclipse中用JAVA调用cplex。但感觉写得有点烦,最后还失败了。导致这一痛苦的经历的原因主要是对cplex不熟悉,很多类不能灵活运用,因此总是报各种错误。下一阶段作为过渡,可以先用JAVA对数据进行预处理,再用cplex 的OPL运算具体的线性规划模型。

你可能感兴趣的:(情感天地,CPLEX,Java)