首页 文章

ILOG TSP获得空输出

提问于
浏览
1

我一直在通过实现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 回答

  • 1

    你很接近,但你需要在 generateObjs 方法中创建单独的 IloNumVar . 例如,您可以这样做,如下所示:

    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;
    }
    

相关问题