2017-05-15 6 views
0

CPLEX-C#으로 MILP 문제를 해결하고 싶습니다. 내 문제의 크기가 크고 CPU 시간을 개선하기 위해 초기 솔루션을 사용하고 싶습니다. 이 솔루션을 cplex에 추가하고 주어진 초기 솔루션으로 문제를 해결하기를 원합니다. I 다차원 배열 결정 변수 X[i][j] (이진 결정 변수)가 상기 값 start[i][j] 동일하고이 코드C# (콘서트 기술)에서 주어진 초기 솔루션으로 CPLEX를 시작하십시오.

 try 
     { 
      startvar = new INumVar[numberOfAllNode * numberOfAllNode]; 
      startval = new double[numberOfAllNode * numberOfAllNode]; 

      for (int i = 0, idx = 0; i < numberOfAllNode; i++) 
       for (int j = 0; j < numberOfAllNode; j++) 
       { 
        startvar[idx] = X[i][j]; 
        startval[idx] = start[i][j]; 
        idx++; 
       } 

      startvar = null; 
      startval = null; 

      cplex.AddMIPStart(startvar, startval,Cplex.MIPStartEffort.SolveMIP); 

     } 
    catch (ILOG.Concert.Exception) 
     { 
      throw; 
     } 

: 다음 코드를 사용했다. start[i][j]의 값은 매개 변수로 double [] array으로 저장됩니다. 나는이 코드를 실행하면 다음과 같은 오류가 나타나있다 :이 코드를 삽입해야 할 모델의 어느 부분에 1) :

Warning: No solution found from 1 MIP starts. 

Root node processing (before b&c): 
    Real time    = 5.07 sec. (2238.50 ticks) 
Parallel b&c, 4 threads: 
    Real time    = 0.00 sec. (0.00 ticks) 
    Sync time (average) = 0.00 sec. 
    Wait time (average) = 0.00 sec. 
          ------------ 
Total (root+branch&cut) = 5.07 sec. (2238.50 ticks) 
Couldn't Solve The Problem! 

나는이 개 질문이? (필자는 모든 제약 후 평균과 목표 값과 호출 addMin 또는 addMax 또는 그들 앞에 추가?)

2) 내가 오류 다음 한 startvar = null; startval = null;을 칭찬 할 때 : 당신이 할 수있는 경우

An unhandled exception of type 'ILOG.CPLEX.Cplex.UnknownObjectException' occurred in CPLEX.exe 

Additional information: CPLEX Error: object is unknown to IloCplex 

내가 감사하겠습니다 이 문제를 해결하기 위해 도움을 받으십시오.

답변

0

Error in using addMIPStart() in CPLEX C++과 매우 유사하지만 C#

일반적으로 모델 건물의 끝에서 solve() 직전에 AddMIPStart()를 호출합니다. 그것은 (나를 위해) 전화를 걸기위한 '자연스런'장소입니다.

제약 조건이나 목적에 언급되지 않은 변수가있는 경우 CPLEX가 Concert 식 등에서 내부 모델을 추출 할 때 내부 모델에 포함시키지 않습니다. 그런 다음 변수 값을 설정하려고하면 CPLEX가 변수를 인식하지 못합니다. mip start에있는 모든 변수가 실제로 제약 조건이나 목표에 어딘가에 포함되는지 확인합니다.

+0

답장을 보내 주셔서 감사합니다. 내 문제는 3 개의 의사 결정 변수 (2 개의 이진수와 1 개의 계속형 변수)가 있습니다. MIPSTART에서는 그 중 하나 (X [i] [j])에 대해서만 값을 제공합니다. 나머지 두 변수의 초기 값을 입력해야합니까? –

+0

모든 변수에 값을 제공 할 필요가 없다고 생각합니다. 보고 한 오류는 모델에없는 변수에 대한 mipstart 값을 제공하려고 시도 할 때 얻을 수있는 것입니다. 또한 2 진수 2 개 변수와 1 개의 연속 변수 만 가질 수 있습니다. 코드에서 변수의 수는 numberOfAllNode * numberOfAllNode 인 정사각형이어야합니다. numberOfAllNode의 크기는 얼마나됩니까? – TimChippingtonDerrick