-
Notifications
You must be signed in to change notification settings - Fork 0
/
HumanTrafficking_ABM.sbp
341 lines (271 loc) · 13 KB
/
HumanTrafficking_ABM.sbp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
<?xml version="1.0"?>
<!-- Evolver Model Specification File -->
<RePastEvolver:EvolverModelSpec xmlns:RePastEvolver="http://src.uchicago.edu/simbuilder/">
<RePastEvolver:EvolverProject ProjectDirectory="C:\Repast 3\Agent Analyst\output" PackageName="default_package" ProjectName="Environment" ClassPath="" consoleErr="true" consoleOut="true" >
<Description>
<![CDATA[
]]>
</Description>
<RePastEvolver:EvolverModel ModelName="Exercise3" DisplayName="HumanTrafficking_ABM" Class="class uchicago.src.simbuilder.beans.gis.DefaultGISModelProducer" gisPackage="ArcGIS" >
<RePastEvolver:action name="initAgents" sigReadOnly="true" retType="void" imports="uchicago.src.sim.util.Random" paramNames="">
<![CDATA[
def initAgents():
# Explicitly set the random number generator seed and initialize Random distributions
# Create RNG and set seed
Random.setSeed(100)
Random.createUniform()
# Initialize model level variables
self.initModel()
# Initialize the activity spaces of agents
self.initCitizens()
# Process the street nodes for use in the model
self.setupPlaces()
# Check to make sure values in shapefile fields are zero
for node as Place in self.places:
if node.totalVisit > 0:
node.totalVisit = 0
#print "WARNING: Shapefile had non-zero values in counter fields"
# Initialize the cop agents
self.initCops()
]]>
</RePastEvolver:action>
<RePastEvolver:action name="updateDisplay" sigReadOnly="true" retType="void" imports="" paramNames="">
<![CDATA[
def updateDisplay():
self.updateGISDisplay()
]]>
</RePastEvolver:action>
<RePastEvolver:action name="writeAgents" sigReadOnly="true" retType="void" imports="" paramNames="">
<![CDATA[
def writeAgents():
baseFilePath = "F:\\HumanTrafficking\\HumanTrafficking_ABM\\"
self.writeAgents(self.places, baseFilePath + "IllicitGrid_NodeList_20140711_1517.shp")
# baseFilePath = "C:\\ESRIPress\\AgentAnalyst\\Chapter06\\Data\\"
# self.writeAgents(self.places, baseFilePath + "StreetIntersections.shp")
]]>
</RePastEvolver:action>
<RePastEvolver:action name="setupPlaces" sigReadOnly="false" retType="void" imports="java.io.BufferedReader java.io.FileReader java.util.StringTokenizer" paramNames="">
<![CDATA[
def setupPlaces():
# Put Places in a HashMap where the key is the strnode-id
# Creates the map
self.placeMap = LinkedHashMap()
# Add the places to the hashmap
for currentPlace as Place in self.places:
specNode = "0"
specNode = String.valueOf(currentPlace.getSTRCL_())
specNodeNew = Float(specNode)
self.placeMap.put(specNodeNew, currentPlace)
currentPlace.setMyNeighbors(ArrayList())
# Read the neighbors file and set each nodes neighbors.
# The neighbors files lists the active node and the neighboring
# nodes of that active node. The map created above is used to
# get the neighbors for each active node.
fileName = "F:\\HumanTrafficking\\HumanTrafficking_ABM_ABMT_AdjacentNodeList_20140711_1612.csv"
# fileName = "C:\\ESRIPress\\AgentAnalyst\\Chapter06\\Data\\nodenghbrs.csv"
reader = BufferedReader(FileReader(fileName))
line = reader.readLine()
while(line):
tokenizer = StringTokenizer(line, ",")
if(tokenizer.hasMoreTokens()):
activeNode = tokenizer.nextToken().trim()
actNodeObject = Float(activeNode)
currentPlace = (Place)self.placeMap.get(actNodeObject)
#print "Current variable ", activeNode #prints out the variable strcl_
#print "Current node from place object: ", currentPlace.getSTRCL_()
nghs = currentPlace.getMyNeighbors()
while (tokenizer.hasMoreTokens()):
ngh = tokenizer.nextToken()
currentPlace.myNeighbors.add(ngh)
#print "Neighbor node ", ngh
# Read the line
line = reader.readLine()
# Close the reader
reader.close()
]]>
</RePastEvolver:action>
<RePastEvolver:action name="incrementModel" sigReadOnly="false" retType="void" imports="" paramNames="">
<![CDATA[
def incrementModel():
# Loop through the nodes with citizens and get the number of visits
for occupied as ActiveNode in self.activeNodes:
# Initialize variables in action
numAgentsAtNode = occupied.getAgentList().size()
# Log presence of agents on street node
# Retrieving the place by converting to a float object
occupiedObject = Float(occupied.strnode)
currentPlace = (Place)self.placeMap.get(occupiedObject)
# Log fact that agents visited a node in the shapefile
if (currentPlace != None):
currentPlace.totalVisit = currentPlace.totalVisit + numAgentsAtNode
else:
print "Unable to log visit at strnode: " + occupied.strnode + " during tick: " + self.modelStep
#Clear the agents from the activeNodes class
self.activeNodes.clear()
# Increment the modelStep field
if self.modelStep < self.MODEL_DAY: #10,080
self.modelStep = self.modelStep + 1
else:
for node as Place in self.places:
node.totalVisit = 0
print "YEAR OVER"
self.stop()
]]>
</RePastEvolver:action>
<RePastEvolver:action name="initModel" sigReadOnly="false" retType="void" imports="" paramNames="">
<![CDATA[
def initModel():
# Set static field values for model run
self.modelStep = 0
self.MODEL_DAY = 1440
]]>
</RePastEvolver:action>
<RePastEvolver:action name="initCitizens" sigReadOnly="false" retType="void" imports="cern.jet.random.engine.MersenneTwister cern.jet.random.Normal" paramNames="">
<![CDATA[
def initCitizens():
#print "Inside initCitizens"
# Randomly assign all citizens to a starting location and name them
for i in range(1000):
p = i + 1
index = Random.uniform.nextIntFromTo(0, self.NUM_PLACES - 1)
#print "Index ", index
citizen = Citizen()
citizen.setModel(self)
node = (Place)self.places.get(index)
citizen.setLocation(node)
citizen.setStrnode(node.STRCL_)
name = "a" + p
citizen.setName(name)
self.citizens.add(citizen)
]]>
</RePastEvolver:action>
<RePastEvolver:action name="initCops" sigReadOnly="false" retType="void" imports="" paramNames="">
<![CDATA[
def initCops():
print "Inside init cops"
# Randomly assign the cops to a starting location.
# Use the Places to get the strnode
for i in range (self.COPS):
index = Random.uniform.nextIntFromTo(0, self.NUM_PLACES - 1)
cop = Cop()
cop.setModel(self)
node = (Place)self.places.get(index)
# Log that cop started at this node
node.copStart = 1
cop.setLocation(node)
cop.setStrnode(node.STRCL_)
self.cops.add(cop)
]]>
</RePastEvolver:action>
<RePastEvolver:action name="writeFinalAgents" sigReadOnly="false" retType="void" imports="" paramNames="">
<![CDATA[
def writeFinalAgents():
print "Writing Final Agents"
baseFilePath = "./projects/rob_model/output/"
self.writeAgents(self.places, baseFilePath + "strnodes2")
]]>
</RePastEvolver:action>
<RePastEvolver:parameter name="placeMap" type="java.util.HashMap" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="modelStep" type="int" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="MODEL_DAY" type="int" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="NUM_PLACES" type="int" defaultValue="11387" probe="true" accessible="true" />
<RePastEvolver:parameter name="COPS" type="int" defaultValue="200" probe="true" accessible="true" />
<RePastEvolver:schedule order="0 1 4" />
<RePastEvolver:schedule order="2" /><RePastEvolver:schedule order="3" />
<RePastEvolver:schedule_item action="writeAgents" tick="100.0" type="2" last="false" target="Exercise3" id="2"/>
<RePastEvolver:schedule_item action="updateDisplay" tick="100.0" type="2" last="true" target="Exercise3" id="3"/>
<RePastEvolver:schedule_item action="incrementModel" tick="1.0" type="1" last="false" target="Exercise3" id="4"/>
<RePastEvolver:EvolverBean type="Compileable" class="class uchicago.src.simbuilder.beans.gis.VectorAgentProducer" name="Place" groupName="places">
<VectorDataSource shapefile="F:\HumanTrafficking\HumanTrafficking_ABM\IllicitGrid_NodeList_20140711_1527.shp" displayField="ARC_" gisPackage="ArcGIS">
<VectorDataSourceDisplayValue field="default value" color="-65536" isDefault="true" thickness="1" />
</VectorDataSource>
<RePastEvolver:action name="step" sigReadOnly="true" retType="void" imports="" paramNames="">
<![CDATA[
def step():
]]>
</RePastEvolver:action>
<RePastEvolver:parameter name="strcl_" type="int" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="myNeighbors" type="java.util.ArrayList" defaultValue="" probe="false" accessible="true" />
</RePastEvolver:EvolverBean>
<RePastEvolver:EvolverBean type="Compileable" class="class uchicago.src.simbuilder.beans.gis.GenericAgentProducer" name="Citizen" superClass="(None)" groupName="citizens">
<RePastEvolver:action name="step" sigReadOnly="true" retType="void" imports="java.lang.Object java.lang.Double java.lang.Number java.lang.Integer" paramNames="">
<![CDATA[
def step():
#print "inside citizen step"
# Every citzen moves with each model tick
places = self.model.getPlaces()
# Identify number of neighbor nodes
numNeighs = self.location.myNeighbors.size()
maxValue = numNeighs-1
# Generate a value
index = Random.uniform.nextIntFromTo(0,numNeighs -1)
# Get the new node and assign it to strnode field
newNode = self.location.getMyNeighbors().get(index)
self.strnode = int(String.valueOf(newNode))
# Assigns the Citizen to a new Place
nodeFL = Float(self.strnode)
newLocation = (Place)self.model.placeMap.get(nodeFL)
self.location = newLocation
# ADD an agent to the ActiveNode class. If there is an ActiveNode agent
# that exists with a particular strnode value then add the name of the
# citizen agent to the agentList (an arrayList). If there is no ActiveNode
# with the same value as the currentNode then add a new ActiveNode agent and
# populate the strnode number with the currentNode and add the name of the
# citizen agent to the agentList (an arrayList).
# Test to see if this is the first ActiveNode
nodeisEqual = false
if self.model.activeNodes.size() <> 0:
for occupied as ActiveNode in self.model.activeNodes:
if self.strnode == occupied.strnode:
occupied.agentList.add(self.name)
nodeisEqual = true
if self.model.activeNodes.size() == 0 or nodeisEqual == false:
newAgent = ActiveNode()
newAgent.setModel(self.model)
newAgent.strnode = self.strnode
newAgent.agentList = ArrayList()
newAgent.agentList.add(self.name)
self.model.activeNodes.add(newAgent)
]]>
</RePastEvolver:action>
<RePastEvolver:parameter name="strnode" type="int" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="location" type="Place" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="name" type="java.lang.String" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:schedule_item action="step" tick="1.0" type="1" last="false" target="for all Citizen" id="0"/>
</RePastEvolver:EvolverBean>
<RePastEvolver:EvolverBean type="Compileable" class="class uchicago.src.simbuilder.beans.gis.GenericAgentProducer" name="Cop" superClass="(None)" groupName="cops">
<RePastEvolver:action name="step" sigReadOnly="true" retType="void" imports="java.lang.Object java.lang.String uchicago.src.sim.util.SimUtilities java.util.Arrays java.util.List" paramNames="">
<![CDATA[
def step():
# Every cop moves with each model tick
places = self.model.getPlaces()
# Identify number of neighbor nodes
numNeighs = self.location.myNeighbors.size()
maxValue = numNeighs-1
# Generate a value
index = Random.uniform.nextIntFromTo(0,numNeighs -1)
# Get the new node and assign it to strnode field
newNode = self.location.getMyNeighbors().get(index)
self.strnode = int(String.valueOf(newNode))
# Assigns the Cop to a new Place
nodeFL = Float(self.strnode)
newLocation = (Place)self.model.placeMap.get(nodeFL)
self.location = newLocation
]]>
</RePastEvolver:action>
<RePastEvolver:parameter name="strnode" type="int" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="location" type="Place" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:schedule_item action="step" tick="1.0" type="1" last="false" target="for all Cop" id="1"/>
</RePastEvolver:EvolverBean>
<RePastEvolver:EvolverBean type="Compileable" class="class uchicago.src.simbuilder.beans.gis.GenericAgentProducer" name="ActiveNode" superClass="(None)" groupName="activeNodes">
<RePastEvolver:action name="step" sigReadOnly="true" retType="void" imports="" paramNames="">
<![CDATA[
def step():
]]>
</RePastEvolver:action>
<RePastEvolver:parameter name="strnode" type="int" defaultValue="" probe="false" accessible="true" />
<RePastEvolver:parameter name="agentList" type="java.util.ArrayList" defaultValue="" probe="false" accessible="true" />
</RePastEvolver:EvolverBean>
</RePastEvolver:EvolverModel>
</RePastEvolver:EvolverProject>
</RePastEvolver:EvolverModelSpec>