动态调整源中的到达率
Dynamically adjusting arrival rate in source
建模问题背后的基本思想是生产机器的故障。
我想通过将到达率(即每秒到达数)设置为零 (Source.rate = 0
) 来对此进行建模。机器修好后,到达率再次设置为其实际值(例如,Source.rate = 5
)。虽然第一个命令完成了工作,但第二个命令似乎没有任何效果,即没有创建新代理。
模型部分比较简单:Source --> Select Output (decision about breakdown) --> true: go on production; false: delay (repair machine) --> 继续生产。
Source.rate = 0
在"breakdown"的出端口(false)被调用,Source.rate = 5
在"repair"的出端口被调用。
https://i.stack.imgur.com/hqGoI.png
当然,这个问题的模型可能不同(例如,使用 hold with disabled "forced pushing"),但是,我不清楚为什么我的方法不起作用。
提前致谢!
我不知道为什么你的模型不起作用(也许需要你的模型的更多细节),但我测试和工作的一个简单的解决方案如下:
您可以将源的 "Type of arrival" 设置为 "calls of inject() function",向您的模型添加一个事件并将其 "Trigger type" 设置为 "Rate" 并将其速率值设置为 5。然后在事件的动作代码中使用以下代码:
if(yourCondition)
{
source.inject(1);
}
希望对你有所帮助
而不是使用 source.rate=5;
使用 source.set_rate(5);
通过解释来扩展 Felipe 的回答:
Instead of using source.rate=5; use source.set_rate(5);
rate
实际上是 Source
块的参数(在 AnyLogic 意义上)。 (所有AnyLogic的Process Modeling块实际上本身就是AnyLogic开发的Agents,因此具有参数,变量等)
您可以直接设置 AnyLogic 参数(通过像您一样分配一个值),但它们也都有一个 set_<parameter name>
方法(函数),应该始终使用它,因为 这会触发此参数 的任何内部更改逻辑。正是这种触发逻辑(Source
块内部)导致 Source
到 're-evaluate' 速率正确。
(您可以在自己的模型中对参数使用更改逻辑,并且在更改参数需要对模型的其余部分进行一些 'adjustments' 时需要这样做;即,在更改的情况下不会 'just work' 因为模型的其他位在更改点之后读取新值。)
建模问题背后的基本思想是生产机器的故障。
我想通过将到达率(即每秒到达数)设置为零 (Source.rate = 0
) 来对此进行建模。机器修好后,到达率再次设置为其实际值(例如,Source.rate = 5
)。虽然第一个命令完成了工作,但第二个命令似乎没有任何效果,即没有创建新代理。
模型部分比较简单:Source --> Select Output (decision about breakdown) --> true: go on production; false: delay (repair machine) --> 继续生产。
Source.rate = 0
在"breakdown"的出端口(false)被调用,Source.rate = 5
在"repair"的出端口被调用。
https://i.stack.imgur.com/hqGoI.png
当然,这个问题的模型可能不同(例如,使用 hold with disabled "forced pushing"),但是,我不清楚为什么我的方法不起作用。
提前致谢!
我不知道为什么你的模型不起作用(也许需要你的模型的更多细节),但我测试和工作的一个简单的解决方案如下:
您可以将源的 "Type of arrival" 设置为 "calls of inject() function",向您的模型添加一个事件并将其 "Trigger type" 设置为 "Rate" 并将其速率值设置为 5。然后在事件的动作代码中使用以下代码:
if(yourCondition)
{
source.inject(1);
}
希望对你有所帮助
而不是使用 source.rate=5;
使用 source.set_rate(5);
通过解释来扩展 Felipe 的回答:
Instead of using source.rate=5; use source.set_rate(5);
rate
实际上是 Source
块的参数(在 AnyLogic 意义上)。 (所有AnyLogic的Process Modeling块实际上本身就是AnyLogic开发的Agents,因此具有参数,变量等)
您可以直接设置 AnyLogic 参数(通过像您一样分配一个值),但它们也都有一个 set_<parameter name>
方法(函数),应该始终使用它,因为 这会触发此参数 的任何内部更改逻辑。正是这种触发逻辑(Source
块内部)导致 Source
到 're-evaluate' 速率正确。
(您可以在自己的模型中对参数使用更改逻辑,并且在更改参数需要对模型的其余部分进行一些 'adjustments' 时需要这样做;即,在更改的情况下不会 'just work' 因为模型的其他位在更改点之后读取新值。)