Я работаю над итеративным округлением LP с использованием концерта C ++. Мои кодировки ILP и LP работают правильно. Однако, когда я пытаюсь округлить LP итеративно, я получаю недопустимое подмывание. В каждой итерации я пытаюсь найти максимальное значение переменной решения x, которая является числом с плавающей запятой между 0-1, и сделать его равным 1 (на самом деле я добавляю его как новое ограничение). Однако иногда я получаю неосуществимое решение, которого на самом деле не должно быть. Ошибка как ниже:
Недопустимое ограничение индикатора
Время растворения: 3,53 сек.
Ошибка: cplex Ошибка 1217: Решение не существует.
Я работаю над графиком и пытаюсь найти кратчайший путь. Мой ILP правильно находит путь. Однако мне нужно LP решение для больших графиков. Для этого написал формулу ЛП. В результате я получил числа с плавающей точкой. Здесь я итеративно округляю одно ребро до 1. Наконец, я пытаюсь найти путь.
И мой код, как показано ниже:
do
{
max=0;
for(int i=0; i<edgesize*2;i++)
{
if(cplex.getValue(x[i])>0 && cplex.getValue(x[i])<1 && cplex.getValue(x[i])>max )
{
max = cplex.getValue(x[i]);
}
}
if(max !=0)
{
for(int i=0; i<edgesize*2;i++)
{
if(cplex.getValue(x[i])==max)
{
model.add(x[i]==1);
break;
}
}}
cplex.extract(model);
cplex.solve();
cplex.out() << "Optimal value: " << cplex.getObjValue() << endl;
it++;} while(max !=0);
В чем здесь проблема? Как я могу решить это? Заранее спасибо.
Я новичок в программировании.
Я пытаюсь решить MILP
от C
а также cplex concert technology
Когда я бегу
Я получил следующее сообщение
Pr=1.00 X ILO Array::operator[][](Iloint i): out of bound operation: index superior to size of array
Assertaion failed: (i<_impl->get size()) ||(ILOSTD(cerr)<<”X IloArray::operator[] (Iloint i): out of bounds operation: index superior to size of array”<< ILOSTD(endl), ilo_stop_ assert()).file c:\program file\ibm\ilog\cplex-studio 125\concert\include\ilconcert\iloenv.h, line 2204