0-1 Рюкзак с ограничениями на разбиение - PullRequest
8 голосов
/ 04 февраля 2012

У меня проблема в том, что на поверхности выглядит как рюкзак 0-1.У меня есть набор возможных «кандидатов», которые могут быть выбраны (или нет), у каждого кандидата есть «вес» (стоимость) и потенциальная «ценность».Если бы это была вся проблема, я бы использовал подход DP и покончил бы с этим.Но вот кривая: есть «ограничения разделения» на возможных кандидатов, которые могут быть в окончательном решении.

Я имею в виду, что пространство кандидатов разбивается на классы дискретной эквивалентности.Для моей конкретной задачи есть около 300 кандидатов и 12 возможных классов эквивалентности.Существуют «бизнес-правила», в которых говорится, что я могу иметь не более 3 кандидатов из класса C1 и 6 кандидатов из C2 и т. Д.или какая-либо другая форма обрезки, однако я несколько озадачен тем, как начать, так как я только знаком с решением DP для 0-1 ранца.Какие методы / подходы могут подойти для этой проблемы?Я также подумал, может быть, использовать библиотеку программирования ограничений, но не уверен, что она сможет найти решение?

1 Ответ

1 голос
/ 05 февраля 2012

Вы можете попробовать решатель Integer Linear Programming, в котором есть двоичная переменная для выбора каждого кандидата. Ограничения легко выражаются в виде линейных неравенств. С 300 переменными у решателя не должно быть особых проблем с его решением.

Самый простой способ - написать проблему в текстовом формате, например CPLEX LP, , а затем использовать решатель, такой как Coin CBC или GLPK.

...