2014-04-29 2 views
0

나는 LP 반복 반올림 콘서트를 사용하여 C++. 내 ILP 및 LP 코딩이 제대로 작동합니다. 그러나 내가 LP를 반복 할 때 iterativly 나는 infeasible soulution을 얻을. 모든 반복에서 나는 결정 변수 x의 최대 값을 0-1 사이의 부동 소수점 수로 찾고 (실제로 나는 그것을 새로운 제약으로 더하고있다.) 1로 만든다. 그러나 때로는 내가 실제로 불가능한 실행 불가능한 솔루션을 얻습니다. 오류는 다음과 같습니다 : 실행 불가능한 표시기 제한 presolve 시간 : 3.53 초. 오류 : cplex 오류 1217 : 해결 방법이 없습니다.LP 반복적 인 반올림 콘서트 C++ 사용

그래프에서 작업 중이며 가장 짧은 경로를 찾으려고합니다. 내 ILP가 경로를 올바르게 찾습니다. 그러나 큰 그래프에 대한 LP 솔루션이 필요합니다. 그 목적을 위해 LP 수식을 썼습니다. 결과로 플로트 번호를 얻었습니다. 여기서 반복적으로 한 모서리를 1로 반올림합니다. 마지막으로 나는 경로를 얻으려고합니다.

그리고 내 코드는 다음과 같습니다 :

do 
    { 
     max=0; 
     for(int i=0; i<edgesize*2;i++) 
     { 
     if(cplex.getValue(x[i])>0 && cplex.getValue(x[i])<1 && cplex.getValue(x[i])>max) 
     { 
      max = cplex.getValue(x[i]); 
     } 
     } 

     if(max !=0) 
     { 
     for(int i=0; i<edgesize*2;i++) 
     { 
       if(cplex.getValue(x[i])==max) 
       { 

        model.add(x[i]==1); 

        break; 
       } 

     } 


     } 
    cplex.extract(model); 
    cplex.solve(); 
    cplex.out() << "Optimal value: " << cplex.getObjValue() << endl; 
    it++; 


    } while(max !=0); 

는 여기에서 문제가 될 것인가? 어떻게 해결할 수 있습니까? 미리 감사드립니다.

+2

을받은 MILP 내가 을 실행하면

C에 의해 cplex concert technology 해결하기 위해 노력하고 있습니다. x [i]의 최적 값은 '최대'였습니다. 1로 강요하면 문제를 실행 불가능하게 만들 수 있습니다. 궁극적으로 무엇을하려고하는지 반영하기 위해 질문을 변경하는 것이 좋습니다. –

+0

그래프에서 작업 중이며 가장 짧은 경로를 찾으려고합니다. 내 ILP가 경로를 올바르게 찾습니다. 그러나 큰 그래프에 대한 LP 솔루션이 필요합니다. 그 목적을 위해 LP 수식을 썼습니다. 결과로 플로트 번호를 얻었습니다. 여기서 반복적으로 한 모서리를 1로 반올림합니다. 마지막으로 나는 경로를 얻으려고합니다. – Berkehan

+0

최단 경로 문제에는 정수 속성이 있습니다. 어떤 모서리가 경로의 일부인지 알아야합니다. 따라서 반올림은 필요하지 않습니다. http://en.wikipedia.org/wiki/Shortest_path_problem#Linear_programming_formulation –

답변

-2

저는 프로그래밍 초보자입니다. 은 내가 그냥 [내가] (1)이 문제가 불가능한 만들 수있는이 될 수있는 변수 x를 반올림 다음과 같은 메시지

Pr=1.00 X ILO Array::operator[][](Iloint i): out of bound operation: index superior to size of array 
Assertaion failed: (i<_impl->get size()) ||(ILOSTD(cerr)<<”X IloArray::operator[] (Iloint i): out of bounds operation: index superior to size of array”<< ILOSTD(endl), ilo_stop_ assert()).file c:\program file\ibm\ilog\cplex-studio 125\concert\include\ilconcert\iloenv.h, line 2204 
+0

에서 도움을 받으십시오. – hamdi