在 Anylogic 中,如何从项目列表中随机选择
Posted
技术标签:
【中文标题】在 Anylogic 中,如何从项目列表中随机选择【英文标题】:In Anylogic, how to Randomly Select from a list of items 【发布时间】:2020-05-26 00:54:04 【问题描述】:在 Anylogic 中,从您选择的一组项目中随机选择最简单的方法是什么。例如,如果您正在创建新的客户代理并且您有三个现有的客户群体:customers1、customers2、customers3。你如何做一种 randomFrom(customers1,customers2,customers3) 来选择一个人口来放置新的代理?您首先将customers1...3 放入集合(总共三个)还是列表中?或者你怎么会只是从几个项目中随机选择?我知道有 randomCreate 函数允许您为列表随机创建不同类型的代理,但我找不到一个可以从列表中随机选择某些内容的函数,我创建相同类型的对象或完全随机的列表。
【问题讨论】:
不是很清楚的问题,请具体并专注于您想知道的一件事;-) 请参阅***.com/help/how-to-ask 【参考方案1】:您首先将customers1...3 放在一个集合(总共三个)还是一个列表中?
是的。然后调用randomFrom
选择您的客户组,然后再次调用它以从该组中随机获取一位客户。
【讨论】:
这不适用于这个例子。如果将所有三个群体放在一个集合中(通过选择并右键单击“创建集合”),它会创建一个集合,其中元素类是客户(而不是群体),我不知道元素类对于代理群体是什么.然后对集合执行 randomFrom 函数,预期会生成一组 Type Mismatches。 嗯,更好,不是吗?您会在所有人群中随机获得一个客户。从数学上讲,这与先选择流行音乐再选择客户是一样的...... 我知道它会是一样的。但是我还没有弄清楚如何将这三个群体正确地分组到一个集合中。它会生成类型不匹配并且无法执行。这是因为集合需要和不能是“客户”的元素类,因为元素不是客户而是集合(或客户群体)。对人口使用对象解决了类型不匹配,但随后集合“无法解析为变量”。如何将一组代理群体分组到一个集合中?或者代理群体的元素类是什么? 不要去那里,这是不好的做法!创建客户的 ArrayList 集合。在“启动时”的客户代理类型属性中,将每个创建的客户添加到您在 Main(或任何位置)上的集合中。这样一来,所有客户,无论其人口如何,都将成为该系列的一部分。 1 of 2:这对我想要的不起作用。在创建时为所有客户创建一个 ArrayList 对客户群体没有任何作用。我一开始就创建了三个客户群体。在运行时创建更多客户。 ArrayList 会将所有客户添加到其中,但不会帮助将新客户随机添加到客户集 1、2 或 3。它只会将这些添加到 ArrayList,但仍不会与客户组关联。【参考方案2】:您可以为您的客户群体创建一个单独的代理类型,每个代理类型都有自己的客户代理集合(例如 ArrayList),然后将您的客户添加到这些集合中。然后,您将能够使用您选择的方法随机选择一个客户群及其所有客户(或对其的引用)。然后,您还可以为您的客户群代理类型编写函数等,您可能会觉得这很有用。
在我负责的市场动态模型中,以及 Benjamin 的团队最初创建的模型中,这正是将全球客户代理群体分配给银行(现在是产品)的方式,到目前为止我还没有任何理由(四年)改变它。如果需要,您可以轻松地在人群之间移动客户代理。同样,在我的具体示例中,我没有看到需要更改我继承的代码,因此只需在客户的相关 ArrayLists 上调用 add/remove 即可实现这一点。
【讨论】:
以上是关于在 Anylogic 中,如何从项目列表中随机选择的主要内容,如果未能解决你的问题,请参考以下文章