Java 向数组列表中添加约束时出现的问题

Java 向数组列表中添加约束时出现的问题,java,cplex,Java,Cplex,我正在学习使用Java API对优化问题进行编码,在将以下简单LP的最后一个约束保存到名为constraints的数组列表中时遇到了一个问题。如果没有这些,代码就会运行,但是,当我激活这行代码时,会弹出一个错误:Constraints.add(model.addEq(proportalweight[j],y)) 而不是以下行: model.addEq(比例重量[j],y) MWE: 导入ilog.concert.*; 导入ilog.cplex。*; 导入java.util.*; 公共类Simpl

我正在学习使用Java API对优化问题进行编码,在将以下简单LP的最后一个约束保存到名为
constraints
的数组列表中时遇到了一个问题。如果没有这些,代码就会运行,但是,当我激活这行代码时,会弹出一个错误:
Constraints.add(model.addEq(proportalweight[j],y))
而不是以下行:
model.addEq(比例重量[j],y)

MWE:

导入ilog.concert.*;
导入ilog.cplex。*;
导入java.util.*;
公共类SimpleLP{
公共静态void main(字符串[]args){
Solve();
}
公共静态void Solve(){
int n=4;
int m=3;
双[]p={310.0380.0350.0285.0};
双[]v={480.0650.0580.0390.0};
双[]a={18.0,15.0,23.0,12.0};
双[]c={10.0,16.0,8.0};
双[]V={6800.08700.05300.0};
试一试{
IloCplex模型=新的IloCplex();
IloNumVar[][]x=新的IloNumVar[n][];
对于(int i=0;i

如果有人能帮我解决这个问题,我将不胜感激。
问候,

Bahman

我应该使用model.diff(比例重量[j],y),0.0),而不是.addEq()

出现了什么错误?什么是约束?嗨,Jokster,错误:线程“main”java.lang中的异常。错误:未解决的编译问题:类型列表中的方法add(IloRange)不适用于SimpleLP.Solve(SimpleLP.java:69)和SimpleLP.main(SimpleLP.java:8)中的参数(IloConstraint) .................................................................................................... 约束被认为是将线性不等式和性质存储为一个数组。我对这个问题有异议:Constraints.add(model.addEq(proportalweight[j],y));其中y是一个决策变量。ThanksAlso,error:“add”-类型列表中的方法add(IloRange)不适用于参数(IloConstraint),例如,如果我将“y”更改为数组,如V[j],则错误将被消除。我认为IloRange和add方法不能保存y,因为它是一个决策变量。但是,我不知道如何将这个约束保存到数组lis约束中。这个问题是交叉发布的。
import ilog.concert.*;
import ilog.cplex.*;
import java.util.*;

public class SimpleLP {

    public static void main(String[] args) {
        Solve();
    }
    public static void Solve() {
        int n = 4;
        int m = 3;

        double[] p = { 310.0, 380.0, 350.0, 285.0 };
        double[] v = { 480.0, 650.0, 580.0, 390.0 };
        double[] a = { 18.0, 15.0, 23.0, 12.0 }; 
        double[] c = { 10.0, 16.0, 8.0 }; 
        double[] V = { 6800.0, 8700.0, 5300.0 }; 

        try {

            IloCplex model = new IloCplex();

            IloNumVar[][] x = new IloNumVar[n][];
            for (int i = 0; i < n; i++) {
                x[i] = model.numVarArray(m, 0, Double.MAX_VALUE);
            }

            IloNumVar y = model.numVar(0, Double.MAX_VALUE);

            IloLinearNumExpr obj = model.linearNumExpr();
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    obj.addTerm(p[i], x[i][j]);
                }
            }

            model.addMaximize(obj);

            for (int i = 0; i < n; i++) {
                model.addLe(model.sum(x[i]), a[i]);
            }


            List<IloRange> Constraints = new ArrayList<IloRange>();

            IloLinearNumExpr [] usedWeightCap = new IloLinearNumExpr[m];
            IloLinearNumExpr [] usedVolumeCap = new IloLinearNumExpr[m];
            IloLinearNumExpr [] proportionalWeight = new IloLinearNumExpr[m];

            for (int j = 0; j < m; j++) {
                usedWeightCap[j] = model.linearNumExpr();
                usedVolumeCap[j] = model.linearNumExpr();
                proportionalWeight[j] = model.linearNumExpr();

                for (int i = 0; i < n; i++) {
                    usedWeightCap[j].addTerm(1.0, x[i][j]);
                    usedVolumeCap[j].addTerm(v[i], x[i][j]);
                    proportionalWeight[j].addTerm(1/c[j], x[i][j]);
                }
            }
            for (int j = 0; j < m; j++) {

                Constraints.add(model.addLe(usedWeightCap[j], c[j]));

                Constraints.add(model.addLe(usedVolumeCap[j], V[j]));

                //model.addEq(model.prod(1/c[j], usedWeightCap[j]), y);
                //Constraints.add(model.addEq(proportionalWeight[j], y)); /*This is my problem that I cannot add this constraint into the list*/
                model.addEq(proportionalWeight[j], y);
            }
            if (model.solve()) {
                System.out.println("Objective Value: "+ model.getObjValue());
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        System.out.println("x*["+(i+1)+"]"+"["+(j+1)+"] : "+model.getValue(x[i][j]));
                    }
                }
                System.out.println("y* : "+ model.getValue(y));
            } else {
                System.out.println("Problem not solved :(");
            }

            model.end();

        } catch (IloException ex) {
            ex.printStackTrace();
        }
    }
}