addMIPStart()를 사용하는 동안 문제가 발생했습니다.CPLEX C++에서 addMIPStart()를 사용하는 중 오류가 발생했습니다.
처음에는 테스트 목적으로 일반 할당 문제 (이진 결정 변수 x [i] [] j가 하나만 있음)를 사용하고 addMIPStart()를 사용하여 바운드를 추가했습니다. 그것은 완벽하게 작동했습니다. 나는 내 자신의 문제에 같은 시도 할 때
하지만, 나는 오류 문제 CPLEX를 가지고 : "IloExtractable 189 IloNumVarl이 Iloalgorithm 000001ECF89B160에 의해 추출되지 않았습니다." 나는 다음과 같은 코드 조각을 추가 한 지금
x[k][p][t] = IloNumVar(env, 0.0, 1, ILOINT, name.str().c_str()); //binary
y[p][t] = IloNumVar(env, 0.0, 1, ILOINT, name.str().c_str()); //binary
z[k][p][t] = IloNumVar(env, 0.0, 1, ILOINT, name.str().c_str()); //binary
w[p][t] = IloNumVar(env, 0.0, IloInfinity, ILOINT, name.str().c_str()); //pure integer
.................. : 내 문제에
는 변수의 네 가지 유형이 있습니다 .... 시작 용액
/*************************************************/
IloNumVarArray startVar(env);
IloNumArray startVal(env);
IloNum remExtResource = 0;
IloInt cutOffTime = 0;
IloInt totExtResource = 0;
for (k = 0; k < K; k++) {
for (p = 0; p<P; p++) {
for (t = 0; t<T + 2; t++) {
startVar.add(x[k][p][t]);
startVal.add(0);
}
}
}
for (k = 0; k < K; k++) {
for (p = 0; p<P2; p++) {
for (t = 0; t<T + 1; t++) {
startVar.add(z[k][p][t]);
startVal.add(0);
}
}
}
for (p = 0; p<P2; p++) {
totExtResource = ceil(D[p]/a_e[p]);
cutOffTime = ceil(totExtResource/Q[p]);
for (t_p = 0; t_p<T + 2; t_p++) {
if (t <= cutOffTime){
startVar.add(y[p][t]);
startVal.add(0);
}
if (t > cutOffTime){
startVar.add(y[p][t]);
startVal.add(1);
}
}
totExtResource = 0;
cutOffTime = 0;
}
for (p = 0; p<P2; p++) {
remExtResource = ceil(D[p]/a_e[p]);
for (t = 0; t<T + 1; t++) {
if (t == 0) {
startVar.add(w[p][t]);
startVal.add(0);
}
else {
if (remExtResource == 0) {
startVar.add(w[p][t]);
startVal.add(0);
}
else if ((remExtResource > 0) && (remExtResource <= Q[p])) {
startVar.add(w[p][t]);
startVal.add(remExtResource);
remExtResource = 0;
}
else {
startVar.add(w[p][t]);
startVal.add(Q[p]);
remExtResource = remExtResource - Q[p];
}
}
}
remExtResource = 0;
}
// cplex.addMIPStart(startVar, startVal, IloCplex::MIPStartAuto, "secondMIPStart");
cplex.addMIPStart(startVar, startVal);
startVal.end();
startVar.end();
/*************************************************/
, I는 모두 X-변수 및 0에 Z-변수 만든다. 그리고 어떤 로직에 기초 0 일부이다 일부 , Y 변수는 1을 반면 일부 w-변수 다른 0을 반면, 전체 용량 Q [P]에 할당.
내가 따라야 할 논리는 동일하지만 여기에서 놓친 것을 찾을 수 있습니다. 저 좀 도와 주 시겠어요?