, . , , . . 15.4 Model, world. . 7.12 7. : . , , , . . , , . , .
. 15.3. , . , function i-ro Model (. 15.4), :
agent.item(i).function(...);
Model , , :
for(int i=0; i < agent.size (); i++){
Agent a = agent. item(i),-
// - }
world, world . owner:
Model owner = (Model)getOwner();
i-ro world :
owner.agent.item(i).function(...);
, , :
((Model)getOwner()).agent.item(i);
. , , , . 15.4, Model , MiddieAge, . . . 15.2. :
Model m = (Model(getOwner();
MiddieAge :
.++;
:
.--;
Agent, , , , . : , , , .
15.6.
. , "" . Agent Agent :
|
|
Agent other;
. , , , . , . 15.4, Model:
Model m = (Model)getOwner();
i i-o agent:
other = m.agent.item(i);
, , :
do
other = m.agent.random(); while(other == this);
, other , :
other.function();
.
other.port. receive (...);
. .
, , . . Agent , vx, vy, . , agent ( Agent), Environment. , (. 15.5).
width height:
= uniform(width);
= uniform(height);
vx, vy:
+= vx;
+= vy;
□ Environment :
double distance) Agent a, Agent ) { double dx = a.x - b.x; double dy = . - b.y return sqrt(dx*dx + dy*dy);
}
- r:
Environment env = (Environment)getOwner(); for(int i=0; i<env.agent.size(); i++)
if(env.distance(this, env.agent.item(i)) < R)
// - ...
, (. 15.6).
Environment. , , . Java 7, vector.
vector . cell
Vector.
□ :
cell.size();
F
□ agentA cell:
cell.add(agentA);
□ agentA cell:
cell.remove(agentA);
□ i- :
(Agent)cell.get(i);
. Java , object. get object. , , . . Agent, , .
|
|
- cells nxm ( Agent), :
cells = new Vector[n][m]; fort int r=0; r<n; r++)
for(int c=0; c<m; C++)
cells[r][c] = new Vector();
Agent cells:
Vector[][] cells = ((Environment)getOwner()).cells;
, . r, , , .
□ :
= uniform_discr(0,-1); = uniform_discr(0,m-l); cells[][].add(this);
□ 1 , :
cells[][++].remove(this); cells[][].add(this);
□ :
int N = cells[r+1] [].size ();
□ r, c:
int k = uniform_discr(0,cells[r][].size()-1); // Agent a = (Agent)cells[r][].get();
get vector, , . . object Agent, .
, , , . , , (. 15.7).
agent, Agent (. 15.7). ( ) Environment, locations. , .. location[i] i- "", . "" , Environment , , 25 : Vector [ ] locations = new Vector[25];
:
for(int i=0; i<25; i++)
locations[i] = new Vector();
, , , , "". -, . env: Environment env = ((Environment)getOwner());
env. locations. location vector (. 15.7). , .
□ "" :
int k = unifrom_discr(0, locations.length-1) location = env.locations[ ]; location.add(this);
□ "":
location.remove(this);
□ "", :
int N = location.size();
□ "", :
int k = unifrom_discr(0, locationo.length-1) Agent a = (Agent)location.get();
get vector, object Agent.
15.8. :
(contagious Ants) , . - , "" . , : , . , , .
|
|
, , . , .
Model Examples\Part IV. . . 15.8.
, . . , .
. . . , , . . , , . . , . ( ) , , , . () , .
. (Ant), Model, , -. ants ( Ant). numAnts , . 0 maxX, Y 0 maxY,
maxVelocity. maxX, maxY maxVelocity . .
Ant ()
: , , .
, . main , health : (. 15.9).
. . , vx, vy , obsticie , . m , .
|
|
, X Y, , . , vx, vy , Ant , . , , 0 mX maxY . , , : uniform) -maxVelocity, maxVelocity)
obsticie () Ant , . , null . , .
m Model, . . null, :
m = (Model)getOwner();
Ant v, . .
. maxvelocity, maxX maxY Ant . turnAngle , , , . stopTime , . , , Ant (. . ).
doctor trace Ant, . , true , . randomTrue(p), true . doctor trace :
randomTrue(0.1) randomTrue(0.03)
, 10 % 3 % .
. main (. 15.10). : going stop. , , , .
, . border, Border .
border Ant. , stop ().
border AnyLogic, going "" . setModified () . Model. .
going stop , . (obsticle). : , ( health "cure"). , ( health "afflict").
|
|
stop , stopTime, . turnAngle, . .
health (. 15.11), , ok bad.
, ( ), "" ("afflict") .
, , , "" ("cure") .
ok m.numOk++, , . , m Model, . m.numOk--. bad .
Model
Model , numAfflicted, . , . , ok bad . ( Ant) stepTimer. :
- numAnts ;
- maxX, maxY, maxVelocity, turnAngle stopTime , Ant, Model,
Model;
- visionAngle , , ;
- step , Ant .
Model , mX maxY 600. , 600x600, 0 600.
, , ants. , , , , . .
doctor trace Ant
randomTrue(0.03) randomTrue (0.1) .
Model ants. ants . , . , ants (maxX, maxY, maxvelocity, turnAngle stopTime), Ant, Model, Model, Ant.
stepTimer step update, Model. "" , , . . . . , - . checkobsticle, . , obsticle , , ( setModified ).
update , , - ( obsticle null). , (vx, vy), , ( setModified). , ,
step. , . .
. , ( ) ( ). , . :
doctor? Color.black: health.isStateActive(health.ok)? Color.blue: Color.red
, (color.black), doctor ( , ). , (color.blue), health ok (. . ). , , .
( obsticle!= null), ( obsticle). , , 0.3 Math, sin (getTime() * 2) * 0.3
. ( ), , . . obsticie . , , , . , , .
(, trace true) . , ( -) , trace, . . , trace . path. ,
, , Ant, , :
if(' trace && obsticle == null) {
path.setPoint(0, x, );
for(int i=path.getPoints()-1; i>=l; i--)
path.setPoint(i, path.getPointX(i-l), path.getPointY(i-1)); } .
, , . ( , ), ( , -), ( , , , ) .
16