我仍然在使用 AnyLogic 时遇到问题……我正在开发一个流行病 SIRS 模型,我想定义自己的网络。
因此我希望每个代理都根据这个矩阵与其他代理建立联系......这让我发疯:S
现在我说“连接 n 次随机代理”...我想说的是“连接 n 次随机代理”具有 AgeClass k的随机代理”有没有办法做到这一点?
感谢您的支持!
ps 当我写的时候,我int i = AgeClass
取了运行代码的代理的参数 AgeClass 的值,对吧?那么对于不同的代理,我会有所不同吗?
我仍然在使用 AnyLogic 时遇到问题……我正在开发一个流行病 SIRS 模型,我想定义自己的网络。
因此我希望每个代理都根据这个矩阵与其他代理建立联系......这让我发疯:S
现在我说“连接 n 次随机代理”...我想说的是“连接 n 次随机代理”具有 AgeClass k的随机代理”有没有办法做到这一点?
感谢您的支持!
ps 当我写的时候,我int i = AgeClass
取了运行代码的代理的参数 AgeClass 的值,对吧?那么对于不同的代理,我会有所不同吗?
可能,您已经找到了解决方案。这是一种方法:
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;
关于网络。我会创建一个名为 的函数setup
,以便您可以在启动时将其放入代理操作中,例如setup();
您可以在代理级别创建到代理对象的链接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);}
}
}
我还没有检查代码以及可能有多慢,这只是一种方法。
在 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