#c #cplex
#c #cplex
Вопрос:
Я использую лицензию IBM ILOG CPLEX 12.0 Accademy с c в Linux и пытаюсь построить свою модель.
Я реализую его в классе с именем MILP, и я хотел бы использовать некоторую функцию-член MILP для добавления переменных, ограничений и целевых функций.
Проблема в том, что когда я создаю переменную в функции, я не могу получить к ней доступ в области, в которой я вызвал функцию. Есть ли способ получить доступ к переменным? Работает ли это с IloNumVarArray и IloArray?
Здесь это пример такой функции:
void MILP::allocate_charging_current_variables(IloModel mod){
// just setting parameters for the for loop after
unsigned n_p = problem_setting->get_n_periods();
unsigned m = problem_setting->get_n_vehicles();
IloEnv env = mod.getEnv();
for (unsigned p = 0; p < n_p; p )
i_var[p] = IloNumVarArray(env, m, 0, 100, ILOFLOAT);
i_var.end();
}
Комментарии:
1.
mod
вероятно, должно быть передано,constamp;
если вы действительно не хотите сделать его копию; C передает по значению, если не указано иное, поэтому этот вызов копируетmod
в функцию
Ответ №1:
Переменные, созданные внутри функции, находятся только в области видимости этой функции. К ним нельзя получить доступ за его пределами — это сделано намеренно; и это особенность C как языка, независимо от CPlex (с которым я не знаком).
Если вы хотите, чтобы ваша переменная a использовалась в другом месте, определите ее там, где она вам нужна. Если вы хотите использовать функцию для получения значения для этой переменной — верните это значение из функции получения вместо того, чтобы оно создавало свой возвращаемый тип void
.
PS: В вашем фрагменте кода, похоже, i_var
нигде не определено.