|
|
5仿真币
最近做流行病模型,需要在一个网格里面放多个Agent,我查了一下API,使用OrderedMultiGrid类来构造,里面提供了一些putObjectAt(int, int, index);之类的东西。似乎可以用。但是当我编程调试的时候发现在同一位置只能获取一个对象。这是很令人纳闷的事情。我想问一下Repast有提供什么好方法处理吗,不仅要能存进去,还要能方便的拿出来。
3 X# R$ W' s& m# r' @9 E: { private boolean findPotentialPartner(){9 S. f: d$ d1 {8 |/ K7 _
boolean value = false;
$ v: T' P) k' L1 d5 |8 Q
6 v/ @. ]3 q# Q) A$ l OrderedMulti2DGrid grid = space.getCurrentAgentSpace();/ C; t9 ^ V9 F; |( B4 Z9 I
Iterator iterator = grid.getIteratorAt(x, y);
0 b) G3 l- G' Y8 ?+ l9 l7 N SexAgent ag1 = null; " O) V/ l) e- H; e6 T
SexAgent [] potenAgent = new SexAgent[20];: t _' B9 p3 L6 a) U. p- h+ @1 }
int goodNumber = 0;6 ~8 t# _2 I5 Q
while(iterator.hasNext()){, s( v& j2 G8 ^0 J! o
System.out.println("XXXXXXXXXXXXXXXXXXXXX");
- ]/ p5 l a4 C. Q: K. ? ag1 = (SexAgent)iterator.next();
) Z5 j9 ~" F0 |+ v if((ag1.sex == FEMALE)
9 [0 }8 M( E e, P &&(!ag1.isCoupled())){: ]" n2 ?7 p3 u- Z9 v3 f3 V* C# \' W( P
System.out.println("YYYYYYYYYYYYYYYYYYYY");
: E3 i* K$ O8 ]0 N potenAgent[goodNumber] = ag1;& R) F) s+ ?. k( z5 W o) V
goodNumber ++;9 c2 q1 s4 _1 k2 ]3 C0 o+ Z
}6 S* ~. |$ \1 b7 C
}$ ^4 k+ q9 L! ^
/ `0 [; h5 C" S
if(goodNumber >0){
& G$ l7 @+ L' N- d0 ~ ?" F% [ System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"); Q, A( \7 _2 V9 O
Random rd1 = new Random();
3 ]$ e4 w+ [5 I% X V int select = rd1.nextInt(goodNumber);8 X& f4 q' O2 D1 |+ y
potentialParterner = potenAgent[select];
% W8 G9 S0 R8 Z# k! ?" T1 u value = true;. Q$ X& B h/ Z9 s' b
}
8 h$ X/ v* y, I" N" K4 m return value;
3 S9 O; } r6 v) m6 T/ W* E }6 r7 Z* |" E% P* t4 E6 A- ^
始终只能打印出XXXXXXXXXXXXXXXXXXXX,请各位帮帮忙。 |
|