gpt4 book ai didi

AnyLogic - 由条件触发的转换

转载 作者:行者123 更新时间:2023-12-04 17:56:35 35 4
gpt4 key购买 nike

我是 AnyLogic 的新手...但它让我发疯!!!

这是非常基本的...在 AB 模型中,我希望一定比例的代理从一种状态转到另一种状态...但它发生了一些我无法理解的事情:S

enter image description here

我有 1000 个代理...我预计 950 个会进入 V3 状态...但是 enter image description here

只有 889 个代理更改状态:(
似乎条件被评估了两次......确实是 0.95*0.95=0.90..这正是代理更改状态的百分比:(

不满意我尝试将条件放在“守卫”中 enter image description here

结果是完美的!!!
enter image description here

谁能帮我理解这个? :(我必须修改整个模型...我什么时候必须放置“条件”以及什么时候放置“守卫”?

谢谢大家!!

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^

来自@sdaza 模型

enter image description here enter image description here

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^

AnyLogic 支持团队的回答

_条件被评估两次以防它最初返回 true。当代理进入具有输出条件转换的状态时执行初始检查。如果某个转换条件返回真,引擎会尝试触发它。这里再次检查条件。如果条件返回false,它将被取消,agent保持状态。换句话说,condition 应该返回 true 两次才能执行。

在您的情况下,只有返回“true”的代理执行了两次转换,并且概率与结果匹配:0.95 * 0.95 = 0.9。这是实际概率。

希望对你有帮助_

虽然我不明白为什么会这样......

最佳答案

一些背景和示例模型可以帮助您了解 AnyLogic 响应。

背景

AnyLogic 条件在模型的每一步都被检查(即,在模型开始时和在开发人员显式创建或通过使用的 AnyLogic 元素隐式创建的每个事件之后)。 AnyLogic 还在幕后使用超时 0 事件来影响状态转换;即,如果它决定任何类型的转换到期,它不会立即执行,而是安排一个事件在相同的模拟时间内执行此操作,这将在模型的下一步触发如果在同一模拟时间没有其他事件。如果您有专业版,您可以在模型运行时通过事件查看器看到它(见下文)。

条件转换

由于上述原因,条件是在模型开始时评估的。如果它是 true,则安排超时 0 事件来影响转换。当 this 触发时,将再次检查条件(因为在同一模拟时间可能由于干预事件而不再为真)。如果第二次为 true,则转换继续进行。

示例模型

我改编了你的例子。我只有一个 Main 和一个状态图,其中有两个状态和两个转换:一个条件(使用您的 randomTrue(0.95) 条件)从状态 1 到状态 2,以及一个超时 1 将状态 2 发送回状态 1。通过将条件放入 函数(check),我可以添加一些额外的 traceln声明,以便我们可以更好地了解发生了什么。

Example model setup

使用显示的事件查看器运行它(设置为 Run Until time 0,以便它在模型启动时暂停)。条件评估为真,因此您可以看到设置的超时 0 转换事件。

enter image description here

我还为发生的条件转换和转换回状态 1 添加了一些 traceln 消息。这是一个运行示例。 (一旦条件未连续两次评估 true,转换将停止,因此将取决于为运行选择的随机种子。)

Checking condition at time 0.0: sampled true
Checking condition at time 0.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 1.0: sampled true
Checking condition at time 1.0: sampled true
Checking condition at time 1.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 2.0: sampled false
Checking condition at time 2.0: sampled true
Checking condition at time 2.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 3.0: sampled true
Checking condition at time 3.0: sampled true
Checking condition at time 3.0: sampled true
Probabilistically transitioned to state 2
Going back to state 1
Checking condition at time 4.0: sampled true
Checking condition at time 4.0: sampled false

请注意,在第一次转换后每次都有三个 条件评估。我认为这是因为当状态 2 --> 状态 1 转换事件触发时(在其操作代码完成之后但转换实际完成之前)也会评估条件。它在这些点评估为 true 还是 false 是无关紧要的,因为 Agent 尚未处于状态 1,因此状态 2 转换不是“事件的”。 (这看起来确实有点奇怪,因为如果代理处于条件转换处于事件状态的状态,则仅检查条件会更有效。但是,我对这个额外的评估没有其他解释。)

然后它到达状态 1,因此检查条件(立即,没有事件),如果为真,则设置状态 2 转换事件(触发时引起第二次检查)。

关于AnyLogic - 由条件触发的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044358/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com