Я хочу использовать подход, основанный на столбцах, для моделирования моей проблемы в рамках создания столбцов. Сама IBM предоставляет простой пример с двумя ограничениями и тремя переменными для этого (см. Пример ниже). В этом примере сначала создаются ограничения диапазона, а затем создаются переменные и добавляются в диапазоны.
Мой вопрос заключается в том, как мне написать такую модель параметрическим способом, предполагая, что у нас есть m переменных и n ограничений? Мне нужно написать эту модель параметрическим способом, так как в моей модели может быть множество ограничений и переменных, и невозможно просто создать переменную, как указано в примере Cplex.
Чтобы добавить коэффициент переменной, используемой при связанных ограничениях, я попробовал следующую команду. Но это не сработало.
IloNumArray lowerbound(env,0 , 0, ILOINT);
IloNumArray upperbound(env,1,1, ILOINT);
IloRangeArray JobsAssignments = IloAdd(MasterModel, IloRangeArray(env, lowerbound, upperbound));
IloNumVarArray Assignment(env);
IloNumVarArray temp(env);
for (j = 0; j < nbJobs; j++)
{
temp.add(JobsAssignments[j](x));//assigning a coefficient to the variable "JobsAssignments" for each constraint j
}
Assignment.add(IloNumVar(TotalProfit(x) + temp));//assignment constraint
Пример, предоставленный IBM в каталоге Cplex:
IloEnv env = model.getEnv();
IloObjective obj = IloMaximize(env);
c.add(IloRange(env, -IloInfinity, 20.0, "constraint 1"));
c.add(IloRange(env, -IloInfinity, 30.0, "constraint 2"));
x.add(IloNumVar(obj(1.0) + c[0](-1.0) + c[1]( 1.0), 0.0, 40.0));
x.add(IloNumVar(obj(2.0) + c[0]( 1.0) + c[1](-3.0)));
x.add(IloNumVar(obj(3.0) + c[0]( 1.0) + c[1]( 1.0)));
x[0].setName("x1");
x[1].setName("x2");
x[2].setName("x3");
model.add(obj);
model.add(c);