ILOG TSP获得空输出

时间:2018-04-07 20:21:28

标签: java cplex

我通过实施TSP问题来学习Cplex Java API。我想用50-1000之间的随机权重创建obj,如下所示:

public static IloLinearNumExpr generateObjs(Integer n, IloCplex cplex) throws IloException{

    IloNumVar[][] x = new IloNumVar[n][n];
    IloLinearNumExpr expr = cplex.linearNumExpr();
    Random r = new Random();


    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            if(i != j) {
                expr.addTerm(50 + r.nextInt(951), x[i][j]);
            }
        }
    }

    return expr;
}

然后,当我想在main方法中检查generateObjs方法的输出时:

public static void main(String args[]) throws IloException {

    IloCplex cplex = new IloCplex();
    IloLinearNumExpr expr;

    expr = generateObjs(10, cplex);

    System.out.println(expr.toString());
 }

它给出如下输出:

(663.0*null + 941.0*null + 754.0*null + 324.0*null + 228.0*null + ...

但是我希望获得如下输出:

(663.0*x[0][1]+ 941.0*x[0][2] + 754.0*x[0][3] + 324.0*x[0][4] + 228.0*x[0][5]+ ...

指定具有随机权重的城市之间的路径。

1 个答案:

答案 0 :(得分:1)

您已离婚,但您需要在IloNumVar方法中创建个人generateObjs。例如,您可以这样做:

public static IloLinearNumExpr generateObjs(Integer n, IloCplex cplex) throws IloException{

   IloNumVar[][] x = new IloNumVar[n][n];
   IloLinearNumExpr expr = cplex.linearNumExpr();
   Random r = new Random();

   for(int i = 0; i < n; i++) {
      x[i] = cplex.numVarArray(n, 0.0, Double.MAX_VALUE);
      for(int j = 0; j < n; j++) {
         x[i][j].setName("x[" + i + "][" + j + "]");
         if(i != j) {
            expr.addTerm(50 + r.nextInt(951), x[i][j]);
         }
      }
   }

   return expr;
}