2017-01-05 8 views
2

일부 구로비 코드를 CPLEX로 번역하려고하는데 변수의 시작 값을 설정하는 방법을 배우는 데 문제가 있습니다.구로비의 .set() 메소드와 동일한 CPLEX는 무엇입니까?

원래의 코드는 다음과 같습니다

for (int b=0; b<nB ; ++b){ 
    for (int t=0; t<t_max; ++t){ 
     Yvars[b][t].set(GRB_DoubleAttr_Start, startVals[b][t+shift]); 
    } 
} 

무엇 등가 CPLEX 코드 것입니까? 나는 이것을하는 방법의 어디에서나 정보를 찾을 수 없다.

IloNumVarArray startVar(env); 
IloNumArray startVal(env); 
for (int b = 0; b < nB; ++b) 
    for (int t = 0; t < t_max; ++t) { 
     startVar.add(Yvars[b][t]); 
     startVal.add(startVals[b][t+shift]); 
    } 
cplex.addMIPStart(startVar, startVal); 

을 단지 개인에 영향을 미치지 :이 같은 모델 자체에 시작 값을 추가 할 것을 제안하는, 그러나

http://www.ibm.com/support/knowledgecenter/en/SS9UKU_12.4.0/com.ibm.cplex.zos.help/UsrMan/topics/discr_optim/mip/para/49_mipStarts.html

: 내가 찾을 수있는 가장 가까운이있다 변수는 원래 코드와 같습니다. 구로비 (Gurobi)와 같은 변수를 사용하는 방법이 있습니까? 아니면 한 번에 모든 것을해야합니까?

답변

1

CPLEX에서 MIP 시작을 추가하는 방법은 정확하며 대체 구문은 없습니다. "모든 것을 한 번에해야합니까?"라는 말의 의미가 정확히 무엇인지 모르겠지만 아마도 모든 변수가 아닌 변수의 하위 집합에 대해 MIP 시작 값을 제공 할 수 있는지 여부를 묻는 것입니다. 이 경우 MIP starts and effort level을 참조하십시오 (예 : CPX_MIPSTART_SOLVEMIP CPLEX는 하나 이상의 이산 변수 값을 지정해야하는 subMIP를 해결합니다). C++ API를 사용하는 addMIPStart 메소드에는이를 제어하기위한 선택적 effort 매개 변수가 있습니다.