2014-12-25 4 views
0

추가 제약 조건 (가중치)이있는 TSP와 비슷한 문제를 해결하려고합니다. 이미 Java로 코드를 작성했지만 컴파일 할 때 문제가 있습니다. 이것은 내 코드입니다. :작은 모델을 해결하기위한 Cplex Java

package example01; 
    import ilog.concert.*; 
    import ilog.cplex.*; 
    import java.io.*; 
    import java.util.Arrays; 

    public class modele { 
    public static void solveme1(){ 

     int  n = 5;   
     int  [] W = {1,2,3,4,5};   
     int  [][] distance = { 
       { 0,14,10,12,20 }, 
       { 14,0,23,4,30 }, 
       { 10,23,0,25,18 }, 
       { 12,4,25,0,17 }, 
       { 20,30,18,17,0 }, 
      }; 

     try { 
      IloCplex cplex = new IloCplex(); 

      //variables 
      IloNumVar[][] x = new IloNumVar[n][]; 
      for (int i=0; i<n ; i++){ 
       x[i] = cplex.boolVarArray(n); 
      } 

      IloNumVar [] time = cplex.numVarArray(n, 0, Double.MAX_VALUE); 

      // objective 
      IloLinearNumExpr obj = cplex.linearNumExpr(); 
      for (int i =0; i<n; i++) {     
         obj.addTerm(time[i], W[i]); 

      } 
      cplex.addMinimize(obj);    

      //constraints 
      // Flux In 
      for (int j=0; j<n; j++){ 
       IloLinearNumExpr expr = cplex.linearNumExpr(); 
       for(int i=0; i<n; i++){ 
        if (i!=j){ 
         expr.addTerm(1.0,x[i][j]); 
        } 
       } 
       cplex.addEq(expr, 1);    
      } 

      // Flux Out 
      for (int j=0; j<n; j++){ 
       IloLinearNumExpr expr = cplex.linearNumExpr(); 
       for(int i=0; i<n; i++){ 
        if (i!=j){ 
         expr.addTerm(1.0,x[j][i]); 
        } 
       } 
       cplex.addEq(expr, 1);     
      } 
      // Starting at time =0 
      cplex.addEq(time[0],0); 

      // To force the starting from the location 0 
      for (int j=1; j<n; j++){ 
       IloLinearNumExpr expr = cplex.linearNumExpr(); 
       expr.addTerm(1.0,x[0][j]); 
       cplex.addEq(expr, 1); 
      } 

      // Constraint to determine the time in "J" after visiting "I" 
      for (int j=0; j<n;j++){ 
       for (int i=0;i<n;i++){ 
         if (i!=j){ 
         cplex.addGe(time[j], cplex.sum(cplex.sum(time[i], cplex.prod(x[i][j], 
         distance[i][j])),cplex.prod(cplex.sum(x[i][j],-1),Double.MAX_VALUE))); 
         } 
       } 
      } 

    if (cplex.solve()) 
    { 
    System.out.println("objective = "+cplex.getObjValue()); 
    } 
    else { 
    System.out.println("Not solved"); 

    } 
    cplex.end(); 

} 
     catch (IloException e){ 
      e.printStackTrace(); 
     } 
    } 
} 

로그는 다음과 같다 저널 :..

"열 하한 무한으로 설정 ', X2' Presolve 시간 = 0.00 초 (0.01 틱) 루트 노드 처리 (전 B & C) : 실시간 = 0.0 0 초. (0.01 ticks) 평행 b & c, 8 threads : 실시간 = 0.00 초. (0.00 틱) 동기화 시간 (평균) = 0.00 초. 대기 시간 (평균) = 0.00 초.
합계 (루트 + 분기 & 컷) = 0.00 초. (0.01 틱) 해결되지 않음 "

Thank you in advance for your answers ! */ 

답변

1

당신은 컴파일에 문제가있는 상태.이 프로그램을 실행할 때 문제가 얻을 날 것으로 보인다, CPLEX (모델이 불가능하다는 변수를 말하고 무한한 하한을 갖는 것은 실현 가능하지 않다.)