java - 拉格朗日松弛 Cplex 和 Java

标签 java cplex

我有一个组合目标函数来解决问题 (p) 的拉格朗日松弛。

目标函数的数学公式为:

Minimize [sum(i in n) time[i] * poids[i] + sum (i in n) Mult[i]* ((sum (j in n) x[i][j]) -1).

我尝试了以下方法,但不起作用:

    // objective
    IloNumExpr expr1 = null;
    IloLinearNumExpr obj = cplex1.linearNumExpr();

    for (int i =0; i<n; i++) {
        obj.addTerm(time[i],W[i]);
    }


    for(int i=0; i<n; i++){
        IloLinearNumExpr expr = cplex1.linearNumExpr();
        for (int j=0; j<n; j++){
            if (cplex1.equals(x[i][j])){
                expr.addTerm(1,x[i][j]);
            }
        }  cplex1.sum(expr,-1);
           cplex1.prod(expr, mult[i]);  

         obj.add(expr); 
    }           

    cplex1.addMinimize(obj); 

感谢您的帮助。

最佳答案

您的代码中有多个错误。

我在这里假设 cplex1 是一个 IloCplex 类型变量。

话虽这么说,你已经

for (int j=0; j<n; j++){
            if (cplex1.equals(x[i][j])){
                expr.addTerm(1,x[i][j]);
            }
        }  cplex1.sum(expr,-1);
           cplex1.prod(expr, mult[i]);  

这有两个错误。第一

if (cplex1.equals(x[i][j])){

您正在将 IloCplex 与数字变量进行比较。这将始终返回 false。您在这里想实现什么目标?

第二个错误是这个

cplex1.sum(expr,-1);
cplex1.prod(expr, mult[i]);

应该是这个

expr = cplex1.sum(expr,-1);
expr = cplex1.prod(expr, mult[i]);

因为这些方法不会更改其输入,但会返回结果。

如果问题仍然存在,请尝试改正错误。尝试发布更完整的代码片段。

希望这有帮助

关于java - 拉格朗日松弛 Cplex 和 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843663/

相关文章:

java - 部署取消部署时 Weblogic 内存泄漏

java - 从源代码编译android APK

java - 将日期参数从 html 表单发送到 thymeleaf 中的 Controller

python - 在 OS X Lion 上强制 Python 为 32 位

mathematical-optimization - AMPL 难以使用 "count"从约束编写目标

java - 如何在java中提取MS SQL SERVER 2008 R2的TIME(7)字段的值?

修改项目以使用 Maven 时出现 Java Spring Hibernate 依赖问题

c++ - 在 C++ 中声明全局变量的问题

java - CPLEX 中的目标规划

c++ - 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?