Грузы различного вида (обозначим, как множество
) необходимо перевезти с одного берега на другой, для чего используется лодка. Объем груза каждого вида (обозначим, как
) строго меньше вместимости лодки
.
При перевозке грузы различного вида можно комбинировать только в заданных сочетаниях, т.е. в лодку могут быть помещены только заданные подмножества грузов множества
(одноэлементные подмножества множества
считаются априори заданными, остальные подмножества определяются в зависимости от вида грузов и текущих обстоятельств).
Каждому подмножеству множества
поставлено в соответствие число, определяющее время перевозки с исходного берега на другой (на семействе множеств
задана функция
). Время возврата лодки с противоположного берега на исходный является константой. Перевоз каждого груза по отдельности требует наименьшего количества времени, т.е. значение функции
всегда меньше или равно значению функции
). Но при этом
не обязательно может быть меньше, чем
).
Необходимо перевезти весь имеющийся груз на другой берег за минимальное время.
Груз каждого вида может делиться на части, т.е., если например, в лодку помещается груз
, а затем
, но для груза вида
не хватает места, часть груза
(или
) можно оставить до следующего раза (вопрос, также требующий разрешения, --- какой вид груза оставлять на берегу при перегрузе лодки.).
Не хотелось бы изобретать велосипед, а попытаться классифицировать приведенную выше задачу (а там сразу и метод (методы) решения обнаружится). Не удалось классифицировать приведенную задачу, как дискретную задачу о рюкзаке (о нескольких рюкзаках) или задачу о раскрое (хотя, аналогии ощущаются). Полной уверенности (доказательства) пока нет, но задача, кажется, NP-полная.
Имеющийся на данный момент метод решения задачи, позволяющий с уверенностью получить оптимальное решение, --- метод ветвей и границ (хотя, как кажется, применение метода ветвей и границ особенной эффективности по сравнению с полным перебором не даст, отсечение ветвей будет проводиться лишь на предпоследнем и последнем шаге). От метода в данном случае остается одно лишь красивое название, без ощутимой эффективности его применения.
Как здесь применить динамическое программирование (принцип Белмана) --- тоже пока не ясно.
Спасибо.