SCIP и филиал и цена

0

У меня есть общий вопрос о SCIP. Мне нужно использовать SCIP как структуру Branch и Price для моей проблемы, я код в c++, поэтому я использовал пример VRP в качестве шаблона. В некоторых случаях код останавливается на дробном решении и возвращает это как оптимальное решение, я думаю, что что-то не так, мне нужно установить некоторые параметры, чтобы сообщить SCIP о поиске целочисленного решения или я допустил ошибку, я верьте, что он не должен останавливаться и вместо этого входить в дробное решение, пока не достигнет целочисленного решения (без какой-либо другой отрицательной колонки с уменьшенной стоимостью). Я также решаю подзадачу оптимально! любые коммиты?!

  • 1
    Привет, не могли бы вы предоставить нам более подробную информацию о ваших изменениях в примере VRP, в частности, в коде цены? Кроме того, как далеко ваше решение от целостности? Не могли бы вы добавить какой-нибудь выход решения SCIP, полученный через SCIPprintSol () ?
  • 0
    Я изменил код VRP и адаптировал его для неметрической версии проблемы определения местоположения некапитализированного объекта. Основные изменения в коде цены связаны с функцией ценообразования, в которой я должен найти подмножество минимальных затрат в качестве входных столбцов.
Показать ещё 16 комментариев
Теги:
scip

1 ответ

1
Лучший ответ

Если вы определяете переменные постоянными и просто добавляете ценник, SCIP решит главную проблему до оптимальности (т.е. Разрешит ограниченный мастер, добавит улучшающие столбцы, разрешит обновленный ограниченный мастер и т.д., Пока не будут улучшены столбцы найденный).

Нет никаких оснований для того, чтобы SCIP проверял, является ли решение интегральным, потому что вы явно сказали, что не возражаете, являются ли значения переменных неотъемлемыми или нет (путем определения их непрерывности). С другой стороны, если вы определяете переменные как целочисленного (или двоичного) типа, SCIP будет делать то, что я описал ранее, но в конце проверить, имеют ли все интегральные переменные целое значение и ветвь, если это не так,

Однако следует отметить, что все правила ветвления в SCIP имеют ветвление на переменных, т.е. Принимают целочисленную переменную с дробным значением и разделяют ее домен; двоичная переменная была бы зафиксирована на 0 и 1 в двух дочерних узлах. Обычно это плохая идея для отрасли и цены: во-первых, она довольно неуравновешенная. У вас есть огромное количество переменных, из которых только немногие будут иметь значение 1 в конце, большинство из них будут равны 0. Поэтому фиксация переменной до 1 имеет большое влияние, а фиксация ее на 0 практически не влияет. Но что более важно, вам необходимо принять решение о ветвях в вашей ценовой проблеме. Если вы установили переменную в 0, вы должны оставить приказ от создания копии запрещенного столбца (что, вероятно, улучшит решение LP, поскольку оно было частью прежнего оптимального решения). Для этого вам может потребоваться найти решение 2 (или более поздней версии k) -best. Поскольку вы решаете проблемы с ценой как MIP с помощью SCIP, вы можете просто добавить ограничение, запрещающее это решение (логический (линейный) для двоичных переменных или bounddisjunction (не линейный) для общих целочисленных переменных).

Я бы рекомендовал реализовать свое собственное правило ветвления, которое учитывает, что вы делаете ветку и цену и ветки более сбалансированным и не наносит слишком большого ущерба вашей цене. Например, ознакомьтесь с правилом ветвления Ryan & Foster, которое является стандартом для двоичных проблем с основной структурой распределения разделов. Это правило реализовано в Binpacking, а также пример Coloring, поставляемый с SCIP.

Пожалуйста, также ознакомьтесь с FAQ SCIP, где есть целый раздел о ветке и цене, который также охватывает разветвление темы (в частности, как решения ветвления могут храниться и выполняться с помощью обработчика ограничений, что вам нужно сделать для разветвления Райана и Фостера): http://scip.zib.de/doc/html/FAQ.php

Также было много вопросов о разветвлении и цене в списке рассылки SCIP http://listserv.zib.de/mailman/listinfo/scip/. Если вы хотите его найти, вы можете использовать Google и искать "site: listserv.zib.de scip search-string",

Наконец, я хотел бы порекомендовать взглянуть на проект GCG: http://www.or.rwth-aachen.de/gcg/ Это расширение SCIP для универсального решателя по разрезанию и цене, т.е. вам ничего не нужно реализовать, вы просто ввели оригинальную формулировку своей модели, которая затем переформулируется декомпозицией Данцига-Вулфа и решается путем разветвления и цены. Вы можете предоставить структуру для переформулировки, проблемы с ценой решаются как MIP (как вы это делаете), а также существуют различные правила ветвления. GCG также является частью пакета оптимизации SCIP и может быть легко встроена в пакет.

  • 0
    Спасибо за вашу полную информацию! Я буду работать над этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню