|
|
5仿真币
最近做流行病模型,需要在一个网格里面放多个Agent,我查了一下API,使用OrderedMultiGrid类来构造,里面提供了一些putObjectAt(int, int, index);之类的东西。似乎可以用。但是当我编程调试的时候发现在同一位置只能获取一个对象。这是很令人纳闷的事情。我想问一下Repast有提供什么好方法处理吗,不仅要能存进去,还要能方便的拿出来。
! ~* L/ \* _' Z9 f* e private boolean findPotentialPartner(){% v% n; `) y4 ~
boolean value = false;+ D+ u& L3 k$ F: U
/ v; C% G! H9 `9 }! W5 K. y OrderedMulti2DGrid grid = space.getCurrentAgentSpace();6 ~+ f! q& {4 D- y; P$ z/ Z. ?3 [
Iterator iterator = grid.getIteratorAt(x, y);
1 b& ?0 H3 M9 t0 J; z SexAgent ag1 = null;
+ [6 Y5 d: Z$ u/ \' D1 Z SexAgent [] potenAgent = new SexAgent[20];( B+ ~1 m* t+ j! s9 r) b
int goodNumber = 0;& _4 n. b+ d' H# W
while(iterator.hasNext()){
5 p8 `- N9 q* C7 s& l System.out.println("XXXXXXXXXXXXXXXXXXXXX");
4 k* ^: Q6 ]4 E1 ^; l ag1 = (SexAgent)iterator.next();
+ h! g" F* U! {- C( O i if((ag1.sex == FEMALE) . T3 w: ^! S9 Q5 x2 f( }6 P
&&(!ag1.isCoupled())){
1 _ M4 d; F/ R System.out.println("YYYYYYYYYYYYYYYYYYYY");
* U( L7 x [' P: C potenAgent[goodNumber] = ag1; f3 b# g3 C3 W0 n
goodNumber ++;
0 j8 l0 v; Z1 [ }
) l- A/ Y9 |3 q }
! e E- b4 P1 T. A; {; T6 c) F# H# V
' n, ?, ~! K6 e7 y3 o if(goodNumber >0){/ s1 s% s" ~4 e' O# i2 ?
System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"); 0 m. Q/ _6 a3 O" ]. R
Random rd1 = new Random();) O# ], f% i4 j- L; E2 O, {
int select = rd1.nextInt(goodNumber);
1 F9 T) i+ N6 d potentialParterner = potenAgent[select];7 l/ l- F3 D' @4 e7 |' r
value = true;
8 U% f8 B4 G2 k( @3 l1 } }( c+ l# T% L5 Q* }- ]" O% N
return value;4 ]0 F% ~* q0 x7 H" I+ R- @: ^' N
}7 T9 p) U, I' R. X5 H( q8 m
始终只能打印出XXXXXXXXXXXXXXXXXXXX,请各位帮帮忙。 |
|