AnyLogic - 自定义网络

时间:2016-08-18 10:41:28

标签: anylogic

我仍然遇到AnyLogic的麻烦......我正在开发流行病SIRS模型,我想定义自己的网络。

特别是,我有这个矩阵定义了年龄段之间的每日平均联系人数 enter image description here

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

AgeClass是使用以下函数计算的参数 enter image description here

我想用以下代码设置一个在开头一次发生的事件 enter image description here

现在我说" n次连接到随机代理" ...我要说的是"连接n次到随机代理与AgeClass k "有办法吗?

感谢您的支持!

ps当我写int i = AgeClass时,我获取运行代码的代理的参数AgeClass的值,对吗?所以我对不同的代理人会有所不同?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

  1. 关于年龄,你不需要那个大的 if / else if 序列。做这样的事情:
  2. 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 的连接对象) 。该功能类似于:

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

      我没有检查过代码,速度有多慢,这只是一种方法。