AnyLogic - 自定义网络

AnyLogic - custom network

我仍然在使用 AnyLogic 时遇到问题...我正在开发一个流行病 SIRS 模型,我想定义我自己的网络。

特别是,我有这个矩阵定义年龄 class 之间的每日平均联系次数

因此我希望每个代理都根据这个矩阵与其他代理建立联系...这让我发疯:S

AgeClass 是使用以下函数计算的参数

我想用下面的代码设置一个在开始时发生一次的事件

现在我说的是"connect n times to a random agent"...我想说的是"connect n times to a random agent with AgeClass k"有什么办法吗?

感谢支持!

ps 当我写 int i = AgeClass 时,我采用代理的参数 AgeClass 的值,即 运行 代码,对吗?那么不同的代理会有所不同吗?

在 AnyLogic 中,您可以将矩阵表示为二维 Java 数组: http://help.anylogic.com/topic/com.xj.anylogic.help/html/code/Arrays.html

初始化矩阵后,您可以使用元素'Link to agents'定义自定义联系网络: http://help.anylogic.com/topic/com.xj.anylogic.help/html/agentbased/Link.html

可能您已经找到了解决方案。这是一种方法:

  1. 关于年龄,不需要那么大的if/else if序列。只需做这样的事情:

int ageClass = 0; // a variable of agents ageClass = (int) floor(age / 5.0); if (age >= 70.0 ) ageClass == 14; // just to be sure that max class is 14 return ageClass;

  1. 关于网络。我会创建一个名为 setup 的函数,这样您就可以在启动时将其放入代理操作中,例如setup();

  2. 你可以在代理级别创建一个link到代理对象(Person在我的代码中,我使用连接名为 联系人 的对象)。该函数类似于:

// loop through age groups for (int i = 0; i < network[0].length; i++) { ArrayList<Person> ageGroupPeople = new ArrayList<Person>(); for (Person p : population ) { if ( p.ageClass == i ) { ageGroupPeople.add(p) } \ create pool of potential alters by age } \ create network per agent for (Person ego : population ) { for (int k = 0; k < poisson(network[ego.ageClass][i]); k++) { Person alter = randomFrom(ageGroupPeople); if ( ego != alter ) { ego.contacts.connectTo(alter);} } }

我还没有检查过代码以及可能有多慢,这只是一种方法。