相同代理类型的不同延迟时间 (AnyLogic)
Posted
技术标签:
【中文标题】相同代理类型的不同延迟时间 (AnyLogic)【英文标题】:differen delay times for the same agent type (AnyLogic) 【发布时间】:2020-07-13 22:36:18 【问题描述】:希望大家平安
假设我有以下过程:2 个不同的源,队列、延迟和接收器。 我有一个叫“患者”的代理。
我的目标:为来自第一个来源的患者提供不同的服务费率(延迟时间)(使用百分比)。换句话说,我想有 例如; 10% 的患者(来自源 1)的延迟时间等于 5 分钟,90% 的患者延迟时间等于 10 分钟。
我所做的是:我为代理(患者)分配了一个名为“百分比”的参数。并使用我输入的第一个来源的“退出时”
agent.percentage = 1;
然后是我写的延迟时间:
agent.percentage = 1 ? uniform(0.1);
但它没有用,我该怎么做?
【问题讨论】:
但是这段代码是怎么回事:agent.percentage = 1?统一(0.1);告诉 AnyLogic,对于 10%,他们应该延迟 5 分钟?我应该在哪里写 5 分钟的延迟? 【参考方案1】:你需要两者
存储代理的来源; 随机确定您需要的延迟时间(如果它们来自特定来源)。因此,您的代理参数应该称为 sourceNumber
或类似名称(而不是 percentage
),您在创建它时会相应地设置它(就像您所做的那样)。
那么您的延迟时间如下所示(假设 90%/10% 的分配仅适用于来源 1 的代理,其他来源的延迟时间为 50 以供说明):
agent.sourceNumber == 1 ? (randomTrue(0.1) ? 5 : 10) : 50
如果您需要它更复杂(例如,两个以上的源替代方案),或者希望它使用 Java if 语句和类似语句更“清晰”,您可以编写一个名为 getDelayTime
的函数,它返回一个double
并在延迟时间表达式中包含对该函数的调用。
注意:如果您需要单个来源 1 代理始终有 5 或 10 的延迟时间(如果他们多次经历该延迟),那么您需要执行在创建它们时进行采样(并在代理中存储它们将进入的延迟时间,或者它们将获得哪个延迟时间的指示符)。
【讨论】:
以上是关于相同代理类型的不同延迟时间 (AnyLogic)的主要内容,如果未能解决你的问题,请参考以下文章