不一样。
代码是程序员用开发工具所支持的语言写出来的源文件,是一组由字符,符号或信号码元以离散形式表示信息的明确的规则体系。
代码设计的原则包括唯一确定性,标准化和通用性,可扩充性与稳定性,便于识别与记忆,力求短小与格式统一以及容易修改等。 源代码是代码的分支,某种意义上来说,源代码相当于代码。
现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。
首先需要安装Cplex软件,我安装的版本是cplex_studio122.win-x86-32.exe2
下图安装后打开的Cplex自带的IDE,看上去跟Eclipse差不多。
在Cplex的安装目录下有许多值得我们学习的东西,还有一些examples,可供我们参考。
我是在Eclipse中使用Java调用Cplex,所以先把一些Cplex依赖加上。
运行依赖:cplex.jar(在..\cplex\lib目录下找到)和cplex122.dll(在..\cplex\bin目录下找到)。将cplex.jar加到工程的Build Path中。
cplex122.dll可以设置到运行时的环境中(VM arguments),或者添加到项目的Native library location。
接下来我们求解一个具体的线性规划问题。
例如,我们求解下面这样一个线性规划问题:
Maximizex1 + 2x2 + 3x3
subject to
-x1 + x2 + x3 ≦20
x1 - 3x2 + x3 ≦30
with these bounds
0 ≦x1 ≦40
0 ≦x2 ≦+∞
0≦ x3≦ +∞
先创建一个IloCplex对象,它是用来创建所有建模对象所需要的模型。此时会抛出一个异常:IloException,需要try\catch。
代码如下:static public class Application {
static public main(String[] args) {
try {
IloCplex cplex = new IloCplex()
// create model and solve it
} catch (IloException e) {
System.err.println("Concert exception caught: " + e)
}
}
}
定义决策变量:double[] lb = {0.0, 0.0, 0.0}
double[] ub = {40.0, Double.MAX_VALUE, Double.MAX_VALUE}
IloNumVar[] x = cplex.numVarArray(3, lb, ub)
定义目标函数:
IloNumExpr expr = cplex.sum(x[0], cplex.prod(2.0, x[1]),cplex.prod(3.0, x[2]))
cplex.addMaximize(expr)
其中这个地方有许多写法,大家在使用的时候可以注意一下。
定义决策的约束条件:cplex.addLe(cplex.sum(cplex.negative(x[0]), x[1], x[2]), 20)cplex.addLe(cplex.sum(cplex.prod(1, x[0]), cplex.prod(-3, x[1]),cplex.prod(1, x[2])), 30)
最后解决模型问题:if(cplex.solve()){....}
如果solve()返回true的话,我们可以获取一些信息,例如问题的解决状态、获取方案的目标值、获取数组中的所有决策变量的解值。
cplex.getStatus()返回值类型:Error、Unknown、Feasible、Bounded、Optimal、Infeasible、Unbouded、InfeasibleorUnbounded。
获取方案的目标值:double objval = cplex.getObjValue()获取数组中的所有决策变量的解值:double[] xval = cplex.getValues(x)
13
运行程序最后控制台的输出结果如下所示:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)