设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5645|回复: 3

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

  [复制链接]
发表于 2012-3-4 17:00:49 | 显示全部楼层 |阅读模式
在CarryDrop model中那个spreadmoney方法里,哪一句是用来随机撒钱的啊?程序代码如下,我看到了随机选取坐标,并将该坐标对应的空间格内的值转换为数值,关键在于这个值貌似始终为0,不知道怎么把它修改掉的?哪一句是生成不为0的值的?
2 o' [8 c& l+ o4 D5 m4 V5 E        public void spreadmoney(int m){
# M% g. U* a* q* ~& l                for(int i=0;i<m;i++){  {5 f; V/ a5 G7 F1 c, h$ j4 F
                        int x = (int)(Math.random()*(moneyspace.getSizeX()));- K! C; R: |& `" q+ I
                        int y = (int)(Math.random()*(moneyspace.getSizeY()));
+ c  k2 L7 D) h/ q% Z* T3 P' y2 O6 T* e. _6 ]- F( k- ]! x; E
                        int I;
; y! ^7 t+ r2 L$ Z2 i0 J& \                        if(moneyspace.getObjectAt(x,y)!=null                                I = ((Integer)moneyspace.getObjectAt(x,y)).intValue();
' \8 j5 e9 L) H1 F1 \4 T                        }
3 l! L) g  p( G: ?8 U                        else{5 v3 k  g1 w6 M" J
                                I = 0;3 R! G. ?, R% f9 G1 V, y' e' H
                        }
# x5 _' O; J' K6 z0 B! {                        moneyspace.putObjectAt(x, y, new Integer(I+1));                              }
: b" I' V. D- `/ s' e        }
 楼主| 发表于 2012-3-6 09:15:08 | 显示全部楼层
代码帖的有点乱,怎么都没人能帮忙看看呢?      
3 }& I# [2 ]% }4 ]8 d       public void spreadmoney(int m){
+ i! v' v5 `2 t2 I3 r  @                for(int i=0;i<m;i++){; r; n& p2 I  D' q9 _3 p& p
                        int x = (int)(Math.random()*(moneyspace.getSizeX()));$ T5 y8 I, l6 L7 n% t; ]. |9 k+ M( [
                        int y = (int)(Math.random()*(moneyspace.getSizeY()));
: R7 n4 d$ V1 _' z+ ?
; {& s3 ^( ?6 [% Q2 ~7 ^- k                        int I;
/ {% \' m8 F8 Y! Q2 S; G/ t                        if(moneyspace.getObjectAt(x,y)!=null                                
/ Y9 S% H( J" ]2 m& \% S& G4 J- `                        I = ((Integer)moneyspace.getObjectAt(x,y)).intValue();
" m+ d9 ~/ N$ F2 z; t& F                        }
7 m$ o5 @! r# ]& N* |                        else{
' r0 t. b# W+ v" \% g- o* r4 G* T9 }7 N                                I = 0;
8 r( J8 v$ t$ O$ p5 G                        }# x3 B# i# G, Q
                        moneyspace.putObjectAt(x, y, new Integer(I+1));                              }
) q& m- f' w% [2 D        }
 楼主| 发表于 2012-3-6 11:25:15 | 显示全部楼层
还有,当两个agent碰到一起了,到底是谁抢走了谁的钱呢?从程序上真的没看明白
 楼主| 发表于 2012-3-10 15:35:24 | 显示全部楼层
至今没人解答,这个论坛太失败了,还是我自己找出答案吧,不知道对不对。! V! S* c/ D/ t( w
第一个问题的钱其实是随机在40*40的格子中选择了1000个格子,每个格子里假设有1块钱,只要agent经过这个格子,如果没人来过,就认为拣了1块钱。* R  M  `/ J* F9 i) i3 t2 z
第二个问题的答案来自于schedule的execute方法中有个shuffle方法,重新随机调整了每一轮agent的执行次序,根据执行次序的不同而判断是谁先进入了这个格子,从而得知后来的就要交钱了。

点评

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

本版积分规则

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

GMT+8, 2026-6-27 05:58 , Processed in 0.018544 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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