|
|
5仿真币
最近做流行病模型,需要在一个网格里面放多个Agent,我查了一下API,使用OrderedMultiGrid类来构造,里面提供了一些putObjectAt(int, int, index);之类的东西。似乎可以用。但是当我编程调试的时候发现在同一位置只能获取一个对象。这是很令人纳闷的事情。我想问一下Repast有提供什么好方法处理吗,不仅要能存进去,还要能方便的拿出来。
) p# C/ }& ^% c' ^5 i# ^7 f private boolean findPotentialPartner(){
" W5 h% \* f. ~ boolean value = false;
+ F/ w3 w" t% M2 I# u. a& s
6 |+ Y' M- t6 E1 h: ]# Y4 o [8 E: T OrderedMulti2DGrid grid = space.getCurrentAgentSpace();. f: a5 F8 r! x, T7 X
Iterator iterator = grid.getIteratorAt(x, y);
0 b+ a( f3 J& M' w SexAgent ag1 = null; % a: V! M7 L, R# d7 V0 E
SexAgent [] potenAgent = new SexAgent[20];
# W3 t8 o4 J# B) z0 w+ b5 R int goodNumber = 0;. E. W0 |- z* u. t
while(iterator.hasNext()){- f+ v- ]: e1 ?
System.out.println("XXXXXXXXXXXXXXXXXXXXX");
4 k# R, L9 O' |5 e; o! Z& X ag1 = (SexAgent)iterator.next();( x; H0 w: I6 o1 D5 m- q5 Y
if((ag1.sex == FEMALE)
; [9 P$ m/ L( w1 j0 x1 j" T- y &&(!ag1.isCoupled())){
/ ]5 c! b5 ?$ M7 @' j: Q) U, p System.out.println("YYYYYYYYYYYYYYYYYYYY");
1 o4 h8 i$ M% v potenAgent[goodNumber] = ag1;! c3 W# h7 d: l
goodNumber ++;; [0 g d# S: C- x5 Q6 s m
}
8 m$ j e* O( x }) k6 U/ W/ n: K8 c' c Z
% |$ a/ m2 F' F/ G
if(goodNumber >0){
; t: c& |7 X; W; S0 W System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"); 4 |* q6 w% I1 [+ _( I
Random rd1 = new Random();
& r' o7 r& q4 d5 ] int select = rd1.nextInt(goodNumber);6 V, H, q1 o* X" W
potentialParterner = potenAgent[select];
0 H0 G) @9 l3 E; k value = true;- q9 H4 f, b' C7 B
}% }5 d4 \$ L% ^9 s( U! j
return value;2 x0 q) G2 U8 D$ D
}
% z) g( B+ ~) k$ E0 n1 I/ ]; s始终只能打印出XXXXXXXXXXXXXXXXXXXX,请各位帮帮忙。 |
|