2017-02-02 4 views
0

Я реализую алгоритм ветвления и цены в c с использованием SCIP.Ветвительный механизм в B & P с использованием SCIP

Вопрос: Чтобы вызвать механизм ветвления, я использую основной механизм BRANCHEXECLP. Как SCIP знает, когда нужно разветвляться? Когда текущее релаксационное решение имеет нецелые решения, верно? Мне не нужно сообщать SCIP о вызове механизма ветвления для этого случая, правильно?

Я прошу, потому что (по большей части) мой алгоритм B & P работает хорошо. Но в какой-то момент он достигает узла, соответствующего двойному связанному решению. После решения проблемы ценообразования (и никакие столбцы не привлекательны для ввода главной проблемы) релаксационное решение на этом узле содержит нецелые решения, но механизм ветвления не вызывается. Запуск просто завершается. Любая идея о том, что здесь происходит?

Спасибо, Роб Карри

ответ

0

Я думаю, вы проверили при ценообразовании, что существуют дробные переменные в текущем решении LP?

И двойная привязка в этом узле равна глобальной двойной границе? Вы отметили свою цель, чтобы иметь только интегральные значения? В этом случае, если двойная привязка достаточно близка к первичной границе, которая округляет ее, дает такое же число, SCIP просто отрежет узел. Возможно, SCIP нашел новое решение после вашей цены, которое сразу же оказалось оптимальным благодаря текущей глобальной двойной привязке? SCIP автоматически запускает некоторые простые эвристики округления после каждого решенного LP в цикле ценообразования.

+0

Спасибо за помощь. Да, в текущем решении LP есть дробные переменные. Да, двойная привязка в текущем узле равна глобальной двойной границе. Нет, я не ставил своей целью иметь только целые значения. Целочисленные переменные не входят в цель. Эвристика может быть проблемой. Есть ли простой способ отключить эти эвристики? –

+0

И первичная граница не равна двойной границе? Эвристика не должна быть проблемой, они просто попытаются построить приемлемое решение. Но вы можете отключить их с помощью «set heur emph off» в интерактивной оболочке (это отключит все эвристики). Но я бы не рекомендовал этого. – Gerald

+0

Вы говорите, что бег просто уходит, что вы имеете в виду? Это требует оптимальности? Это прерывается? Если он прерывается, вы запустили режим отладки (скомпилируйте с OPT = dbg), и есть ли какие-либо утверждения? – Gerald

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