Решаем очень интересную задачу

1. Shining_ninja 2191 19.02.12 16:52 Сейчас в теме
Условие:
Торговая компания «Планета» ведет отгрузки клиентам с оптового склада следующим образом. Покупатель приносит на склад накладную (выписанную в отделе продаж), в которой перечислены покупаемые им товары, для каждого товара указано количество. Работник склада берёт накладную и проходит по складу, собирая заказанный товар в тележку. После того как весь товар, указанный в накладной, собран в нужном количестве, работник возвращается с тележкой к месту выдачи. Поскольку товары для одной накладной могут располагаться в разных местах, сбор товаров по накладной обычно занимает много времени. Требуется: для оптимизации сбора товара с учётом информации о размещении товара в ячейках на складе необходимо разработать печатную форму «Ведомость сбора товара».

Склад имеет прямоугольную форму


Товар хранится в рядах, каждый из которых разбит на ячейки (количество ячеек во всех рядах одинаково). В одной ячейке может храниться только один товар (но в любом количестве). Некоторые ячейки могут быть пустыми.
Все ячейки имеют размер 1 м - 1 м, расстояние между рядами также составляет 1 м. На рисунке ячейки выделены тёмным цветом.
Подход к каждому ряду возможен только с восточной стороны, доступ к ячейке ряда — только с южной стороны. Например (см. рисунок), товар, расположенный в ячейке 4 ряда 3, можно взять только с позиции А, а кратчайший путь из позиции А в позицию Б выделен толстой линией и имеет длину 32 м.
Крестиком (X) на рисунке помечено место выдачи товара.

Необходимо разработать печатную форму «Ведомость сбора товара», в которой указана последовательность сбора товара. Печатная форма должна формироваться из накладной (кнопка «Ведомость» на форме).
Формат печатной формы:
Ведомость сборки товара
Накладная: <Номер накладной>

№ Товар Кол-во Ряд Ячейка Расстояние (м)
1 Товар 1 5 1 10 7
2 Товар 2 3 3 6 20
3 Товар 3 2 5 8 22
Путь до места выдачи: 17
Итого: 49

В базовой постановке задачи можно использовать следующие предположения:
1. Каждый товар хранится только в одной ячейке. То есть может быть так, чтобы в нескольких ячейках хранился один и тот же товар.
2. Количество хранимого товара в каждой ячейке неограниченно (т.е. заведомо превышает количество из накладной).
3. Оптимизация маршрута (т.е. нахождение маршрута наименьшей длины)

Задача решена, но пришлось затратить 4 таблицы значений, может кто-то подскажет более простой способ решения, подход к решению тут основывается на задачи Коммояжера, но подход к ячейкам можно, только с одной стороны, а это очень хорошая подсказка.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. sdpj 44 19.02.12 17:02 Сейчас в теме
(1) Shining ninja,
к олимпиаде готовитесь? :)
5. Shining_ninja 2191 19.02.12 17:05 Сейчас в теме
(4) jims

Вы в курсе))), я не прошу решение, охота услышать подходы к решению, просто я лучше пока своего подхода не могу найти.
2. Ягг 497 19.02.12 16:59 Сейчас в теме
Просто мысль :)

Очень напоминате задачу из "теории графов", и первое что хочется сделать - организовать матрицу смежности и с ней играться
3. Shining_ninja 2191 19.02.12 17:02 Сейчас в теме
(2) Ягг

Я руководствовался тем, что если нам нужен какой-то товар и он находится только у края (скажем второго ряда), то нам все равно к нему надо идти и по пути мы соберем все остальное, а по остаткам уже тоже надо делать анализ.
6. Ягг 497 19.02.12 17:07 Сейчас в теме
7. Shining_ninja 2191 19.02.12 17:11 Сейчас в теме
8. Ягг 497 19.02.12 17:23 Сейчас в теме
Она к 1С отношение имеет?

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

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

Используется:
1. Таблица список продктов
2. Матрица взаимного расположения продуктов с весами расстояний между ними (нужно подумать про оценку веса для каждой ячейки - наверно не сложная математика). Это тоже таблица значений
3. Таблица (или дерево) маршрутов с удельным весом.

Получилось три (наверно еще одно потребуется для вывода - хотя не уверен).

Еще раз говорю это просто попытка решения "на вскидку". За основу взял алгоритм поиска замкнутых циклов который в свое время делал :)
9. Shining_ninja 2191 19.02.12 17:35 Сейчас в теме
(8) Ягг

Один товар может храниться в разных ячейках в любых количествах.

Ты хочешь найти все локальные ( не оптимальные) решения и среди них выбрать оптимальный, а если локальных будет около 2000 решений, то компьютер может задуматься надолго...
Я же предлагаю, сразу начать строить оптимальный и он в любом случае будет оптимальным (хотя да - там у меня много условий и 4-ре таблицы значений).
10. Ягг 497 19.02.12 17:39 Сейчас в теме
(9) Shining ninja, Согласен что идет излишний перебор, но ведь само потняие "оптимальный" предбплогает некую статистику - выбор лучшего из возможных. Следовательно, надо же наработать как-то эту статистику (иначе где гарантия что ты выбрал лучший путь?)

Да и не так долго задумается компьютер (все расчеты в рамках оперативки и т.д.).

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

Хотя, только высказываю свое мнение и только один из возможных подходов.
11. пользователь 19.02.12 18:08
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот