2014-10-19 4 views
1

Я занимаюсь оптимизацией в лесном хозяйстве, где набор компаний C может вычесть несколько пиломатериалов из некоторого ассортимента A из набора урожая I. Параметр x [I, J, V, T, C, A] представляет собой поток из зоны сбора I в лесопилку J, использующую транспортное средство V в момент времени T для компании C с ассортиментом A.Нужно переделать, чтобы избежать infeasiblity

У меня есть проблема в том, что каждая лесопилка должна соответствовать минимальная потребность, d_minus. Это делается в:

# The total flow into a node at time period t must exceed the minimum demand. 
subject to Constraint2 {j in J, t in T, p in T, c in C, a in A: p <> t}: 
    sum{v in V, i in I} x[i,j,v,p,c,a] >= d_minus[j,t,c,a]; 

Проблема состоит в том, что транспортные средства V имеют удельную емкость, смоделированный в:

# The flow must not exceed the total capacity for each vehicle and time period 
subject to Constraint6 {v in V, t in T}: 
    sum{i in I, j in J, c in C, a in A} x[i,j,v,t,c,a] <= capacity[v]; 

Это заставляет компилятор однако жаловаться над невозможные рамки на constraint2. Например

presolve: constraint Constraint2[1,1,6,1,3] cannot hold: 
body >= 1000 cannot be <= 273; difference = 727 

Im, используя 4 транспортных средств и емкость 40 для каждого транспортного средства (я попытался с помощью 400 и 1000, а также, но осталась ошибка). Параметр d_minus находится между 500 и 1000.

Im думает, что параметры не должны быть слишком узкими. Используя мощность 1000, они должны соответствовать потребностям с автопарком из 3, которые я хотел бы получить. Я склонен, что ограничения «для всех» - это то, что ограничивает решение, вызывая ошибку. Я попытался использовать «для всех t в T, j в J» для Constraint2, но тогда он не может найти эти индексы для d_minus. У кого-нибудь есть ключ?

С уважением

ответ

1

Я предлагаю использовать команду solexpand для отображения ограничения Constraint2[1,1,6,1,3] после presolve:

solexpand Constraint2[1,1,6,1,3]; 

Это может дать некоторое представление о том, что именно является причиной неосуществимости. Поскольку проблема связана с одним ограничением, это не должно быть слишком сложным, если у вас нет очень большого выражения ограничений, и в этом случае я рекомендую уменьшить ваш набор данных до минимально возможного, что по-прежнему вызывает неосуществимость.

+0

Спасибо за ваш ответ! Я использую сервер NEOS, и добавление этой команды в файл .run ничего не печатало. Пробовал Google, как использовать solexpand с NEOS, но я ничего не нашел. Вы знаете какой-либо способ отслеживания ошибок с помощью NEOS? – Cenderze

+0

Теперь он работал с помощью solexpand! Спасибо за это, не знал об этом. Спасибо за ваш ответ! Я пробовал использовать solexpand, который дал мне выход, отредактированный в моем исходном сообщении. Я изменил ограничение d_minus, чтобы стать 1 для всех комбинаций. Это дало мне решение, что все переменные x должны быть 0. Знаете ли вы, как это могло бы быть? – Cenderze

+1

Я решил эту проблему сейчас благодаря вашему вводу. Разумеется, принят и подтвержден ваш ответ. Еще раз спасибо! – Cenderze

 Смежные вопросы

  • Нет связанных вопросов^_^