Доступ к переменным модели

#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 нигде не определено.