Страницы: 1
RSS
Задача о Ранцах, Нужна консультация по возможностям алгоритмов раскроя материала.
 
Чтобы сэкономить кому-то время, обозначу сразу:
Базовый бюджет 2 т.р.
Бюджет времени: думаю, час-полтора.
Но, в принципе, все обсуждаемо. Без фанатизма :)

Технология изготовления несколько замороченная, поэтому для упрощения решил изложить задачу в контексте всем известного рюкзака,
который грабителю ювелирной лавки нужно наполнить максимально полно.
Сформулировал несколько кривовато, но исключительно для ускорения примерного понимания сложности задачи и чтобы отсеять "школьников".
С конкретным исполнителем-консультантом, есть смысл обсуждать реальную задачу.
Предполагается наличие у консультанта опыта решения задач о мульти-рюкзаках, т.к. простую/банальную  моно-задачу раскроя я могу решить и сам.
Публичный макрос MCH уже поюзал (кстати, очень понравился). Пару лет назад на c#  делал задачу раскроя с помощью библиотеки OR-Tools от гугла.
Но, к сожалению, глубоко не погружался в саму механику алгоритмов (динамическое программирование, ветвей и границ и прочих).
Сейчас для себя определил 2 возможных пути решения. Но прежде, чем приступать, думаю нелишним будет часок пообщаться с кем-то поопытнее меня в данном вопросе.
Ведь могу получить бесценные советы в плане выбора алгоритма или хотя бы тактики его поиска.
Непосредственно исполнителю программировать ничего не надо - это просто беседа-консультация.


Итак сама задача

1 Есть 10 Рюкзаков типа А и 10 Рюкзаков типа Б

2 Каждый Рюкзак состоит из 5 отделений.
3 Каждый Рюкзак может быть настроен на одну (единую для него) ширину отделений.

4 Рюкзак типа А может быть настроен на ширину отделений 10 или 15 см
5 Рюкзак типа Б может быть настроен на ширину отделений 15 или 20 см
6 Ширина отделения никак не меняет их длину и количество в рюкзаке.

7 Слиток можно класть только в отделение точно такой же ширины как и он (не больше, не меньше,
т.е. это несколько необычный слиток, а скорее какой-то железнодорожный вагончик, с конкретной шириной рельсов).

8 Длина всех отделений Рюкзака А 50 см, Рюкзака Б = 60 см. Длина слитков кратко меньше, и разная.
Другими словами, внутри одного отделения стоит банальная задача линейного раскроя.
Сложность именно в том, что сами Рюкзаки то - с настраиваемой шириной отделений, что и добавляет комбинаторику, но на более высоком уровне.

9 Слиток характеризуется длиной, шириной (10, 15 или 20 см) и материалом (бронза, серебро и золото).

10 Набор слитков из указанных выше материалов четко задан (т.е. их не бесконечное множество; в реальности это уже полученные заказы клиентов).


Так как для простоты изложения реальная задача приведена к ранцу, следующие моменты могут показаться бредом в физическом смысле.
Но будем считать это игрой, поэтому просто таковы ее правила:

11 Каждое отделение можно заполнять только одним материалом - либо золотом, либо серебром, либо бронзой, либо ничем (это выгоднее, чем заполнить отделение наполовину).
Можно представить, что отделение - это литейная форма-дорожка, которую потом полностью заливаем нужным металлом, и потом только распиливаем на слитки.
И здесь есть пара нюансов:

11.1 В отличие от обычного распила трубы неиспользованный остаток пропадает навсегда, т.е. после распила остаток (даже большой) не представляет никакой ценности. И это - огромные потери!

11.2 Предыдущий пункт вынуждает использовать два недешевых выхода из ситуации:
А) за свой счет (т.е. с резким падением прибыли) изготавливать часть деталей из обрезков более дорогого материала. Но это все равно выгоднее, чем выбрасывать неиспользованный обрезок.
Б) если же для обрезка не удается подобрать уже заказанную деталь - изготавливать деталь на будущее ("на склад"), но он уже итак доверху забит этими неликвидами.
   Поэтому с точки зрения описанной модели ценность такого слитка "на потом" будет тарифицироваться на 50% дешевле (выгоднее чем просто выкинуть, но еще выгоднее подобрать из заказанных).

Типичная ситуация - это когда при любых комбинациях получается, что есть одно отделение, наполовину заполненное золотом, и одно наполовину заполненное серебром.
Соответственно, обрезки (читай - потери) - космические. Поэтому приходится как бы пере-изготавливать серебренные слитки из золота, и компоновать одно общее отделение из золота.


Цель как и всегда - найти самое прибыльное решение - сколько Рюкзаков использовать, на какую ширину отделений настроить каждый из них,
какие отделения не использовать совсем (не выгодно), какие детали изготовить из более дорого материала.

К сожалению, данный пример не учитывает еще ряд моментов в реальности решаемой задачи, которая совсем не рюкзак,
а скорее раскрой (т.е. есть отходы, более того - они очень критичны.


Но основную суть задачи я вроде бы описал.
Если у Вас есть опыт решения таких комбинированных задач и Вы готовы пообщаться со мной на эту (вернее уже реальную) тему часа полтора - пишите.
Созвон по скайпу или зуму - чтобы я мог показывать экран.
Страницы: 1
Наверх