源块中的费率是固定费率吗?
Is the Rate in the source block a fixed rate?
我有一个简单的源到接收器模型,我只是将 "Rate" 更改为每小时 6 个。我希望每小时生成固定的 6 个代理,但似乎在从 0 到 60 分钟的第一个小时内,只生成了 3 个代理。同样在60-120min的时间内,只生成了5个agent。
Anylogic 中是否有预热期或类似的东西可以解释正在发生的事情?
源块每小时不正好产生 6 个代理,它使用平均每小时 6 个泊松分布 (lambda=6) 生成代理。因此,您每小时获得的代理数量将是随机的。但是之所以第一个小时总是3,第二个小时总是5,是因为你的seed是固定的:
您可以在随机选项卡下单击您的模拟实验找到该选项。如果您更改为随机种子,它将每小时产生不同的代理,而不是总是 3 和 5。
要每小时生产正好 6 个,您需要使用一个事件。但首先创建一个通过注入生成代理的源:
并且事件 运行 每小时 6 次,向源添加 1 个代理:
另一种选择是只使用固定时间的到达间隔时间。这将为您提供与 Felipe 的回答相同的结果,但少了一个对象,因为您不需要该事件。
关于此方法需要注意的几个重要事项:
- 而不是6.0,使用参数会更好。您可以将此参数称为 dArrivalsPerHour。这将使您的源代码块在将来更易于阅读,并为您提供更好的灵活性。您的到达间隔时间为 1.0 / dArrivalsPerHour。
- 确保至少除以 (1) 双倍。如果你做 1/6,java 实际上会 return 0!这是因为 Java 两个整数相除 return 是一个整数,所以 java 只是截断了小数点。如果使用参数,只需将其类型设置为 double。通常为了防止将来有人不小心将我的参数类型更改为整数,我仍然会继续使用 1.0.
- AnyLogic 在这种方法中没有零时间到达。第一次到达时间为 0.166 小时。如果你想在零时间到达,然后是这种模式(它仍然是每小时 6 次,只是在开始时转移),那么你有几个选择。首先,您可以使用 Felipe 的方法并将首次出现时间设置为零。另一种方法是在启动时调用注入,或者在您完成模型具有的任何初始化代码后调用注入。
建模愉快!
我有一个简单的源到接收器模型,我只是将 "Rate" 更改为每小时 6 个。我希望每小时生成固定的 6 个代理,但似乎在从 0 到 60 分钟的第一个小时内,只生成了 3 个代理。同样在60-120min的时间内,只生成了5个agent。
Anylogic 中是否有预热期或类似的东西可以解释正在发生的事情?
源块每小时不正好产生 6 个代理,它使用平均每小时 6 个泊松分布 (lambda=6) 生成代理。因此,您每小时获得的代理数量将是随机的。但是之所以第一个小时总是3,第二个小时总是5,是因为你的seed是固定的:
要每小时生产正好 6 个,您需要使用一个事件。但首先创建一个通过注入生成代理的源:
并且事件 运行 每小时 6 次,向源添加 1 个代理:
另一种选择是只使用固定时间的到达间隔时间。这将为您提供与 Felipe 的回答相同的结果,但少了一个对象,因为您不需要该事件。
关于此方法需要注意的几个重要事项:
- 而不是6.0,使用参数会更好。您可以将此参数称为 dArrivalsPerHour。这将使您的源代码块在将来更易于阅读,并为您提供更好的灵活性。您的到达间隔时间为 1.0 / dArrivalsPerHour。
- 确保至少除以 (1) 双倍。如果你做 1/6,java 实际上会 return 0!这是因为 Java 两个整数相除 return 是一个整数,所以 java 只是截断了小数点。如果使用参数,只需将其类型设置为 double。通常为了防止将来有人不小心将我的参数类型更改为整数,我仍然会继续使用 1.0.
- AnyLogic 在这种方法中没有零时间到达。第一次到达时间为 0.166 小时。如果你想在零时间到达,然后是这种模式(它仍然是每小时 6 次,只是在开始时转移),那么你有几个选择。首先,您可以使用 Felipe 的方法并将首次出现时间设置为零。另一种方法是在启动时调用注入,或者在您完成模型具有的任何初始化代码后调用注入。
建模愉快!