2016-06-13 6 views
0

Я столкнулся с проблемой записи ограничений с использованием IloRange. Ошибка компиляции отсутствует, но код не запущен.Ошибка в определении ограничений с использованием IloRange в CPLEX (C++)

В коде ad_sales.u_j [j] является переменной, а спрос [j] и лямбда [j] являются параметрами. Синтаксис, который я использовал для ILoRange, - это ilorange (env, нижняя граница, переменная, верхняя граница).

Мне нужно найти двойники набора ограничений, поэтому я переключился на IloRange. Если я использую следующую команду вместо Ilorange, код работает нормально.

for(IloInt j=0; j<data.n; j++) 
model_ad.add(ad_sales.u_j[j] <= demand[j]*lambda[j]); 

Но следующее не работает:

IloRangeArray cons(env, data.n); 
for(IloInt j=0; j<data.n; j++) 
{ 
    cons.add(IloRange(env, 0, ad_sales.u_j[j],demand[j]*lambda[j])); 
    //model_ad.add(cons[j]); 
} 
model_ad.add(cons); 

Действительно ценю помощь.

Спасибо

ответ

0

Попробуйте позвонить IloExpr, как вы делали раньше, то есть,

IloRangeArray cons(env, data.n); 
for(IloInt j=0; j<data.n; j++) { 
    cons.add(d_sales.u_j[j] <= demand[j]*lambda[j]); 
} 
model_ad.add(cons); 

Проблема с пути является то, что IloRange ожидает IloNumExprArg, а не только IloNumVar.

Edit:

add() метод IloModel ожидает IloExtractableArray. Я попытался добавить объект ограничения к IloRangeArray и получил сообщение об ошибке no matching function for call to ‘IloRangeArray::add(IloConstraint&)’. Я бы предложил использовать IloConstraintArray, например.

IloConstraintArray cons(env); 
for(IloInt j=0; j<data.n; j++) { 
    cons.add(d_sales.u_j[j] <= demand[j]*lambda[j]); 
} 
model_ad.add(cons); 

Он работал с моим примером.

+0

Я попробовал ваш предложенный метод, ограничения добавляются в массив IloRange, но код не может их добавить в model_ad. Код перестает работать на 'model_ad.add (минус)' –

+0

Я очень ценю помощь ...... Я пробовал 'IloConstraintArray cons (env)' метод .... Он работает нормально .. Но проблема в том, что я хотите получить двойственность от набора ограничений. GetDual ожидает IloRangeArray и не работает с IloConstraintArray .... Код останавливается на 'for (IloInt j = 0; j

+0

Ну, в этом случае сначала запишите свой массив' cons', затем добавьте ограничения один за другим в цикле 'for (IloInt j = 0; j