IlcIntArray : IloNumArray
부산대학교 컴퓨터공학과 황준하
ILOG Solver 5.0
ILOG Solver의 이전 버전에서는
IlcIntArray 변수의 첨자로 IlcIntVar 변수가 사용되어 그 자체가 IlcIntVar 변수가 되도록 지정할 수 있었는데
IloNumArray에서는 그와 같은 기능을 사용학 수가 없습니다.
예제는 두 변수의 값이 IlcIntArray의 첨자로 쓰이는 경우입니다. 변수 두 개의 값이 나왔을 때 그 변수의 첨자에 해당하는 배열의 값의 합이 10 이상을 만족해야 합니다.
이 코드에서 이전 스타일과 같이 프로그래밍할 때는 제대로 답이 나오는데 현재 스타일에 맞출 경우 에러가 발생합니다.
* 코드
#include <iostream.h>
#include <ilsolver/ilosolver.h>
//#define ILCINTVAR
#ifdef ILCINTVAR
// 이전 스타일 : IlcIntVarArray 사용
void main()
{
IlcManager m(IlcEdit);
IlcIntArray Ary(m, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
IlcIntVarArray Vars(m, 2, 0, 9);
m.add(Ary[Vars[0]] + Ary[Vars[1]] >= 10);
m.add(IlcGenerate(Vars));
if (m.nextSolution()) {
m.out() << Vars[0].getValue() << \"\\t\" << Ary[Vars[0].getValue()] << endl;
m.out() << Vars[1].getValue() << \"\\t\" << Ary[Vars[1].getValue()] << endl;
}
m.end();
}
#else
// 현재 스타일 : IloNumVarArray 사용
void main()
{
IloEnv env;
IloModel model(env);
IloNumArray Ary(env, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
IloNumVarArray Vars(env, 2, 0, 9);
model.add(Ary[Vars[0]] + Ary[Vars[1]] >= 10); // ==> 에러 발생
IloSolver solver(model);
if (solver.solve()) {
solver.out() << solver.getValue(Vars[0]) << \"\\t\" << Ary[solver.getValue(Vars[0])] << endl;
solver.out() << solver.getValue(Vars[1]) << \"\\t\" << Ary[solver.getValue(Vars[1])] << endl;
}
env.end();
}
#endif