首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得零输出的ILOG

获得零输出的ILOG
EN

Stack Overflow用户
提问于 2018-04-07 20:21:27
回答 1查看 44关注 0票数 2

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

代码语言:javascript
复制
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方法的输出时:

代码语言:javascript
复制
public static void main(String args[]) throws IloException {

    IloCplex cplex = new IloCplex();
    IloLinearNumExpr expr;

    expr = generateObjs(10, cplex);

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

它给出的输出如下:

代码语言:javascript
复制
(663.0*null + 941.0*null + 754.0*null + 324.0*null + 228.0*null + ...

但是,我希望得到如下的输出:

代码语言:javascript
复制
(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]+ ...

它用随机权重指定城市之间的路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-07 22:11:03

您已经接近了,但是您需要在IloNumVar方法中创建单独的generateObjs

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49711629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档