-1

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

特别是,我有这个矩阵,它定义了年龄层之间的每日平均接触次数 在此处输入图像描述

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

AgeClass 是使用以下函数计算的参数 在此处输入图像描述

我想用下面的代码设置一个在开始时发生一次的事件 在此处输入图像描述

现在我说“连接 n 次随机代理”...我想说的是“连接 n 次随机代理”具有 AgeClass k的随机代理”有没有办法做到这一点?

感谢您的支持!

ps 当我写的时候,我int i = AgeClass取了运行代码的代理的参数 AgeClass 的值,对吧?那么对于不同的代理,我会有所不同吗?

4

2 回答 2

1

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

  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. 您可以在代理级别创建到代理对象的链接Person(在我的代码中,我使用了一个名为contacts的连接对象)。该功能将类似于:

// 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);} } }

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

于 2016-11-15T16:16:01.473 回答
1

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

初始化矩阵后,您可以使用元素“链接到代理”定义自定义联系网络:http: //help.anylogic.com/topic/com.xj.anylogic.help/html/agentbased/Link.html

于 2016-08-18T12:39:01.553 回答