HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' a; N/ O0 d# u* ?
- D. U# z# [- Q4 M/ R
public Object buildActions () {3 x7 W( C# L- b8 [
super.buildActions();2 _# E' `5 M: e( _/ y. P# p: i: {
3 |% j8 t* y0 M& z // Create the list of simulation actions. We put these in
$ G3 E/ T! c7 |5 \ // an action group, because we want these actions to be* K0 |& Y& A7 ~
// executed in a specific order, but these steps should
, g/ T8 n; u9 S( D( T0 O; G- P' \ // take no (simulated) time. The M(foo) means "The message
% n/ K7 |( x) c% ^. a // called <foo>". You can send a message To a particular
; ]3 {. Q @# O% e // object, or ForEach object in a collection.
+ W! L( [% t' s1 X; Q/ b1 C9 H # r) \) Q$ J* g& e9 M P2 n
// Note we update the heatspace in two phases: first run7 ?1 G! ?1 {8 n5 P, H8 H
// diffusion, then run "updateWorld" to actually enact the9 [: K) ?9 |7 N$ h. |% y4 d
// changes the heatbugs have made. The ordering here is
/ G' I8 d: s6 }. y- y% o& r, Q ^ // significant!
& q: Q4 s- u3 z9 ?; @
6 \* j" U7 Q. Q, Q0 E // Note also, that with the additional. {5 m' b8 b0 s+ ]/ P h7 u
// `randomizeHeatbugUpdateOrder' Boolean flag we can( Q# N2 Z. K# b1 v
// randomize the order in which the bugs actually run6 Z, j: u% H/ L- V; u
// their step rule. This has the effect of removing any
+ z# G9 m6 {! V! R5 R( b! L2 \ // systematic bias in the iteration throught the heatbug% N& G1 x3 ^; k1 f' H, O
// list from timestep to timestep$ x6 H% n. I& }
" Y0 m3 _% ?+ [5 n2 ?& }
// By default, all `createActionForEach' modelActions have) q4 C, {8 ]3 w- X: _3 ^, ?
// a default order of `Sequential', which means that the
# ~4 S( N- J4 T // order of iteration through the `heatbugList' will be6 I6 O4 C9 G& h# h5 j; f
// identical (assuming the list order is not changed
1 u7 ~, t: Y( G // indirectly by some other process).
5 b) h" [/ T/ g; v- |, Z. c9 @( L# U ; |) y5 m$ x; s1 r
modelActions = new ActionGroupImpl (getZone ());% \9 y0 l0 @5 i k. p: B% [
! |3 r% y% m( z& ?: s try {/ g: w7 A& V. @2 i0 i, z
modelActions.createActionTo$message {0 l. x8 X* C: j; Q
(heat, new Selector (heat.getClass (), "stepRule", false));) \5 _$ ^: Y9 F# o1 [* D3 [: v
} catch (Exception e) {
- H# }5 b' e1 F8 \ System.err.println ("Exception stepRule: " + e.getMessage ());; f0 |- m( g1 f) N: |# v
}
; P) d' ]8 H4 L2 j8 b: O) B3 v j7 t% L9 Q# e
try {
" X& Z6 e$ q2 l Heatbug proto = (Heatbug) heatbugList.get (0);
# `$ C- |" s" n1 [5 D; _9 K Selector sel = $ [ z8 T$ W- I2 @) a
new Selector (proto.getClass (), "heatbugStep", false);
4 `9 L5 q6 j* T# f) }' B* a. y actionForEach =
$ Z, _6 T3 E( Q& a) h; L modelActions.createFActionForEachHomogeneous$call! M, Q& d# M7 S9 f
(heatbugList,
6 l: c3 y) w; M new FCallImpl (this, proto, sel,% O L$ `5 v+ |0 _7 Y4 r
new FArgumentsImpl (this, sel)));
' l5 A4 E, y# {, D } catch (Exception e) {/ X/ Z9 X+ y2 i8 O1 b
e.printStackTrace (System.err);
) u+ j2 H& z! N( M4 y7 `% v' l }
# N) o0 F$ A3 u/ \) U5 ^ q3 d% Z0 N5 q
syncUpdateOrder ();
; r% E' t- x/ T8 x0 [5 r3 r
, T5 G' W$ N: m3 B$ G try {
! t# Z. R2 _) ^6 r/ C1 C modelActions.createActionTo$message
8 W4 s& ^- s( z+ N (heat, new Selector (heat.getClass (), "updateLattice", false));2 K+ {* f& N5 Y
} catch (Exception e) {
1 e# g) G4 g" ~7 Z- W( J System.err.println("Exception updateLattice: " + e.getMessage ());$ l4 `6 Y0 {5 w. l
}
# j2 h& c$ ?4 K* i% @
6 A3 r* p5 [ Y$ R // Then we create a schedule that executes the& r! h- Z( @3 s( V$ f
// modelActions. modelActions is an ActionGroup, by itself it
' u) m, d9 q9 l0 x // has no notion of time. In order to have it executed in: @9 v# H+ o6 M; Z# k) \ F+ a
// time, we create a Schedule that says to use the
3 Q1 d, u, c! @! P& h% H // modelActions ActionGroup at particular times. This
, p" R5 L0 w8 B$ ~7 D% ~$ C5 F& v" ` // schedule has a repeat interval of 1, it will loop every Y% _, Q8 b" O L# }8 e# x
// time step. The action is executed at time 0 relative to
% ^8 Q6 F: B; N& Q, [' t // the beginning of the loop.
# j6 R% j& l* x. v& j$ N
) O: D9 Z' V( D! c // This is a simple schedule, with only one action that is
/ x9 \( y" p) `9 w9 h // just repeated every time. See jmousetrap for more8 u) P" r1 Y6 B2 f6 }6 V: P: c
// complicated schedules.& [3 M6 e6 t, x% t8 p* K+ ~+ q
B: E0 R" p/ e9 i2 {! M
modelSchedule = new ScheduleImpl (getZone (), 1);
: E: D0 j Z7 }' | modelSchedule.at$createAction (0, modelActions);
8 _+ l0 t% t) U- X, d
5 f5 {; i! e7 G& m; O return this;# r/ l6 s2 i' u
} |