设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4412|回复: 3

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

  [复制链接]
发表于 2012-3-4 17:00:49 | 显示全部楼层 |阅读模式
在CarryDrop model中那个spreadmoney方法里,哪一句是用来随机撒钱的啊?程序代码如下,我看到了随机选取坐标,并将该坐标对应的空间格内的值转换为数值,关键在于这个值貌似始终为0,不知道怎么把它修改掉的?哪一句是生成不为0的值的?/ B+ [/ [% d$ w2 C8 Z# o/ I+ ?$ P
        public void spreadmoney(int m){
% `0 m9 U/ z9 r/ f3 e* k                for(int i=0;i<m;i++){
2 t' j7 T% m1 z7 g                        int x = (int)(Math.random()*(moneyspace.getSizeX()));# z# b8 p* X0 ^. w. ~: _  c1 _
                        int y = (int)(Math.random()*(moneyspace.getSizeY()));$ }$ z% H% Y( X' ^
( y5 U5 U5 w/ C6 |; h# s# O4 e6 H
                        int I;/ h3 i9 z7 h# w( L* w! p
                        if(moneyspace.getObjectAt(x,y)!=null                                I = ((Integer)moneyspace.getObjectAt(x,y)).intValue();7 q" L( `" A. @$ E# ]
                        }
  ]+ |0 N$ v+ a$ g# D                        else{& K! \, |% z+ T; \: s
                                I = 0;
7 E( T" s. a! ?- X6 s% W                        }. G4 i. J# b' G1 J& `
                        moneyspace.putObjectAt(x, y, new Integer(I+1));                              }
. Q. ?( z/ c2 @9 z$ y2 Y        }
 楼主| 发表于 2012-3-6 09:15:08 | 显示全部楼层
代码帖的有点乱,怎么都没人能帮忙看看呢?      
3 W) |" R, f$ @0 c       public void spreadmoney(int m){
3 t" b& ]% M* \  |. c  }8 m                for(int i=0;i<m;i++){! M& ]% x3 C/ w3 N
                        int x = (int)(Math.random()*(moneyspace.getSizeX()));
* k6 ^0 Q6 |4 e! ~                        int y = (int)(Math.random()*(moneyspace.getSizeY()));6 a7 ?8 q# e8 K' I* x  N

: b; X. Z9 V: ~3 h                        int I;
+ y9 r3 D1 q7 |0 j7 O' N$ @: r                        if(moneyspace.getObjectAt(x,y)!=null                                ; d, W5 v- x2 F- `+ v
                        I = ((Integer)moneyspace.getObjectAt(x,y)).intValue();& n4 y# H5 f2 l5 W
                        }
( ~/ K0 d! X9 z' S0 z                        else{; u  i: v" L; t) N
                                I = 0;9 Z: O8 r) N( O! p, x9 E9 d
                        }
% n; @0 K9 p( O0 A: x2 s' b6 f$ I                        moneyspace.putObjectAt(x, y, new Integer(I+1));                              }" h0 p" O; I8 n' `
        }
 楼主| 发表于 2012-3-6 11:25:15 | 显示全部楼层
还有,当两个agent碰到一起了,到底是谁抢走了谁的钱呢?从程序上真的没看明白
 楼主| 发表于 2012-3-10 15:35:24 | 显示全部楼层
至今没人解答,这个论坛太失败了,还是我自己找出答案吧,不知道对不对。1 }3 H4 m5 Y# X8 U6 w
第一个问题的钱其实是随机在40*40的格子中选择了1000个格子,每个格子里假设有1块钱,只要agent经过这个格子,如果没人来过,就认为拣了1块钱。
- N+ L0 F3 _" v( ?$ z* u: M, T# N第二个问题的答案来自于schedule的execute方法中有个shuffle方法,重新随机调整了每一轮agent的执行次序,根据执行次序的不同而判断是谁先进入了这个格子,从而得知后来的就要交钱了。

点评

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

本版积分规则

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

GMT+8, 2025-9-18 07:49 , Processed in 0.014268 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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