设为首页收藏本站

最大的系统仿真与系统优化公益交流社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6130|回复: 3

[求助] 关于CarryDrop model的一个问题

  [复制链接]
发表于 2012-3-4 17:00:49 | 显示全部楼层 |阅读模式
在CarryDrop model中那个spreadmoney方法里,哪一句是用来随机撒钱的啊?程序代码如下,我看到了随机选取坐标,并将该坐标对应的空间格内的值转换为数值,关键在于这个值貌似始终为0,不知道怎么把它修改掉的?哪一句是生成不为0的值的?0 w( @5 j9 `$ X
        public void spreadmoney(int m){
6 t$ U" q: V- R/ \8 D3 Q$ I, J                for(int i=0;i<m;i++){8 K: V5 a" {( \3 Q% K
                        int x = (int)(Math.random()*(moneyspace.getSizeX()));. u7 m2 f: a, S
                        int y = (int)(Math.random()*(moneyspace.getSizeY()));; v0 |! T6 |8 c
8 t; z: Z. T! ^$ {0 d6 {4 C0 L& Q' v
                        int I;
) @$ u- x3 ]0 [* L2 }% U* q* U                        if(moneyspace.getObjectAt(x,y)!=null                                I = ((Integer)moneyspace.getObjectAt(x,y)).intValue();, V. E% K6 o4 Z
                        }
& ~! a' v+ E) w7 {9 V9 P                        else{# }$ I' O$ ?6 P  l+ `6 c
                                I = 0;
% w: I: L8 m$ E1 }1 x) M                        }
. Q% y! W$ u8 m! \# k! d& S0 O                        moneyspace.putObjectAt(x, y, new Integer(I+1));                              }
/ T2 m7 g0 {+ f        }
 楼主| 发表于 2012-3-6 09:15:08 | 显示全部楼层
代码帖的有点乱,怎么都没人能帮忙看看呢?       7 k% c2 N' b. M# ]% \
       public void spreadmoney(int m){
7 M& |" s. G9 e/ U8 ^5 u7 N7 \                for(int i=0;i<m;i++){
2 P% ]( G7 \2 W: S4 T1 B# f                        int x = (int)(Math.random()*(moneyspace.getSizeX()));+ `, |( r+ h6 g4 n9 Q
                        int y = (int)(Math.random()*(moneyspace.getSizeY()));
- g" I! I+ J% r* {' i- @  K( E; |8 D* w3 o  T
                        int I;+ O8 [% H& X( n+ C4 P
                        if(moneyspace.getObjectAt(x,y)!=null                                
) S1 L! r0 v! M5 o) q; l                        I = ((Integer)moneyspace.getObjectAt(x,y)).intValue();
! C' P& x1 _9 v4 j$ e0 x: n4 a                        }
8 y# N) _5 l% U4 @" P: x                        else{
+ |4 g1 u* R3 ~8 {- T, ?# K                                I = 0;
3 }( L; S2 k& V3 u+ L1 V- F) L                        }9 d& B" T8 M+ b. ~4 G: l
                        moneyspace.putObjectAt(x, y, new Integer(I+1));                              }
$ h- h' X3 m  x2 F) h- k        }
 楼主| 发表于 2012-3-6 11:25:15 | 显示全部楼层
还有,当两个agent碰到一起了,到底是谁抢走了谁的钱呢?从程序上真的没看明白
 楼主| 发表于 2012-3-10 15:35:24 | 显示全部楼层
至今没人解答,这个论坛太失败了,还是我自己找出答案吧,不知道对不对。
8 v, ~/ N+ Y3 }" @, C" v第一个问题的钱其实是随机在40*40的格子中选择了1000个格子,每个格子里假设有1块钱,只要agent经过这个格子,如果没人来过,就认为拣了1块钱。' t; o1 z& m5 f! w; h8 s
第二个问题的答案来自于schedule的execute方法中有个shuffle方法,重新随机调整了每一轮agent的执行次序,根据执行次序的不同而判断是谁先进入了这个格子,从而得知后来的就要交钱了。

点评

e, 没人回答你不代表论坛失败。。。做这块的本来人就少,而且刚好看过捡钱这个例子的人也不多。  发表于 2012-3-15 17:29
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|SimulWay 道于仿真   

GMT+8, 2026-9-19 19:56 , Processed in 0.015965 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表