Anylogic-высвобождение агентов, соответствующих определенному условию из объекта ожидания

#java #simulation #anylogic

#java #Симуляция #anylogic

Вопрос:

У меня есть объект, производящий определенные продукты, и в этом объекте в основном есть 3 вида отличительных продуктов. Я пытаюсь закодировать диаграмму действий так, чтобы при наличии входящего заказа определенного продукта с определенным количеством продукт освобождался из объекта «Ожидания», а затем выпущенный продукт переходил в объект задержки, который представляет производство.

Продукт является агентом с параметром name, и есть три продукта A, B, C. Есть ли способ реализовать это?
Подводя итог, можно сказать, что существует три вида продуктов, которые все сохраняются в одном объекте ожидания. Я хочу реализовать так, чтобы, если есть заказ продукта A в количестве 3, то 3 продукта A освобождаются от объекта ожидания.

Я упростил модель, здесь у меня есть 2 типа продуктов, A и B. Таким образом, в центре распространения продукты хранятся до тех пор, пока они не будут выпущены. Агент продукта используется в потоке центра распространения со строковым параметром «тип». Агент заказа используется в потоке заказов со строковым параметром «ProductType» и целочисленным параметром «Количество». То есть order содержит информацию о том, какой продукт заказан и сколько продуктов заказано.

Именно здесь я хотел бы закодировать так, чтобы только определенные продукты, заказанные по заказу, выпускались с количеством, указанным в заказе В настоящее время, я закодировал так, но, конечно, он не может найти, например, только продукт в «пуле».. Если я поступлю таким образом, мне нужно иметь отдельный объект ожидания для каждого продукта, но я бы хотел этого избежать..

Ответ №1:

Вам необходимо создать агент заказа, который указывает информацию вашего заказа… этот заказ будет иметь параметр, называемый, например, numProductA, который указывает, сколько продуктов A в заказе.

Затем вы можете сделать для своего агента заказа.

 List <Product> productsA=findAll(waitBlock,w->w.product.type.equals("A")).subList(0,agent.numProductsA);
for(Product p : productsA){
     p.order=agent;//You will probably need to associate that product to that order so you can know later in the flow.
     waitBlock.free(p);
}
  

Здесь я предполагаю, что у вас ВСЕГДА будет достаточно prodcutsA в вашем блоке ожидания … если это не так, вам необходимо реализовать дополнительную логику, которая может быть более или менее сложной в зависимости от случая.

Комментарии:

1. Привет! Спасибо! На самом деле я забыл сказать, что у меня уже есть отдельный процесс заказа, который содержит еще один блок ожидания. Здесь поступают заказы, и заказы содержат название продукта и количество продукта. Заказы остаются в другом блоке ожидания, где они будут освобождены в случае выполнения. Таким образом, общая логика диаграммы действий заключается в том, что сначала проверяется количество в блоке ожидания, где продукты остаются до выпуска, и если количества недостаточно, сначала отправляются доступные количества, а оставшееся количество запускает производство.

2. Итак, я предполагаю, что в этом случае я могу сначала объявить целое число что-то вроде int deliverQuantity = orderQuantity — StockA и поместить это как: List <Product> productsA=findAll(waitBlock,w->w.product.type.equals(«A»)).Подсписок(0, агент. Количество доставки)

3. Здравствуйте, я попробовал код и выдает ошибку «Продукт не может быть разрешен или не является полем», а также «агент не может быть преобразован в переменную». В настоящее время у меня есть агент продукта с параметром типа и агент заказа с параметром количества и имени. Я использую диаграмму действий после проверки запасов. У заказа есть свой собственный блок ожидания, в котором он остается, а продукты сохраняются в отдельном объекте ожидания.

4. Существует событие, которое обрабатывает эту таблицу действий обработки заказа, и обработка заказа имеет индекс. Этот индекс увеличивается до размера объекта ожидания заказов. Итак, я попробовал следующее: if(order.get(index) . Product == «A»){ Список <Продукт> productsA=findAll(db,w->w.Product.type.equals(«A»)).Подсписок(0, агент. Количество); for(Product p : productsA){ db.free(p);} order.free(order.get(index)); }. db — это имя объекта ожидания для продукта. Я думаю, что я ошибся в части поиска, но я не смог выяснить, где .. не могли бы вы дать совет по этому поводу? Заранее большое вам спасибо!

5. честно говоря, мне нужно было бы увидеть вашу модель… Я, очевидно, использовал Product, предполагая, что вы назвали свой тип агента Product, но если вы этого не сделали, я не могу догадаться… И я очень ленив для игры в угадайку здесь… таким образом, вы либо предоставляете всю необходимую информацию, либо делитесь моделью, либо соглашаетесь с тем, что вы сами по себе.. Представьте, что я самый важный человек в мире, и 15 минут консультации со мной будут стоить вам всей вашей жизни. сбережения… что бы вы сделали, чтобы эти 15 минут считались? как бы вы подготовили свой вопрос, чтобы оптимизировать эти 15 минут…