This appendix contains the complete textual definition of the ODML model cre- ated for the distributed sensor network domain introduced in Chapter 2 and described more completely in [110]. The graphical template first shown in Figure 2.10a is re- peated above for convenience. The code itself is commented to facilitate inspection, and I will provide a brief outline of its contents below.
The code itself is divided into several different sections. The enclosing organiza- tion provides the structure in which the other node definitions exist. It begins by defining the high-level has-a relationships, which are nominally the root entities of the working organization. These consist of the environment, a set of sectors and a set of track managers. The high level utility calculation is also contained here, which is simply the negative average RMS error predicted by the model. The bulk of the remaining fields in organization are a set of constants that gather a range of organizational statistics for logging purposes. They are not used elsewhere.
Following the organization is a series of node definitions, beginning withenviron- ment. It is here that the num targets and sensors per sector variables are defined, encoding two important organizational choices that must be made during instantia- tion. The remainder of environment consists of a number of constants defining the shape of the sensor area and characteristics of the sensors and activities entities can perform. These could be placed elsewhere (in the sensornode, for example), but are kept in environmentjust to combine all such external factors in one place.
organization
environment
1
sector
env.num_sectors
track_manager
env.num_targets
sector_manager
1
sensor
num_sensors
agent
1
robust-agent normal-agent
1
num_agents sm_tm_relation
sector_managers
s_tm_relation
sensors
Figure C.1. Graphical view of the ODML DNS model.
Thesectornode follows. It provides two functions of interest. The first is its struc- tural importance, as the root for a sector manager and a set of sensors. The second is the effective area, the constant used to specify the dimensions of the sector itself.
As described in Section 2.3.1, a map function is used to determine this characteristic on a case-by-case basis.
Thesector manageris the first role seen in the model. It is fairly simple, containing a has-a relationship with theagentthat will take on the role, an is-a relationship with entityto acquire a set of common characteristics, and a set of modifiers used to pass communication load values to the agent. The communication values themselves are initialized to zero in entity, and are determined exclusively by the relationships the manager will take part in.
Thesensornode also has a has-a relationship withagent, an is-a relationship with entity, and a set of modifiers to disseminate its communication load. In addition, it has a set of constants that are used to determine the sensing tasks it will perform.
Its requested measurement rate is initialized to zero, and will be affected by the rela- tionships it forms with track managers. The requested rate, along with the maximum possible sensing rate, is used to determine the actual measurement rate. A scaling
factor actual measurement ratio is also calculated here, which is used to determine how much of the sensor’s efforts will go to each track manager.
The track managerrole comes next, with similar relationships toagentand entity that the previous two roles have. Unlike those two roles, the has-a relationship with agent can have a non-unary size num agents. As described in Section 2.3.5, role migration is modeled by applying the effects of the role to one or more agents. A set of constants is used to estimate this num agents, which is used to specify the magnitude of the has-a relationship and to scale the communication load values passed on to those agents. Has-a relationships are also created to a set of sm tm relations and s tm relations, to model the track manager’s relationships to the available sector managers and sensors, respectively. Following this, a set of constants determine the requested sensors, which is used to determine the requested measurement rate. The actual measurement rate, which is initialized to zero, is determined by the aggregate effects of the track manager’s relationships. This is then used to calculate the rms error, which is estimated with a function derived from empirical data.
The first type of track manager relationship, the s tm relation that binds it to a sensor, is used to propagate the demand of the manager to the sensor in question.
The specific track managerandsensorare themselves passed in as parameters during the initialization process. The relationship uses those references to first determine the requested measurement rate, and to pass that value to the sensor with a modi- fier. The actual measurement rate created by the relationship is calculated by scaling the requested measurement rate by the actual measurement ratio computed by the sensor. This is then provided to the track manager with another modifier. The com- munication load and messages types needed to support these acts are also calculated here, and passed along with modifiers.
Thesm tm relationconnects a track manager to a sector manager. The communi- cation load of the sector manager is used to estimate adirectory delay. This value can
reduce the requested measurement rate of the track manager as described in Section 2.3.7. Like the previous relationship, the messaging totals needed to support this relationship are also calculated here.
The node definitions for agent,normal agent, and robust agentfollow. These con- tain default values the number of sensors under control and the number of roles taken on. It also has an is-a relationship with entity. As described in Section 2.3.4, these are used primarily to aggregate and store the effects of multiple role assignments.
Constraints put in place here also control the number of sensors that may be con- trolled.
The final node definition is forentity, which is a simple base node that is extended by many of the nodes described above. It provides default values for the various message loads covered by the model, as well as a communication loadconstant that combines them into a single representative metric. This node is of little significance in the model, and has been omitted from previous descriptions for clarity.
The textual model itself follows below. Text surrounded by the normal XML comment syntax (<!--comment -->) are inline comments.
< ? xml v e r s i o n = " 1.0 " e n c o d i n g = " UTF -8 " ? >
< o r g a n i z a t i o n name = " s e n s o r _ o r g a n i z a t i o n " >
< !- - M e m b e r s - ->
< has - a name = " env " > e n v i r o n m e n t < / has - a >
< has - a name = " s e c t o r s " size = " env . n u m _ s e c t o r s " > s e c t o r ( this , env ) < / has - a >
< has - a name = " t r a c k e r s " size = " env . n u m _ t a r g e t s " > t r a c k _ m a n a g e r ( this , env , s e c t o r s ) < / has - a >
< !- - A few c o n v e n i e n c e v a l u e s - ->
< c o n s t a n t name = " s e n s o r _ d e n s i t y " > f o r a l l a v g ( s e c t o r s . s e n s o r _ d e n s i t y ) < / c o n s t a n t >
< c o n s t a n t name = " t o t a l _ s e n s o r s " > f o r a l l s u m ( s e c t o r s . n u m _ s e n s o r s ) < / c o n s t a n t >
< c o n s t a n t name = " t o t a l _ t a r g e t s " > env . n u m _ t a r g e t s < / c o n s t a n t >
< !- - C a l c u l a t e u t i l i t y - ->
< c o n s t a n t name = " a v e r a g e _ r m s " > f o r a l l a v g ( t r a c k e r s . rms ) < / c o n s t a n t >
< c o n s t a n t name = " u t i l i t y " > -1 * a v e r a g e _ r m s < / c o n s t a n t >
< !- - S o m e s t a t i s t i c s to log - ->
< c o n s t a n t n a m e = " a g e n t s " > u n i q u e ( t r a c k e r s . agent , s e c t o r s . m a n a g e r . agent , s e c t o r s . s e n s o r s . a g e n t ) < / c o n s t a n t >
< c o n s t a n t name = " s t d d e v _ a g e n t _ c o m m _ l o a d " > f o r a l l s t d d e v ( a g e n t s . c o m m u n i c a t i o n _ m e s s a g e s ) < / c o n s t a n t >
< c o n s t a n t name = " t o t a l _ a g e n t _ c o m m _ l o a d " > f o r a l l s u m ( a g e n t s . c o m m u n i c a t i o n _ m e s s a g e s ) < / c o n s t a n t >
< c o n s t a n t name = " s e c t o r _ m a n a g e r s " > u n i q u e ( s e c t o r s . m a n a g e r ) < / c o n s t a n t >
< c o n s t a n t name = " s e n s o r s " > u n i q u e ( s e c t o r s . s e n s o r s ) < / c o n s t a n t >
< c o n s t a n t n a m e = " r o l e s " > u n i q u e ( trackers , s e c t o r _ m a n a g e r s , s e n s o r s ) < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ u p d a t e " > f o r a l l s u m ( r o l e s . m e s s a g e _ t b ) + f o r a l l s u m ( r o l e s . m e s s a g e _ r b ) < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ d i r e c t o r y " > f o r a l l s u m ( r o l e s . m e s s a g e _ d r q ) + f o r a l l s u m ( r o l e s . m e s s a g e _ d r r ) < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ m e a s u r e m e n t " > f o r a l l s u m ( r o l e s . m e s s a g e _ r r ) < / c o n s t a n t >
< log name = " RMS " > a v e r a g e _ r m s < / log >
< log name = " data " file = " o r g a n i z a t i o n . dat " a p p e n d = " true " > [ env . s e n s o r s _ p e r _ s e c t o r , env . n u m _ s e n s o r s , env . n u m _ t a r g e t s , a v e r a g e _ r m s , s t d d e v _ a g e n t _ c o m m _ l o a d , t o t a l _ a g e n t _ c o m m _ l o a d / 1000 , m e s s a g e _ u p d a t e * env . time / 1000 ,
m e s s a g e _ d i r e c t o r y * env . time / 1000 , m e s s a g e _ m e a s u r e m e n t * env . t i m e / 1 0 0 0 ] < / log >
< log name = " data " file = " d i r e c t o r y . dat " a p p e n d = " true " > [ env . s e n s o r s _ p e r _ s e c t o r , f o r a l l a v g ( s e c t o r _ m a n a g e r s . c o m m u n i c a t i o n _ l o a d ) , f o r a l l a v g ( t r a c k e r s . d i r e c t o r y _ d e l a y ) , a v e r a g e _ r m s ] < / log >
< log name = " m e s s a g e s " > a g e n t s . c o m m u n i c a t i o n _ m e s s a g e s < / log >
< log name = " o r g a n i z a t i o n _ d o t " file = " r e s u l t s / o r g a n i z a t i o n . dot " > t o d o t ( t h i s ) < / log >
< log name = " o r g a n i z a t i o n _ d o t " file = " r e s u l t s / o r g a n i z a t i o n - SS - NT . dot " > t o d o t ( t h i s ) < / log >
< log name = " o r g a n i z a t i o n _ t e m p l a t e _ d o t " file = " r e s u l t s / o r g a n i z a t i o n - t e m p l a t e . dot " >
t o d o t ( t h i s . t e m p l a t e ) < / log >
< log name = " o r g a n i z a t i o n _ d e p d o t " file = " r e s u l t s / o r g a n i z a t i o n - d e p e n d e n c i e s . dot " >
t o d e p d o t ( this . t e m p l a t e ) < / log >
< !- - E n v i r o n m e n t - ->
< node type = " e n v i r o n m e n t " name = " e n v i r o n m e n t " size = " 1 " >
< !- - O r g a n i z a t i o n a l d e c i s i o n s , t h e s e c o n t r o l how m a n y t a r g e t s - ->
< !- - t h e r e w i l l be and the s i z e of the s e c t o r s - ->
< v a r i a b l e name = " n u m _ t a r g e t s " d e c i s i o n = " NT " > 1 ,2 ,4 ,6 ,8 ,12 ,24 < / v a r i a b l e >
< v a r i a b l e name = " s e n s o r s _ p e r _ s e c t o r " d e c i s i o n = " SS " > 1 ,2 ,4 ,9 ,18 ,36 < / v a r i a b l e >
< !- - N u m b e r of e n t i t i e s in the e n v i r o n m e n t - ->
< c o n s t a n t name = " n u m _ s e n s o r s " > 36 < / c o n s t a n t >
< !- - A r e a v a l u e s - ->
< c o n s t a n t n a m e = " w i d t h " > 90 < / c o n s t a n t >
< c o n s t a n t n a m e = " h e i g h t " > 90 < / c o n s t a n t >
< c o n s t a n t n a m e = " a r e a " > w i d t h * h e i g h t < / c o n s t a n t >
< c o n s t a n t name = " s e n s o r _ r a d i u s " > 20 < / c o n s t a n t >
< c o n s t a n t name = " n u m _ s e c t o r s " > n u m _ s e n s o r s / s e n s o r s _ p e r _ s e c t o r < / c o n s t a n t >
< !- - B e h a v i o r c o n s t a n t s - ->
< c o n s t a n t name = " s l o t _ l e n g t h " > 900 < / c o n s t a n t > < !- - ms - ->
< c o n s t a n t name = " m e a s u r e m e n t _ d u r a t i o n " > 900 / 1 < / c o n s t a n t > < !- - ms / m e a s u r e m e n t - ->
< c o n s t a n t name = " m e a s u r e m e n t _ r a t e " > 1 / s l o t _ l e n g t h < / c o n s t a n t > < !- - R a t e t h a t m e a s u r e m e n t s are r e q u e s t e d - ->
< c o n s t a n t name = " u p d a t e _ r a t e " > 1 / 2000 * 1.3 </ c o n s t a n t > < !- - R a t e t h a t SMs are g i v e n t a r g e t u p d a t e s - ->
< c o n s t a n t name = " time " > 1 4 3 8 4 0 < / c o n s t a n t >
< log name = " area " > area </ log >
< log name = " s e n s o r s _ p e r _ s e c t o r " > s e n s o r s _ p e r _ s e c t o r < / log >
< / n o d e >
< !- - S e c t o r - ->
< node type = " s e c t o r " n a m e = " s e c t o r " >
< p a r a m > o r g a n i z a t i o n : o r g , e n v i r o n m e n t : e n v < / p a r a m >
< !- - P o p u l a t e the s e c t o r w i t h a m a n a g e r and s e n s o r s - ->
< has - a name = " m a n a g e r " > s e c t o r _ m a n a g e r ( org , env , this ) < / has - a >
< has - a name = " s e n s o r s " size = " n u m _ s e n s o r s " > s e n s o r ( org , env , m a n a g e r ) < / has - a >
< c o n s t a n t name = " n u m _ s e n s o r s " > env . s e n s o r s _ p e r _ s e c t o r < / c o n s t a n t >
< !- - D e t e r m i n e the d i m e n s i o n s of the s e c t o r - ->
< c o n s t a n t name = " a c t u a l _ a r e a " > env . area / env . n u m _ s e c t o r s < / c o n s t a n t >
< c o n s t a n t name = " a c t u a l _ c o v e r a g e " > a c t u a l _ a r e a / env . a r e a < / c o n s t a n t >
< c o n s t a n t name = " i n f l u e n c e _ r a n g e " > env . s e n s o r _ r a d i u s < / c o n s t a n t >
< c o n s t a n t name = " i n f l u e n c e _ r a n g e " > 11 < / c o n s t a n t >
< c o n s t a n t name = " e f f e c t i v e _ a r e a " > map ( env . n u m _ s e c t o r s , 1 , env . area ,
2 , env . w i d t h * ( env . h e i g h t / 2 + i n f l u e n c e _ r a n g e ) , 3 , (1 / env . n u m _ s e c t o r s ) *
(2 * env . w i d t h * ( env . h e i g h t / 3 + i n f l u e n c e _ r a n g e ) + 1 * env . w i d t h * ( env . h e i g h t / 3 + i n f l u e n c e _ r a n g e * 2) ) ,
4 , ( env . w i d t h / 2 + i n f l u e n c e _ r a n g e ) * ( env . h e i g h t / 2 + i n f l u e n c e _ r a n g e ) , 9 , (1 / env . n u m _ s e c t o r s ) *
(4 * ( env . w i d t h / 3 + i n f l u e n c e _ r a n g e ) * ( env . h e i g h t / 3 + i n f l u e n c e _ r a n g e ) +
4 * ( env . w i d t h / 3 + i n f l u e n c e _ r a n g e * 2) * ( env . h e i g h t / 3 + i n f l u e n c e _ r a n g e ) +
( env . w i d t h / 3 + i n f l u e n c e _ r a n g e * 2) * ( env . h e i g h t / 3 + i n f l u e n c e _ r a n g e * 2) ) ,
18 , (1 / env . n u m _ s e c t o r s ) *
(4 * ( env . w i d t h / 3 + i n f l u e n c e _ r a n g e ) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e ) +
2 * ( env . w i d t h / 3 + i n f l u e n c e _ r a n g e * 2) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e ) +
8 * ( env . w i d t h / 3 + i n f l u e n c e _ r a n g e ) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e * 2) +
4 * ( env . w i d t h / 3 + i n f l u e n c e _ r a n g e * 2) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e * 2) ) ,
36 , (1 / env . n u m _ s e c t o r s ) *
(4 * ( env . w i d t h / 6 + i n f l u e n c e _ r a n g e ) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e ) +
8 * ( env . w i d t h / 6 + i n f l u e n c e _ r a n g e * 2) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e ) +
8 * ( env . w i d t h / 6 + i n f l u e n c e _ r a n g e ) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e * 2) +
16 * ( env . w i d t h / 6 + i n f l u e n c e _ r a n g e * 2) * ( env . h e i g h t / 6 + i n f l u e n c e _ r a n g e * 2) )
) < / c o n s t a n t >
< c o n s t a n t name = " e f f e c t i v e _ c o v e r a g e " > e f f e c t i v e _ a r e a / env . a r e a < / c o n s t a n t >
< c o n s t a n t name = " s e n s o r _ d e n s i t y " > n u m _ s e n s o r s / a c t u a l _ a r e a < / c o n s t a n t >
< log name = " a c t u a l _ a r e a " > a c t u a l _ a r e a < / log >
< log name = " e f f e c t i v e _ a r e a " > e f f e c t i v e _ a r e a < / log >
< / n o d e >
< !- - S e c t o r M a n a g e r - ->
< node type = " s e c t o r _ m a n a g e r " name = " SM " >
< p a r a m > o r g a n i z a t i o n : o r g , e n v i r o n m e n t : e n v , s e c t o r : s e c t o r < / p a r a m >
< is - a > e n t i t y < / is - a >
< !- - Role - A g e n t r e l a t i o n s h i p - ->
< has - a n a m e = " a g e n t " d i s c r i m i n a t o r = " roles , s e n s o r s _ c o n t r o l l e d " d e c i s i o n = " new { normal - a g e n t " > a g e n t ( e n v ) < / has - a >
< !- - C o n s t a n t s - ->
< c o n s t a n t name = " role " > " M " < / c o n s t a n t >
< c o n s t a n t name = " t a r g e t _ u p d a t e s " > 0 < / c o n s t a n t >
< !- - C h a r a c t e r i s t i c s p a s s e d to the b o u n d a g e n t - ->
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ r r " op = " + " > m e s s a g e _ r r < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ t b " op = " + " > m e s s a g e _ t b < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ r b " op = " + " > m e s s a g e _ r b < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ d r r " op = " + " > m e s s a g e _ d r r < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ d r q " op = " + " > m e s s a g e _ d r q < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . r o l e s " op = " + " > 1 < / m o d i f i e r >
< / n o d e >
< !- - S e n s o r M a n a g e r - ->
< node type = " s e n s o r " n a m e = " S " >
< p a r a m > o r g a n i z a t i o n : o r g , e n v i r o n m e n t : e n v , s e c t o r _ m a n a g e r : m a n a g e r < / p a r a m >
< is - a > e n t i t y < / is - a >
< !- - Role - A g e n t r e l a t i o n s h i p - ->
< has - a n a m e = " a g e n t " d i s c r i m i n a t o r = " s e n s o r s _ c o n t r o l l e d " > a g e n t ( env ) < / has - a >
< !- - R o l e c o n s t a n t s - ->
< c o n s t a n t name = " role " > " A " < / c o n s t a n t >
< c o n s t a n t n a m e = " r a d i u s " > env . s e n s o r _ r a d i u s < / c o n s t a n t >
< c o n s t a n t name = " area " > 3.14 * r a d i u s ^2 </ c o n s t a n t >
< !- - C a l c u l a t e a c t u a l m e a s u r e m e n t p e r f o r m a n c e - ->
< c o n s t a n t name = " r e q u e s t e d _ m e a s u r e m e n t _ r a t e " > 0 < / c o n s t a n t >
< c o n s t a n t name = " m e a s u r e m e n t _ d u r a t i o n " > env . m e a s u r e m e n t _ d u r a t i o n < / c o n s t a n t >
< c o n s t a n t name = " r e q u e s t e d _ m e a s u r e m e n t _ d u r a t i o n " > r e q u e s t e d _ m e a s u r e m e n t _ r a t e * 1000 * m e a s u r e m e n t _ d u r a t i o n < / c o n s t a n t >
< c o n s t a n t name = " a c t u a l _ m e a s u r e m e n t _ d u r a t i o n " > min ( r e q u e s t e d _ m e a s u r e m e n t _ d u r a t i o n , 1 0 0 0 ) < / c o n s t a n t >
< c o n s t a n t name = " a c t u a l _ m e a s u r e m e n t _ r a t e " > a c t u a l _ m e a s u r e m e n t _ d u r a t i o n / ( m e a s u r e m e n t _ d u r a t i o n * 1 0 0 0 ) < / c o n s t a n t >
< c o n s t a n t name = " a c t u a l _ m e a s u r e m e n t _ r a t i o " > a c t u a l _ m e a s u r e m e n t _ r a t e / r e q u e s t e d _ m e a s u r e m e n t _ r a t e < / c o n s t a n t >
< !- - DR M e s s a g e s - ->
< m o d i f i e r name = " m e s s a g e _ d r r " op = " + " > 2 / env . t i m e < / m o d i f i e r >
< !- - C h a r a c t e r i s t i c s p a s s e d to the b o u n d a g e n t - ->
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ r r " op = " + " > m e s s a g e _ r r < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ t b " op = " + " > m e s s a g e _ t b < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ r b " op = " + " > m e s s a g e _ r b < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ d r r " op = " + " > m e s s a g e _ d r r < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ d r q " op = " + " > m e s s a g e _ d r q < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . s e n s o r s _ c o n t r o l l e d " op = " + " > 1 < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . r o l e s " op = " + " > 1 < / m o d i f i e r >
< log name = " r e q _ r a t e " > r e q u e s t e d _ m e a s u r e m e n t _ r a t e * 1000 </ log >
< log name = " a c _ r a t e " > a c t u a l _ m e a s u r e m e n t _ r a t e * 1000 </ log >
< / n o d e >
< !- - T r a c k M a n a g e r - ->
< node type = " t r a c k _ m a n a g e r " name = " TM " >
< p a r a m > o r g a n i z a t i o n : o r g , e n v i r o n m e n t : e n v ,[ s e c t o r ] : s e c t o r s < / p a r a m >
< is - a > e n t i t y < / is - a >
< !- - A g e n t ( s ) the r o l e is b o u n d to , and the r e l a t i o n s h i p s it has w i t h o t h e r e n t i t i e s - ->
< has - a n a m e = " a g e n t " s i z e = " n u m _ a g e n t s " d i s c r i m i n a t o r = " r o l e s " d e c i s i o n = " r o l e s
=1.0 , r o l e s =2.0 , r o l e s =3.0 , r o l e s =4.0 , r o l e s =5.0 , r o l e s = 6 . 0 " > a g e n t ( env ) < / has - a >
< has - a name = " s m _ r e l a t i o n s " > f o r a l l ( sm , s e c t o r _ m a n a g e r s ) : s m _ t m _ r e l a t i o n ( org , this , sm ) < / has - a >
< has - a name = " s _ r e l a t i o n s " > f o r a l l ( s , s e n s o r s ) : s _ t m _ r e l a t i o n ( org , this , s ) < / has - a
>
< !- - R o l e c o n s t a n t s - ->
< c o n s t a n t name = " role " > " T " < / c o n s t a n t >
< c o n s t a n t name = " u p d a t e _ r a t e " > env . u p d a t e _ r a t e < / c o n s t a n t >
< c o n s t a n t name = " v e l o c i t y " > 1 / 1 0 0 0 < / c o n s t a n t >
< c o n s t a n t name = " s e c t o r _ m a n a g e r s " > list ( s e c t o r s . m a n a g e r ) < / c o n s t a n t >
< c o n s t a n t name = " s e n s o r s " > list ( s e c t o r s . s e n s o r s ) < / c o n s t a n t >
< !- - T r a c k m i g r a t i o n e f f e c t i v e l y m e a n s the TM r o l e for a t a r g e t a f f e c t s m u l t i p l e a g e n t s - ->
< c o n s t a n t name = " a v e r a g e _ s e c t o r _ a r e a " > f o r a l l a v g ( s e c t o r s . a c t u a l _ a r e a ) < / c o n s t a n t >
< c o n s t a n t name = " a v e r a g e _ s e c t o r _ p a t h " > 0.8 * a v e r a g e _ s e c t o r _ a r e a ^ 0 . 5 < / c o n s t a n t >
< c o n s t a n t name = " m i g r a t i o n _ r a t e " > 1 / ((2 * a v e r a g e _ s e c t o r _ a r e a ) ^0.5 / v e l o c i t y ) <
/ c o n s t a n t >
< c o n s t a n t name = " m a x _ a g e n t s " > 5 < / c o n s t a n t >
< c o n s t a n t name = " n u m _ a g e n t s " > max (1 , min ( m a x _ a g e n t s , m i g r a t i o n _ r a t e * env . time ) ) <
/ c o n s t a n t >
< c o n s t a n t name = " s e c t o r s _ s e e n " > min ( env . n u m _ s e c t o r s , (1 / a v e r a g e _ s e c t o r _ p a t h ) * v e l o c i t y * max (1 , u n c e r t a i n t y _ r a d i u s / a v e r a g e _ s e c t o r _ p a t h ) * env . time ) < / c o n s t a n t >
< c o n s t a n t name = " p e r c e n t _ s e c t o r s _ s e e n " > s e c t o r s _ s e e n / env . n u m _ s e c t o r s < / c o n s t a n t >
< c o n s t a n t name = " p e r c e n t _ s e c t o r s _ s e e n " > 1 < / c o n s t a n t >
< c o n s t a n t name = " u n c e r t a i n t y _ r a d i u s " > 5 < / c o n s t a n t >
< c o n s t a n t name = " i n f l u e n c e _ r a d i u s " > u n c e r t a i n t y _ r a d i u s + 10 < / c o n s t a n t >
< c o n s t a n t name = " t a r g e t _ a r e a " > 3.14 * i n f l u e n c e _ r a d i u s ^2 < / c o n s t a n t >
< c o n s t a n t name = " d e s i r e d _ s e n s o r s " > 3 < / c o n s t a n t >
< c o n s t a n t name = " s e n s o r _ d e n s i t y " > f o r a l l a v g ( s e c t o r s . s e n s o r _ d e n s i t y ) < / c o n s t a n t >
< c o n s t a n t name = " a c t u a l _ s e n s o r s _ a v a i l a b l e " > t a r g e t _ a r e a * s e n s o r _ d e n s i t y < / c o n s t a n t >
< c o n s t a n t name = " r e q u e s t e d _ s e n s o r s " > min ( d e s i r e d _ s e n s o r s , a c t u a l _ s e n s o r s _ a v a i l a b l e ) < / c o n s t a n t >
< c o n s t a n t name = " d i r e c t o r y _ d e l a y " > f o r a l l a v g ( s m _ r e l a t i o n s . d i r e c t o r y _ d e l a y ) < / c o n s t a n t >
< c o n s t a n t name = " m i g r a t i o n _ d e l a y " > 8 0 0 0 < / c o n s t a n t >
< c o n s t a n t name = " r e q u e s t e d _ m e a s u r e m e n t _ r a t e " > env . m e a s u r e m e n t _ r a t e * 4.0^ min (0 , v e l o c i t y * 1000 * ( ( env . n u m _ s e n s o r s / ( r e q u e s t e d _ s e n s o r s * org .
t o t a l _ t a r g e t s ) ) - 1.9) ) * (1 - ( v e l o c i t y / a v e r a g e _ s e c t o r _ p a t h ) * ( d i r e c t o r y _ d e l a y + m i g r a t i o n _ d e l a y /2) ) < / c o n s t a n t >
< c o n s t a n t name = " a c t u a l _ m e a s u r e m e n t _ r a t e " > 0 < / c o n s t a n t >
< c o n s t a n t name = " rms " > -1.8 + 1.59 e -2 * ( a c t u a l _ m e a s u r e m e n t _ r a t e + 1.35 e -3) ^ -1 < / c o n s t a n t >
< !- - D i s t r i b u t e c o m m u n i c a t i o n e v e n l y - ->
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ r r " op = " + " > m e s s a g e _ r r / n u m _ a g e n t s < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ t b " op = " + " > m e s s a g e _ t b / n u m _ a g e n t s < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ r b " op = " + " > m e s s a g e _ r b / n u m _ a g e n t s < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ d r r " op = " + " > m e s s a g e _ d r r / n u m _ a g e n t s < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . m e s s a g e _ d r q " op = " + " > m e s s a g e _ d r q / n u m _ a g e n t s < / m o d i f i e r >
< m o d i f i e r n a m e = " a g e n t . r o l e s " op = " + " > 1 < / m o d i f i e r >
< log name = " r e q _ s e n s o r s " > r e q u e s t e d _ s e n s o r s < / log >
< log name = " a c t u a l _ m s m n t s " > a c t u a l _ m e a s u r e m e n t _ r a t e < / log >
< log name = " s e c t o r s _ s e e n " > s e c t o r s _ s e e n < / log >
< log name = " rms " > rms </ log >
< / n o d e >
< !- - S e n s o r - T r a c k M a n a g e r R e l a t i o n s h i p - ->
< node type = " s _ t m _ r e l a t i o n " name = " S - TM " >
< p a r a m > o r g a n i z a t i o n : o r g , t r a c k _ m a n a g e r : t m , s e n s o r : s < / p a r a m >
< !- - D e t e r m i n e m e a s u r e m e n t r a t e - ->
< c o n s t a n t name = " r e q u e s t e d _ s e n s o r _ r a t e " > tm . r e q u e s t e d _ s e n s o r s / org . t o t a l _ s e n s o r s
< / c o n s t a n t >
< c o n s t a n t name = " r e q u e s t e d _ m e a s u r e m e n t _ r a t e " > tm . r e q u e s t e d _ m e a s u r e m e n t _ r a t e * r e q u e s t e d _ s e n s o r _ r a t e < / c o n s t a n t >
< m o d i f i e r name = " s . r e q u e s t e d _ m e a s u r e m e n t _ r a t e " op = " + " > r e q u e s t e d _ m e a s u r e m e n t _ r a t e
< / m o d i f i e r >
< !- - RR M e s s a g e s - ->
< c o n s t a n t name = " a c t u a l _ m e a s u r e m e n t _ r a t e " > r e q u e s t e d _ m e a s u r e m e n t _ r a t e * s . a c t u a l _ m e a s u r e m e n t _ r a t i o < / c o n s t a n t >
< m o d i f i e r name = " tm . a c t u a l _ m e a s u r e m e n t _ r a t e " op = " + " > a c t u a l _ m e a s u r e m e n t _ r a t e < / m o d i f i e r >
< m o d i f i e r name = " s . m e s s a g e _ r r " op = " + " > a c t u a l _ m e a s u r e m e n t _ r a t e < / m o d i f i e r >
< !- - RB M e s s a g e s - ->
< c o n s t a n t name = " r e b i n d _ r a t e " > r e q u e s t e d _ s e n s o r _ r a t e * ( tm . v e l o c i t y / ( s . r a d i u s / 4) ) < / c o n s t a n t >
< m o d i f i e r name = " tm . m e s s a g e _ r b " op = " + " > r e b i n d _ r a t e < / m o d i f i e r >
< log name = " r e q _ r a t e " > r e q u e s t e d _ m e a s u r e m e n t _ r a t e * 1000 </ log >
< log name = " a c _ r a t e " > a c t u a l _ m e a s u r e m e n t _ r a t e * 1000 </ log >
< / n o d e >
< !- - S e c t o r M a n a g e r - T r a c k M a n a g e r R e l a t i o n s h i p - ->
< node type = " s m _ t m _ r e l a t i o n " name = " SM - TM " >
< p a r a m > o r g a n i z a t i o n : o r g , t r a c k _ m a n a g e r : t m , s e c t o r _ m a n a g e r : s m < / p a r a m >
< !- - TB m e s s a g e s - ->
< c o n s t a n t name = " m e s s a g e _ t b " > sm . s e c t o r . e f f e c t i v e _ c o v e r a g e * tm . u p d a t e _ r a t e < / c o n s t a n t >
< m o d i f i e r name = " sm . t a r g e t _ u p d a t e s " op = " + " > m e s s a g e _ t b < / m o d i f i e r >
< m o d i f i e r name = " tm . m e s s a g e _ t b " op = " + " > m e s s a g e _ t b < / m o d i f i e r >
< !- - DR M e s s a g e s - ->
< c o n s t a n t name = " d i r e c t o r y _ q u e r i e s " > tm . p e r c e n t _ s e c t o r s _ s e e n * tm . n u m _ a g e n t s * sm . s e c t o r . n u m _ s e n s o r s / org . env . t i m e < / c o n s t a n t >
< m o d i f i e r name = " tm . m e s s a g e _ d r q " op = " + " > tm . p e r c e n t _ s e c t o r s _ s e e n / org . env . t i m e < / m o d i f i e r >
< m o d i f i e r name = " sm . m e s s a g e _ d r r " op = " + " > d i r e c t o r y _ q u e r i e s < / m o d i f i e r >
< !- - D i r e c t o r y D e l a y - ->
< c o n s t a n t name = " d i r e c t o r y _ d e l a y " > 3 0 0 0 < / c o n s t a n t >
< c o n s t a n t name = " p e r _ m e s s a g e _ d e l a y " > 0 < / c o n s t a n t >
< m o d i f i e r name = " d i r e c t o r y _ d e l a y " op = " + " > sm . c o m m u n i c a t i o n _ l o a d * 1000 * p e r _ m e s s a g e _ d e l a y < / m o d i f i e r >
< / n o d e >
< !- - B a s e a g e n t t y p e - ->
< n o d e t y p e = " a g e n t " a b s t r a c t = " true " >
< p a r a m > e n v i r o n m e n t : e n v < / p a r a m >
< is - a > e n t i t y < / is - a >
< !- - S o m e d e f a u l t s - ->
< c o n s t a n t name = " s e n s o r s _ c o n t r o l l e d " > 0 < / c o n s t a n t >
< c o n s t a n t n a m e = " r o l e s " > 0 < / c o n s t a n t >
< c o n s t r a i n t name = " s e n s o r s _ c o n t r o l l e d " op = " & lt ;= " > 1 < / c o n s t r a i n t >
< !- - C o m m u n i c a t i o n c h a r a c t e r i s t i c s - ->
< c o n s t a n t name = " c o m m u n i c a t i o n _ m e s s a g e s " > c o m m u n i c a t i o n _ l o a d * env . t i m e < / c o n s t a n t
>
< c o n s t a n t name = " c o m m u n i c a t i o n _ p r o f i l e " > [ m e s s a g e _ r r * env . time , m e s s a g e _ t b * env . time , m e s s a g e _ r b * env . time , m e s s a g e _ d r r * env . time , m e s s a g e _ d r q * env . time ] < / c o n s t a n t >
< log name = " p r o f i l e " > c o m m u n i c a t i o n _ p r o f i l e < / log >
< log name = " m e s s a g e s " > c o m m u n i c a t i o n _ m e s s a g e s < / log >
< log n a m e = " r o l e s " > p a r e n t s . r o l e < / log >
< / n o d e >
< !- - N o r m a l A g e n t - ->
< node type = " normal - a g e n t " n a m e = " a " >
< p a r a m > e n v i r o n m e n t : e n v < / p a r a m >
< is - a > a g e n t ( env ) < / is - a >
< c o n s t r a i n t name = " s e n s o r s _ c o n t r o l l e d " op = " == " > 1 < / c o n s t r a i n t >
< c o n s t r a i n t n a m e = " r o l e s " op = " & lt ;= " > 6 < / c o n s t r a i n t >
< / n o d e >
< !- - R o b u s t A g e n t - e x a m p l e only , not u s e d in e x p e r i m e n t s - ->
< node type = " robust - a g e n t " n a m e = " r " >
< p a r a m > e n v i r o n m e n t : e n v < / p a r a m >
< is - a > a g e n t ( env ) < / is - a >
< c o n s t r a i n t n a m e = " r o l e s " op = " & lt ;= " > 0 < / c o n s t r a i n t >
< / n o d e >
< !- - B a s e e n t i t y t y p e - ->
< node type = " e n t i t y " a b s t r a c t = " true " >
< c o n s t a n t name = " m e s s a g e _ r r " > 0 < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ t b " > 0 < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ r b " > 0 < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ d r q " > 0 < / c o n s t a n t >
< c o n s t a n t name = " m e s s a g e _ d r r " > 0 < / c o n s t a n t >
< c o n s t a n t name = " c o m m u n i c a t i o n _ l o a d " > m e s s a g e _ r r + m e s s a g e _ t b + m e s s a g e _ r b + m e s s a g e _ d r r + m e s s a g e _ d r q < / c o n s t a n t >
< log name = " comm " > c o m m u n i c a t i o n _ l o a d < / log >
< / n o d e >
< / o r g a n i z a t i o n >
APPENDIX D