|
|
5仿真币
最近做流行病模型,需要在一个网格里面放多个Agent,我查了一下API,使用OrderedMultiGrid类来构造,里面提供了一些putObjectAt(int, int, index);之类的东西。似乎可以用。但是当我编程调试的时候发现在同一位置只能获取一个对象。这是很令人纳闷的事情。我想问一下Repast有提供什么好方法处理吗,不仅要能存进去,还要能方便的拿出来。
! B# j, f2 x4 F3 q1 @0 O2 ` private boolean findPotentialPartner(){
, \- H+ M( B ?/ v: a w, V boolean value = false;
% p: F; k: I6 t3 y) a: D! c ) f4 g5 f: R4 m
OrderedMulti2DGrid grid = space.getCurrentAgentSpace();: ~! T' W; Z/ g
Iterator iterator = grid.getIteratorAt(x, y);( k0 N3 O$ |/ g% ~2 j5 v. ^/ }
SexAgent ag1 = null; 5 V) z% A6 f2 t2 `
SexAgent [] potenAgent = new SexAgent[20];# |. }2 X5 N& H: ^" z5 b
int goodNumber = 0;+ n2 H7 F" E2 W
while(iterator.hasNext()){% X* J9 t2 b" r# l
System.out.println("XXXXXXXXXXXXXXXXXXXXX");" Q& k# `4 g2 d
ag1 = (SexAgent)iterator.next();
3 R" g c7 r0 g if((ag1.sex == FEMALE)
8 W1 N+ j" \; Z6 Z* x &&(!ag1.isCoupled())){5 Y# H R* B; F3 c! X6 k' n
System.out.println("YYYYYYYYYYYYYYYYYYYY");
8 c+ a- Q, E* n% T( l potenAgent[goodNumber] = ag1;
( H( h' C& W1 q' f goodNumber ++;
3 E, L$ O) h6 X( \* ?1 j }" L0 \) R+ O" o0 ]0 N/ N2 n
}/ s' h( v, a6 o k# v3 ?! ] a; T
2 }! }; V) w' n if(goodNumber >0){3 G9 @6 B% f3 N6 n! t$ W, r1 }
System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"); ) l, _# b) l6 H; K* [6 S" [
Random rd1 = new Random();
# ]' K" O2 e6 o4 X2 j' I int select = rd1.nextInt(goodNumber);
4 r0 Y* S% m) _) G. x potentialParterner = potenAgent[select];, ~9 k" K' |( ?* {: [, o$ t5 j' N; r
value = true;8 m# p, N6 K% f5 B4 O
}
; M2 d+ D0 }' ~- `& X* j return value;
' ?7 A& E8 V3 l9 A9 Z# Q }
9 [2 ^" }2 W* @( [" U; `5 i始终只能打印出XXXXXXXXXXXXXXXXXXXX,请各位帮帮忙。 |
|