使用赋值运算符设置cplex java约束+=&引用;

使用赋值运算符设置cplex java约束+=&引用;,java,cplex,Java,Cplex,我在Java中使用Cplex,我有一个设置约束的问题 我有一个矩阵x[n][n],其中x可以是0或1。 对于每个i(1..n),所有j(1..n)之和=1 关于这篇文章中的答案:,我的代码设置如下: for (int i=0; i<n; i++){ IloNumExpr sum_over_i; for(int j=0; j<n; j++){ sum_over_i += x[i][j];

我在Java中使用Cplex,我有一个设置约束的问题

我有一个矩阵x[n][n],其中x可以是0或1。 对于每个i(1..n),所有j(1..n)之和=1

关于这篇文章中的答案:,我的代码设置如下:

for (int i=0; i<n; i++){
            IloNumExpr sum_over_i;
            for(int j=0; j<n; j++){
                sum_over_i += x[i][j];
            }   
            cplex.addEq(sum_over_i, 1.0);
        }

for(int i=0;i我还记得我很难找到一个如何在CPLEX Java API中实现线性表达式的示例,尽管CPLEX的文档通常都很好

要执行约束“对于每个i(1..n),所有j(1..n)之和=1”,我将执行

for(int i=0; i < n; i++) {
  IloLinearNumExpr lhs = cplex.linearNumExpr(); //lhs as in left hand side
  for(int j=0; j < n; j++) {
    lhs.addTerm(1.0, x[i][j]);        
  }   

  IloRange con = cplex.addEq(lhs, 1);
  con.setName("yourConstraintName(" + i + ")");      
}
for(int i=0;i

你不需要为你的约束设置一个名称,但是它总是帮助你调试你的模型。在java中不支持< /P>运算符重载,你不能只接受C++代码,并希望它在java中工作。你应该读java教程而不是在黑暗中绊倒,这也会消除关于零点的混淆。er例外请记住,
null
在某些语言中与
0
不同。
null
完全不同。感谢您的回答。类似“+=”的操作在java中工作,所以我希望它在C++代码时也能用于java/cPLY。非常感谢!Eclipse给我显示了一个“LHS”的错误,所以我把第二行改成“ILILIN NUMEXPRPR LHS=CPLEX。
Exception in thread "main" java.lang.NullPointerException
at ilog.cplex.CpxQextractor.visitLinkedExpr(CpxQextractor.java:73)
at ilog.cplex.CpxLinkedExpr.accept(CpxLinkedExpr.java:46)
at ilog.cplex.CpxRange.<init>(CpxRange.java:1337)
at ilog.cplex.IloCplexModeler.makeRange(IloCplexModeler.java:4316)
at ilog.cplex.IloCplexModeler.eq(IloCplexModeler.java:4902)
at TSP.main(TSP.java:57)
for(int i=0; i < n; i++) {
  IloLinearNumExpr lhs = cplex.linearNumExpr(); //lhs as in left hand side
  for(int j=0; j < n; j++) {
    lhs.addTerm(1.0, x[i][j]);        
  }   

  IloRange con = cplex.addEq(lhs, 1);
  con.setName("yourConstraintName(" + i + ")");      
}