|
|
5仿真币
最近做流行病模型,需要在一个网格里面放多个Agent,我查了一下API,使用OrderedMultiGrid类来构造,里面提供了一些putObjectAt(int, int, index);之类的东西。似乎可以用。但是当我编程调试的时候发现在同一位置只能获取一个对象。这是很令人纳闷的事情。我想问一下Repast有提供什么好方法处理吗,不仅要能存进去,还要能方便的拿出来。
% E2 P" g& _; a6 E# V6 P# y# h0 r private boolean findPotentialPartner(){
' U+ _ o, z5 U1 u' T# V- j) } boolean value = false;! k. T b8 Z1 }) a! w
9 T9 @1 c `( f7 A& F OrderedMulti2DGrid grid = space.getCurrentAgentSpace();
9 @5 y; h: Y0 r+ g Iterator iterator = grid.getIteratorAt(x, y);3 k6 n6 N( V( `- A
SexAgent ag1 = null; * P5 Z4 ?% c a% t' A4 [/ \
SexAgent [] potenAgent = new SexAgent[20];
5 x9 k# ~/ I+ m. B1 O int goodNumber = 0;+ r8 i# W- p( g, p, ]/ O
while(iterator.hasNext()){
4 H3 L, q, i9 E System.out.println("XXXXXXXXXXXXXXXXXXXXX");
% u2 C( h+ u! `9 B ag1 = (SexAgent)iterator.next();' x- [) D2 Y) _8 F
if((ag1.sex == FEMALE) 6 x; b, T; D, {4 R' g- U
&&(!ag1.isCoupled())){
+ O- S6 ?. B, c7 C& l System.out.println("YYYYYYYYYYYYYYYYYYYY");
1 @5 H) B% b. i9 p potenAgent[goodNumber] = ag1;
& w3 n2 S( L+ X. I/ j goodNumber ++;! }: W i& Q* d
}
$ K: e! _) [, T& p$ ?: q$ y# n }2 k; u5 S% d [2 L3 T, g o
t) k. g9 H% X. {
if(goodNumber >0){1 U9 @$ E" A8 x% d2 Q* I0 M
System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
: t5 W" M; B* \+ r/ w6 R Random rd1 = new Random();2 u+ H9 K7 c+ o# A% n
int select = rd1.nextInt(goodNumber);
! i& P+ t/ A( R3 G* w' i+ Y) x potentialParterner = potenAgent[select];
+ P- D' s% u& Q; s! v& u value = true;- P0 J! L+ s6 p
}# x' i& L5 ?# J& |
return value;4 r4 t( _2 ^0 a# f0 ^( l# w' D
}
# S$ F D9 E' s; t8 A% l% v$ d6 _始终只能打印出XXXXXXXXXXXXXXXXXXXX,请各位帮帮忙。 |
|