我一直在通过实现TSP问题来学习Cplex Java。我想创建一个在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]+ ...它用随机权重指定城市之间的路径。
发布于 2018-04-07 22:11:03
您已经接近了,但是您需要在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;
}https://stackoverflow.com/questions/49711629
复制相似问题