Я должен сделать следующее. Узел T1 ожидает некоторый элемент из слоя выше. Как только он получен, он должен перенести контент на уровень ниже.
Ограничения: Слои T1 и B1 могут перемещаться горизонтально, однако узлы на уровне I1x и слои I2x не могут двигаться.
T1 может перемещаться по горизонтали для переноса контента на I11, I12 или I13. Как только контент находится в I11, I12 или I13, он может быть перенесен только в I21, I22 или I23 соответственно. Это означает, что если в I11 есть контент, он может перейти на I21, только если он бесплатный. Если I21 не является бесплатным, контент должен ждать в узле I11. B1, который может перемещаться горизонтально, чтобы получить контент от I21, I22 или I23.
Контент необходимо перенести с T1 на I11, I12 или I13, в зависимости от того, какой из них бесплатный. I12 всегда идеальный выбор.
Как только контент становится доступным на слое I2x, нижний слой B1 может перемещаться и получать контент с I2x. Конечная цель - перенести предметы из Т1 в В1. С B1 некоторые люди будут собирать предметы, которые были обработаны
Промежуточные слои были добавлены для повышения эффективности. Если промежуточных узлов не было, в любой момент времени могут быть готовы только два элемента. Таким образом, у нас может быть готово 8 предметов, если ни один не найден. Как только предметы станут доступны, человек может собрать их из B1 и предметов со слоя I2x до B1 и от I1x до I2x подряд.
Если мне нужно реализовать это программно, каков наилучший подход к решению этой проблемы? Кто-то из моей команды предложил конечный автомат, однако я не полностью убежден в этой идее. Если FSM - правильный выбор, есть ли какие-нибудь указания по его достижению?
Редактировать 1:
Предметы из I21, I22 и I23 должны извлекаться последовательно. Это необходимо, потому что, если что-то имеет приоритет - например, I22, то, если система производит продукцию со скоростью, превышающей скорость, которую человек может вынести из B1, элементы будут извлечены из I22, даже если I21 и I23 уже заполнены. Таким образом, I21 и I23 никогда не будут пустыми. Для этого мы можем дать узлу B1 свободу выбора, с какого узла он хочет получить элементы.