英文:
RackPick agents based on parameter Delivery Date
问题
我有一个模型,在模型时间匹配代理参数的交货日期时,我需要使用PalletRack中的RackPick来挑选代理。
我有一个日期类型的参数,我正在使用以下代码生成随机的交货日期(在30天内)addToDate(date(), DAY, random()*30);
我有一个名为DeliveryDate的参数,在该日期上我想从货架上挑选代理。
我应该如何做呢?
英文:
I have model, where I need to pickup agents using RackPick from PalletRack when the model time matches the agent parameter delivery date.
I have a parameter of type date, and I am generating random delivery dates (withing 30 days) using the following code addToDate(date(), DAY, random()*30);
I have a parameter called DeliveryDate, and on that date I want to RackPick agents from the pallete rack.
How can I do this?
Here are the images,
答案1
得分: 2
我将只翻译你提供的文本,不包括代码部分:
注意:在AnyLogic中,参数应以小写字母开头,以避免与类和代理类型混淆。我在我的代码片段中使用了小写版本的您的参数。
我将假设您的托盘架上有通用代理类型的代理,并且在订单的deliveryDate
日期上,您想要挑选与orderQuantity
参数描述的数量相同的代理。
现在,您正在挑选代理,就在它们被放入托盘架中。为了避免这种情况,请在RackStore
和RackPick
之间添加一个等待块。然后创建一个动态事件 - 我称之为PickAgent
。它将负责在交付日期释放等待块上的代理。PickAgent
的操作是 wait.free(wait.get(0))
。
在您的订单种群中删除deliveryDate
的默认值,然后转到您的订单代理并在'On startup:'操作中编写以下内容:
double deliveryDays = random()*30;
deliveryDate = addToDate(date(), DAY, deliveryDays);
for (int i = 0; i < orderQuantity; i++){
main.create_PickAgent(deliveryDays, DAY);
}
这将设置您的订单的deliveryDate
参数,并创建与orderQuantity
相等数量的PickAgent
事件,这些事件将在deliveryDate
上采取行动。这将导致从托盘架中挑选出orderQuantity
数量的代理。
注意2:如果您的等待块为空,这将引发错误。您需要定义在存储中没有足够的代理来完成订单时应该发生什么。
英文:
Note: in AnyLogic parameters should start with a lowercase letter to avoid confusion with classes and agent types. I used the lowercase version of your parameters in my code snippets.
I am going to assume you have generic Agent type agents in your pallet rack and on the date deliveryDate
of an order you want to pick as many as the orderQuantity
parameter describes.
Right now you are picking agents as soon as they were put into the pallet rack. To avoid this, put a Wait block between RackStore RackPick. Then create a Dynamic Event - I called it PickAgent. It will be responsible for freeing an agent from the wait block on delivery dates. PickAgent's action is wait.free(wait.get(0))
.
In your orders population delete the default value of deliveryDate
and go to your Order agent and write the following in the 'On startup:' action:
double deliveryDays = random()*30;
deliveryDate = addToDate(date(), DAY, deliveryDays);
for (int i = 0; i<orderQuantity; i++){
main.create_PickAgent(deliveryDays, DAY);
}
This will set the deliveryDate
parameter of your Order and also create a number of PickAgent events equal to orderQuantity
that will take action on deliveryDate
. This will lead to orderQuantity
number of agents to be picked from the pallet rack.
Note 2: If your Wait block is empty, this will throw an error. You need to define what should happen when there are not enough agents in storage to fulfill an order.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论