Как запланировать различные типы досок для формирования мостов
Предположим, мы хотим пройти от места $A$ до места $B$, но между ними есть несколько рек. Чтобы пройти от места $A$ к месту $B$, нам нужно построить мост для каждой реки.
У нас есть несколько видов досок. Различные типы досок имеют разную стоимость и длину, но одинаковые типы досок имеют одинаковую стоимость и длину. Мы можем использовать доски для строительства мостов. Однако количество доступных досок ограничено. Наша цель - построить мост для каждой реки, одновременно сводя к минимуму общую стоимость досок.
Чтобы лучше описать проблему, мы нарисуем фигуру, чтобы описать нашу проблему.
В трех реках длина мостов составляет $ d_1 $, $ d_2 $ и $ d_3 $ соответственно.
У нас есть $4$ типов досок. Пусть $ l_i $ и $ c_i $ обозначают длину и стоимость планки $ i $ -го типа. Пусть $\delta_i$ обозначает доступное количество досок $ i $ -го типа. Пусть $n_{ij}$ обозначает количество досок, используемых для построения моста $j$.
Тогда проблема может быть сформулирована следующим образом:
Минимизируйте $\sum_{j=1}^3 \sum_{i=1}^4 n_{ij}c_i$
улица
$ \ sum_ {i = 1} ^ 4 n_ {ij} l_i \ geq d_j $
$ \ sum_ {j = 1} ^ 3 n_ {ij} \ leq \ delta_i $
$ n_ {ij} \ geq 0 $ & $ n_ {ij} \ in Z $
Я думаю, что эта проблема должна быть NP-Hard, так как это целочисленная проблема программирования. Это правда? кто-нибудь знает, как решить эту проблему? Даже решение, которое не является оптимальным.
1 ответ
Если вы можете разделить планки и использовать элементы на нескольких мостах, и вы можете использовать планки разных типов на одном мосту, это не является NP-завершенным, потому что вы сначала используете самую дешевую планку на метр и продолжаете.
В противном случае он, вероятно, является NP-полным, потому что это тоже проблема упаковки бункера. Например, если вы не можете разделить доски, чтобы использовать части на нескольких мостах, предположим, что у вас есть этот набор данных:
- Река 1 имеет разрыв 7 метров
- Река 2 имеет разрыв 6 метров
С досками:
- 10 досок по 7 метров каждая. Цена: 60 $ за доску. Это 8,57 доллара за метр.
- 10 досок по 6 метров каждая. Цена: 40$ за доску. Это 6,66 доллара за метр.
Самый дешевый вариант - купить 1 доску каждой на общую сумму 100$, а не покупать 3 доски самого дешевого вида на общую сумму 120$.
Что касается решения: обратите внимание на метаэвристику (поиск по Табу, имитация отжига, позднее принятие) и программное обеспечение, такое как OptaPlanner (Java, открытый исходный код).