我仍然遇到AnyLogic的麻烦......我正在开发流行病SIRS模型,我想定义自己的网络。
因此我希望每个代理商都能根据这个矩阵与其他代理商建立联系...这让我发疯:S
现在我说" n次连接到随机代理" ...我要说的是"连接n次到随机代理与AgeClass k "有办法吗?
感谢您的支持!
ps当我写int i = AgeClass
时,我获取运行代码的代理的参数AgeClass的值,对吗?所以我对不同的代理人会有所不同?
答案 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)
可能你已经找到了解决方案。这是一种方法:
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);}
}
}
我没有检查过代码,速度有多慢,这只是一种方法。