Как смоделировать очередь заказов при трапезе по нескольким рангам (ядра процессора)?

Я только начинаю изучать Python. Я хочу смоделировать процесс обработки небольшого заказа, состоящий из нескольких этапов.

Допустим, имеется 1000 заказов с разными временными метками размещения. После получения заказа есть 3 шага: сборка (10–15 минут), упаковка (8–12 минут), доставка (5–10 минут). На каждом этапе выделено определенное количество рабочих, скажем, 10 для комплектации, 5 для упаковки и 2 для доставки.

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

Как создать переменную очереди, доступную всем процессорам в repast Python.

Я не могу найти примеры репаста Python, основанные на логистике. Я пытаюсь изучить библиотеки повторной обработки, такие как Simpy, но они не масштабируются для решения больших задач.

В примере случайного обхода в документации repast4py мы запускаем программу, используя

      mpirun -n 4 python rndwalk.py random_walk.yaml 

Это запустит программу на нескольких рангах, но все они будут использовать SharedGrid для взаимодействия. Есть ли что-то подобное для создания общих очередей для каждого этапа процесса, таких как очередь заказов, очередь комплектации, очередь упаковки и т. д., к которым могут получить доступ все работники?

1 ответ

Не зная подробностей, я думаю, вам нужно будет выбрать определенный ранг (например, ранг 0) для управления очередями и синхронизации их между процессами. Ранг 0 может создать очередь для каждого ранга из полной очереди и использовать mpi4py, чтобы поделиться ими с собой и другими рангами. Через некоторый подходящий интервал можно обновить полную очередь из очередей ранга и создать новые очереди ранга. См. документацию mpi4py, чтобы узнать, как отправлять и получать объекты Python между рангами. Например,

https://mpi4py.readthedocs.io/en/stable/tutorial.html#collective-communication

Широковещательная рассылка, разброс, сбор и т. д. представляют собой концепции коммуникации коллекции MPI. Это хорошее введение в них: https://mpitutorial.com/tutorials/mpi-broadcast-and-collective-communication/, хотя примеры приведены на C.

Наконец, repast4py отлично работает в одном процессе (mpirun -n 1), и в этом случае нет необходимости совместно использовать очереди. Итак, если ваше моделирование выполняется достаточно быстро для одного процесса, вы полностью избежите этой проблемы.

Другие вопросы по тегам