【问题标题】:Creating pedestrians at random after every simulation in a given area在给定区域的每次模拟后随机创建行人
【发布时间】:2019-05-28 16:52:41
【问题描述】:

我想知道是否可以在每次开始模拟时在给定区域创建行人的随机分布?

enter image description here

【问题讨论】:

  • 请详细说明您的要求。 “随机分布”到底是什么意思?您是否只希望每个区域的行人数量可变,或者也应该是不同的行人类型或具有不同的行人属性?模型中的所有行人应该在一个群体中,还是需要在多个群体中?
  • 你可以只创建一个行人人口,设置 nr。代理创建属性的概率值来自随机分布,并将位置设置为您希望它们出现的空间标记区域。
  • 实际上我希望行人随机分布在给定区域周围,并出现在区域中而不必来自入口。例如,有 75 名居住者的楼层。办公室等某些区域将有固定人数,但学生休息室在每次模拟运行后可能有 20-30 名学生。这可以通过行人图书馆完成,还是我必须使用创建行人人口选项?
  • 您在这里谈论 2 个不同的主题。一个是行人的创造,因为这只是使用人口或来源。另一个主题是初始位置,您可以在创建期间设置(在源的属性中,或在人口的属性中)。您也可以在任何或未指定的位置创建它们,然后在启动期间只需使用 Pedestrian.jumpTo() 命令将它们放在应有的位置。要定义一个区域,您可以使用多边形区域标记。如果您将这样的区域设置为位置,则 Peds 将随机分布在该区域,或根据吸引子分布。
  • 哦,我明白了。我尝试使用按人口创建行人的方法,但无法让他们跟随我的火灾疏散项目。它们不会移动并在我设置它们的地方保持静止。我更喜欢使用来自行人图书馆的 pedSource,并且想知道我是否可以让我的行人从一个 pedSource 中绕过不同的区域?

标签: anylogic


【解决方案1】:

创建一个名为 allLocations 且类型为 AreaNode 的集合,其中包含所有可能的初始化区域:

对 PedSource 使用如下流程:

PedSource 中的 Area 属性设置为:

allLocations.get(uniform_discr(0, allLocations.size()-1))

此代码将列表中的一个区域随机分配给每个代理作为开始。您可以修改它以满足您的需求,例如使用其他发行版。

您现在可以看到特工是如何在不同位置随机弹出的:

示例模型可以运行并下载here

【讨论】:

  • 抱歉,没有看到确切的流程和对正在发生的事情(包括代码)的良好解释,因此无法就可能导致此问题的原因提供建议。考虑发布另一个单独的问题,在其中准确描述代理未按预期移动的情况。
  • 是的,抱歉,我忘了补充。
  • 最后一件事。你确实提到了如果区域有吸引器,我可以让行人自动填满它们。我尝试在一个区域使用 10 个吸引器,但更多的行人填充了该特定区域。有没有办法在不填充吸引子的情况下填充其他区域?
  • 那是你必须用你分配初始位置的代码来控制自己的东西。而不是一行'allLocations.get(uniform_discr(0, allLocations.size()-1))'你可以编写更复杂的函数来检查是否已达到某个区域的最大值或其他要求。
  • 很抱歉,先生,您能举个例子说明如何编写该代码吗?或者至少有一种方式让行人只出现在确切的吸引子上?
猜你喜欢
  • 1970-01-01
  • 2018-06-15
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
相关资源
最近更新 更多