An error occurred while loading the file. Please try again.
-
Bonte Bruno authored86c73080
<?xml version="1.0"?>
<st-source>
<!--
Name: ECEC
PackageName: ECEC
Parcel: #('ECEC')
ParcelName: ECEC
Date: 2:02:49 pm September 29, 2015
-->
<time-stamp>From VisualWorks® NonCommercial, 7.6 of lundi 3 mars 2008 on mardi 29 septembre 2015 at 14:02:49</time-stamp>
<do-it>(Dialog confirm: 'You are filing-in a Parcel source file!\\While this is possible it will not have\the same effect as loading the parcel.\None of the Parcel''s prerequisites will\be loaded and none of its load actions\will be performed.\\Are you sure you want to file-in?' withCRs) ifFalse: [self error: 'Parcel file-in abandoned. Choose terminate or close.']</do-it>
<name-space>
<name>ECEC</name>
<environment>CormasNS.Models</environment>
<private>false</private>
<imports>
private Smalltalk.*
private CormasNS.Kernel.*
</imports>
<category>ECECCategory</category>
<attributes>
<package>ECEC</package>
</attributes>
</name-space>
<class>
<name>VegetationUnit</name>
<environment>CormasNS.Models.ECEC</environment>
<super>CormasNS.Kernel.SpatialEntityElement</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>biomass </inst-vars>
<class-inst-vars>K r </class-inst-vars>
<imports></imports>
<category>ECECCategory</category>
<attributes>
<package>ECEC</package>
</attributes>
</class>
<class>
<name>Forager</name>
<environment>CormasNS.Models.ECEC</environment>
<super>CormasNS.Kernel.AgentLocation</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>energy </inst-vars>
<class-inst-vars>fertilityThreshold catabolicRate harvestRate </class-inst-vars>
<imports></imports>
<category>ECECCategory</category>
<attributes>
<package>ECEC</package>
</attributes>
</class>
<class>
<name>Unrestrained</name>
<environment>CormasNS.Models.ECEC</environment>
<super>CormasNS.Models.ECEC.Forager</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ECECCategory</category>
<attributes>
<package>ECEC</package>
</attributes>
</class>
<class>
<name>Restrained</name>
<environment>CormasNS.Models.ECEC</environment>
<super>CormasNS.Models.ECEC.Forager</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ECECCategory</category>
<attributes>
<package>ECEC</package>
</attributes>
</class>
<class>
<name>ECEC</name>
<environment>CormasNS.Models.ECEC</environment>
<super>CormasNS.Kernel.CormasModel</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>theVegetationUnits theRestraineds theUnrestraineds restrainedInitialNumber unrestrainedInitialNumber </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>ECECCategory</category>
<attributes>
<package>ECEC</package>
</attributes>
</class>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit</class-id> <category>accessing</category>
<body package="ECEC" selector="biomass">biomass
"Getter accessor with default value = 0.
!! This method was automatically generated by Cormas !!"
^biomass ifNil:[biomass := 0]</body>
<body package="ECEC" selector="biomass:">biomass: anObject
"Setter accessor of attribute biomass "
biomass = anObject ifTrue:[^nil]. "for optimization"
biomass := anObject.
self changed</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit</class-id> <category>growth</category>
<body package="ECEC" selector="logisticGrowth">logisticGrowth
self biomass: (Cormas logisticGrowth: self biomass r: self class r K: self class K)</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit</class-id> <category>control</category>
<body package="ECEC" selector="step">step
self logisticGrowth</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit</class-id> <category>init</category>
<body package="ECEC" selector="initRandomBiomass">initRandomBiomass
"Set the initial value of biomass, between ]0 ; 1] ."
self biomass: Cormas random</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit</class-id> <category>* pov</category>
<body package="ECEC" selector="povBiomass">povBiomass
"return a Green Color gradient, according to #biomass"
^self
povAttribute: #biomass
min: 0
max: self class K
color: ColorValue green</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit</class-id> <category>info</category>
<body package="ECEC" selector="info_biomass">info_biomass
"return a String "
^((self biomass * 100) rounded / 100) asFloat printString</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit class</class-id> <category>testing</category>
<body package="ECEC" selector="isAbstract">isAbstract
^false</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit class</class-id> <category>- default value</category>
<body package="ECEC" selector="biomass_default">biomass_default
"Return the default value of attribute #biomass : 0.
!! This method was automatically generated by Cormas !!"
^0</body>
<body package="ECEC" selector="K_default">K_default
"Return the default value of attribute #K : 10.
!! This method was automatically generated by Cormas !!"
^10</body>
<body package="ECEC" selector="k_default">k_default
"Return the default value of k attribute"
^10</body>
<body package="ECEC" selector="r_default">r_default
"Return the default value of r attribute"
^0.2</body>
<body package="ECEC" selector="state_default">state_default
"Return the default value of state attribute"
^nil</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit class</class-id> <category>accessing</category>
<body package="ECEC" selector="K">K
"Getter accessor with default value = 10.
!! This method was automatically generated by Cormas !!"
^K ifNil:[K := 10]</body>
<body package="ECEC" selector="K:">K: anObject
"Setter accessor of attribute K "
K := anObject</body>
<body package="ECEC" selector="r">r
"Getter accessor with default value = 0.2.
!! This method was automatically generated by Cormas !!"
^r ifNil:[r := 0.2]</body>
<body package="ECEC" selector="r:">r: anObject
"Setter accessor of attribute r "
r := anObject</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.VegetationUnit class</class-id> <category>+ parameter unit</category>
<body package="ECEC" selector="biomass_type">biomass_type
"Return the type of attribute #biomass.
!! This method was automatically generated by Cormas !!"
^SmallInteger</body>
<body package="ECEC" selector="biomass_unit">biomass_unit
"Return the unit of attribute #biomass.
!! This method was automatically generated by Cormas !!"
^ 'kg'</body>
<body package="ECEC" selector="K_type">K_type
"Return the type of attribute #K.
!! This method was automatically generated by Cormas !!"
^SmallInteger</body>
<body package="ECEC" selector="K_unit">K_unit
"Return the unit of attribute #K.
!! This method was automatically generated by Cormas !!"
^ 'kg'</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager</class-id> <category>accessing</category>
<body package="ECEC" selector="energy:">energy: anObject
"Setter accessor of attribute energy "
energy = anObject ifTrue:[^nil]. "for optimization"
energy := anObject.
self changed</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager</class-id> <category>biology</category>
<body package="ECEC" selector="consumeEnergy">consumeEnergy
"the forager burns a quantity of energy equivalent to the catabolicRate (-2 per time step)"
self energy: self energy - self class catabolicRate</body>
<body package="ECEC" selector="die">die
"no commente...
set dead attribute to true"
self dead: true</body>
<body package="ECEC" selector="eat">eat
"The forager eats a quatity of biomass of its current location. The quantity depends on the harvestRate: a proportion of biomass (50% or 99% according to forager type)"
| qty |
qty := self patch biomass * self class harvestRate.
self energy: self energy + qty.
self patch biomass: self patch biomass - qty</body>
<body package="ECEC" selector="move">move
"The Forager examines its current location and around. From those not occupied, he chooses the one containing the plant with the highest energy. If the chosen plant would yield enough food to meet their catabolic rate (2 units), he moves there. If not, he moves instead to a randomly chosen adjacent free place (not occupied by another forager)"
| goodCells |
goodCells := self patch neighbourhoodAndSelf select:
[:cell | cell biomass > self class catabolicRate and: [cell noOccupant]].
goodCells isEmpty
ifTrue: [self randomWalkConstrainedBy: [:c | c noOccupant]]
ifFalse: [self moveTo: (goodCells asSortedCollection: [:c1 :c2 | c1 biomass > c2 biomass]) first]</body>
<body package="ECEC" selector="reproduce">reproduce
"The forager reproduces asexually, creating an offspring with the same heritable traits as itself (e.g., feeding strategy). At the same time the parent's energy is reduced by the offspring's initial energy (50). Newborn offspring occupies the nearest free place to its parent. "
| newForager freePlace |
freePlace := self nearestEmptyLocationWithinRadius: 1.
freePlace ifNil: [^nil].
newForager := self newEntity: self class.
self energy: self energy - newForager energy.
newForager moveTo: freePlace</body>
<body package="ECEC" selector="scareAllOthers">scareAllOthers
"Scare every kind of Forager around me: they move all randomly away from me"
self scareAllAgents</body>
<body package="ECEC" selector="scareOpponents">scareOpponents
"Scare the opponent Foragers around me"
(self neighbouringLocatedEntities: self class opponent)
do:
[: opponent |
opponent randomWalkConstrainedBy:
[:c | (self patch neighbourhood includes: c) not]]</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager</class-id> <category>probes</category>
<body package="ECEC" selector="energy">energy
"Getter accessor with initial value = 50 energyPoint.
!! This method was automatically generated by Cormas !! "
^energy ifNil:[energy := 50]</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager</class-id> <category>* info</category>
<body package="ECEC" selector="info_energy">info_energy
"return a String "
^self energy rounded printString</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager</class-id> <category>testing</category>
<body package="ECEC" selector="coinFlipping">coinFlipping
"return 50% chance to get True"
^Cormas random < 0.5</body>
<body package="ECEC" selector="isBiomassAroundTooLow">isBiomassAroundTooLow
"Tests if biomass around is 0 or less than the catabolicRate"
^(self patch neighbourhoodAndSelf select:
[:cell | cell biomass > self class catabolicRate]) isEmpty</body>
<body package="ECEC" selector="isEnergyHigh">isEnergyHigh
"Tests if energy is upper than the fertilityThreshold (100), in order to reproduce"
^self energy >= self class fertilityThreshold</body>
<body package="ECEC" selector="isEnergyTooLow">isEnergyTooLow
"Tests if energy is 0 or less, so that the forager will die"
^self energy <= 0</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager</class-id> <category>@ control_diagram</category>
<body package="ECEC" selector="step">step
" Forager openActivityDiagram: #step "
"This method was automatically generated by the ActivityDiagramEditor."
self performActivityDiagram: #step</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>testing</category>
<body package="ECEC" selector="isAbstract">isAbstract
^true</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>accessing</category>
<body package="ECEC" selector="catabolicRate">catabolicRate
"Getter accessor with initial value = 2 energyPoint.
!! This method was automatically generated by Cormas !! "
^catabolicRate ifNil:[catabolicRate := 2]</body>
<body package="ECEC" selector="catabolicRate:">catabolicRate: anObject
"Setter accessor of attribute catabolicRate "
catabolicRate := anObject</body>
<body package="ECEC" selector="fertilityThreshold">fertilityThreshold
"Getter accessor with initial value = 100 energyPoint.
!! This method was automatically generated by Cormas !! "
^fertilityThreshold ifNil:[fertilityThreshold := 100]</body>
<body package="ECEC" selector="fertilityThreshold:">fertilityThreshold: anObject
"Setter accessor of attribute fertilityThreshold "
fertilityThreshold := anObject</body>
<body package="ECEC" selector="harvestRate">harvestRate
"Getter accessor without default value "
^harvestRate</body>
<body package="ECEC" selector="harvestRate:">harvestRate: anObject
"Setter accessor of attribute harvestRate "
harvestRate := anObject</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>- default value</category>
<body package="ECEC" selector="catabolicRate_default">catabolicRate_default
"Return the default value of attribute #catabolicRate : 2.
!! This method was automatically generated by Cormas !!"
^2</body>
<body package="ECEC" selector="energy_default">energy_default
"Return the default value of attribute #energy : 50.
!! This method was automatically generated by Cormas !!"
^50</body>
<body package="ECEC" selector="fertilityThreshold_default">fertilityThreshold_default
"Return the default value of attribute #fertilityThreshold : 100.
!! This method was automatically generated by Cormas !!"
^100</body>
<body package="ECEC" selector="harvestRate_default">harvestRate_default
"Return the default value of harvestRate attribute"
^nil</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>pov symbols</category>
<body package="ECEC" selector="VectorialPOV_Forager">VectorialPOV_Forager
"Returns an array containing the settings of a Situated entity vectorial pov symbol in the following order:
(color red) (color green) (color blue) (lineColor red) (lineColor green) (lineColor blue) lineWidth sizeratio position (array of outline vertices)"
^#(0.833354 0.833354 0.833354 0.0 0.0 0.0 1 0.6 #center #(0@-17 15@-9 15@9 0@17 -15@9 -15@-9 0@-17))</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>+ activityDiagram</category>
<body package="ECEC" selector="activity_step">activity_step
" Forager activity_step open"
"This method was automatically generated by the ActivityDiagramEditor."
| stopStarts activities transitions realActivityFigure virtualActivities editor |
"Set the list of Figures."
stopStarts := ((Core.OrderedCollection new) add: (CormasNS.Kernel.EndFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 5; instVarAt: 2 put: Graphics.ColorValue black; instVarAt: 3 put: (Graphics.ColorValue scaledRed: 7847 scaledGreen: 0 scaledBlue: 0); yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 182 y: 461) corner: (Core.Point x: 212 y: 491)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: nil; instVarAt: 13 put: 2; yourself); add: (CormasNS.Kernel.StartFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 112; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 5; instVarAt: 2 put: Graphics.ColorValue black; instVarAt: 3 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 4030 scaledBlue: 0); yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 179 y: 11) corner: (Core.Point x: 209 y: 41)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: nil; instVarAt: 13 put: 1; yourself); yourself).
stopStarts do:[: fig | fig model id: fig id].
activities := (Core.OrderedCollection new).
virtualActivities :=((Core.OrderedCollection new) add: (CormasNS.Kernel.ActivityFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue orange; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 146 y: 72) corner: (Core.Point x: 245 y: 100)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #consumeEnergy; instVarAt: 13 put: (Core.Point x: 20 y: 20); instVarAt: 14 put: 3; yourself); add: (CormasNS.Kernel.ActivityFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue orange; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 151 y: 127) corner: (Core.Point x: 240 y: 157)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #move; instVarAt: 13 put: (Core.Point x: 20 y: 20); instVarAt: 14 put: 4; yourself); add: (CormasNS.Kernel.ActivityFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue orange; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 158 y: 187) corner: (Core.Point x: 235 y: 216)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #eat; instVarAt: 13 put: (Core.Point x: 20 y: 20); instVarAt: 14 put: 5; yourself); add: (CormasNS.Kernel.ActivityFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue orange; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 333 y: 267) corner: (Core.Point x: 413 y: 299)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #reproduce; instVarAt: 13 put: (Core.Point x: 20 y: 20); instVarAt: 14 put: 6; yourself); add: (CormasNS.Kernel.ActivityFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue orange; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 328 y: 378) corner: (Core.Point x: 413 y: 407)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #die; instVarAt: 13 put: (Core.Point x: 20 y: 20); instVarAt: 14 put: 7; yourself); add: (CormasNS.Kernel.DiamondFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue yellow; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 154 y: 239) corner: (Core.Point x: 239 y: 324)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #isEnergyHigh; instVarAt: 13 put: ((Core.OrderedCollection new) add: (Core.Point x: 196 y: 239); add: (Core.Point x: 238 y: 281); add: (Core.Point x: 196 y: 323); add: (Core.Point x: 154 y: 281); add: (Core.Point x: 196 y: 239); yourself); instVarAt: 14 put: nil; instVarAt: 15 put: 8; yourself); add: (CormasNS.Kernel.DiamondFigure basicNew instVarAt: 1 put: nil; instVarAt: 2 put: nil; instVarAt: 3 put: nil; instVarAt: 4 put: nil; instVarAt: 5 put: 80; instVarAt: 6 put: (Refactory.HotDraw.FigureAttributes basicNew instVarAt: 1 put: 1; instVarAt: 2 put: Graphics.ColorValue darkRed; instVarAt: 3 put: Graphics.ColorValue yellow; yourself); instVarAt: 7 put: nil; instVarAt: 8 put: (Graphics.Rectangle origin: (Core.Point x: 146 y: 347) corner: (Core.Point x: 248 y: 432)); instVarAt: 9 put: nil; instVarAt: 10 put: nil; instVarAt: 11 put: nil; instVarAt: 12 put: #isEnergyTooLow; instVarAt: 13 put: ((Core.OrderedCollection new) add: (Core.Point x: 197 y: 349); add: (Core.Point x: 247 y: 388); add: (Core.Point x: 198 y: 431); add: (Core.Point x: 146 y: 390); add: (Core.Point x: 197 y: 347); yourself); instVarAt: 14 put: false; instVarAt: 15 put: 9; yourself); yourself).
"Creates the Figures."
virtualActivities do: [:actFig |
realActivityFigure := actFig class createAt: ((actFig bounds) center) forClass: self.
realActivityFigure lineColor: actFig lineColor; fillColor: actFig fillColor; lineWidth: actFig lineWidth.
realActivityFigure id: actFig id.
realActivityFigure model selectedActivity value: actFig info.
realActivityFigure model id: actFig id.
activities add: realActivityFigure].
activities addAllFirst: stopStarts.
"Creates the Transitions."
transitions := OrderedCollection new. transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( ActivityModel new id: 4); to: (ActivityModel new id: 5); points: ((Core.OrderedCollection new) add: (Core.Point x: 196.33 y: 157.116); add: (Core.Point x: 196.222 y: 186.649); yourself); yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( ActivityModel new id: 3); to: (ActivityModel new id: 4); points: ((Core.OrderedCollection new) add: (Core.Point x: 196.324 y: 100.764); add: (Core.Point x: 196.491 y: 126.293); yourself); yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( ActivityModel new id: 5); to: (DecisionPointModel new id: 8); points: ((Core.OrderedCollection new) add: (Core.Point x: 196.805 y: 216.43); add: (Core.Point x: 197.07 y: 235.893); yourself); yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( DecisionPointModel new id: 8); to: (ActivityModel new id: 6); points: ((Core.OrderedCollection new) add: (Core.Point x: 240.596 y: 281.876); add: (Core.Point x: 332.819 y: 282.952); yourself)
; type: '[true]'; yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( DecisionPointModel new id: 8); to: (DecisionPointModel new id: 9); points: ((Core.OrderedCollection new) add: (Core.Point x: 196.409 y: 325.525); add: (Core.Point x: 196.454 y: 344.4); yourself)
; type: '[false]'; yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( DecisionPointModel new id: 9); to: (ActivityModel new id: 7); points: ((Core.OrderedCollection new) add: (Core.Point x: 249.691 y: 388.729); add: (Core.Point x: 327.509 y: 391.135); yourself)
; type: '[true]'; yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( DecisionPointModel new id: 9); to: (EndPointModel new id: 2); points: ((Core.OrderedCollection new) add: (Core.Point x: 197.348 y: 434.002); add: (Core.Point x: 197.376 y: 460.166); yourself)
; type: '[false]'; yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( ActivityModel new id: 7); to: (EndPointModel new id: 2); points: ((Core.OrderedCollection new) add: (Core.Point x: 340.106 y: 406.704); add: (Core.Point x: 210.893 y: 467.675); yourself); yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( ActivityModel new id: 6); to: (DecisionPointModel new id: 9); points: ((Core.OrderedCollection new) add: (Core.Point x: 350.592 y: 299.187); add: (Core.Point x: 231.636 y: 370.316); yourself); yourself).
transitions add: (Refactory.HotDraw.ToolStateTransitionModel new from: ( StartPointModel new id: 1); to: (ActivityModel new id: 3); points: ((Core.OrderedCollection new) add: (Core.Point x: 194.398 y: 41.9375); add: (Core.Point x: 195.139 y: 71.542); yourself); yourself).
"Creates and open the new Editor."
editor := ActivityDiagramEditor newWithActivities: activities connections: transitions forClass: self method: #step.
editor location: (Rectangle origin: 274@246 width: 549 height: 578).
^editor</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>+ parameter unit</category>
<body package="ECEC" selector="catabolicRate_type">catabolicRate_type
"Return the type of attribute #catabolicRate.
!! This method was automatically generated by Cormas !!"
^SmallInteger</body>
<body package="ECEC" selector="catabolicRate_unit">catabolicRate_unit
"Return the unit of attribute #catabolicRate.
!! This method was automatically generated by Cormas !!"
^ 'energyPoint'</body>
<body package="ECEC" selector="energy_type">energy_type
"Return the type of attribute #energy.
!! This method was automatically generated by Cormas !!"
^SmallInteger</body>
<body package="ECEC" selector="energy_unit">energy_unit
"Return the unit of attribute #energy.
!! This method was automatically generated by Cormas !!"
^ 'energyPoint'</body>
<body package="ECEC" selector="fertilityThreshold_type">fertilityThreshold_type
"Return the type of attribute #fertilityThreshold.
!! This method was automatically generated by Cormas !!"
^SmallInteger</body>
<body package="ECEC" selector="fertilityThreshold_unit">fertilityThreshold_unit
"Return the unit of attribute #fertilityThreshold.
!! This method was automatically generated by Cormas !!"
^ 'energyPoint'</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Forager class</class-id> <category>+ utilities - methods - manipulation</category>
<body package="ECEC" selector="methodsForControl">methodsForControl
^super methodsForControl - #( leave)</body>
<body package="ECEC" selector="methodsForTesting">methodsForTesting
"Purpose: returns a list of all the methods in protocols starting by '* testing'
This is used by the interactive 'Manipulate Instances' tool
Return value: a collection of symbols
This method can be overwritten.
Example :
methodsForTesting
^#(#isRich #isLandOwner) "
^super methodsForTesting - #(isSituated)</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Unrestrained</class-id> <category>accessing</category>
<body package="ECEC" selector="energy">energy
"Getter accessor with default value = 50.
!! This method was automatically generated by Cormas !!"
^energy ifNil:[energy := 50]</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Unrestrained class</class-id> <category>testing</category>
<body package="ECEC" selector="isAbstract">isAbstract
^false</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Unrestrained class</class-id> <category>accessing</category>
<body package="ECEC" selector="catabolicRate">catabolicRate
"Getter accessor with default value = 2.
!! This method was automatically generated by Cormas !!"
^catabolicRate ifNil:[catabolicRate := 2]</body>
<body package="ECEC" selector="fertilityThreshold">fertilityThreshold
"Getter accessor with default value = 100.
!! This method was automatically generated by Cormas !!"
^fertilityThreshold ifNil:[fertilityThreshold := 100]</body>
<body package="ECEC" selector="harvestRate">harvestRate
"Getter accessor with default value = 0.99.
!! This method was automatically generated by Cormas !!"
^harvestRate ifNil:[harvestRate := 0.99]</body>
<body package="ECEC" selector="opponent">opponent
^Restrained</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Unrestrained class</class-id> <category>- default value</category>
<body package="ECEC" selector="color">color
^ColorValue red</body>
<body package="ECEC" selector="harvestRate_default">harvestRate_default
"Return the default value of harvestRate attribute"
^0.99</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Unrestrained class</class-id> <category>pov symbols</category>
<body package="ECEC" selector="VectorialPOV_goodCondition">VectorialPOV_goodCondition
"Returns an array containing the settings of a Situated entity vectorial pov symbol in the following order:
(color red) (color green) (color blue) (lineColor red) (lineColor green) (lineColor blue) lineWidth sizeratio position (array of outline vertices) isDistortable."
^#(1.0 0.0 0.0 0.0 0.0 0.0 1 1 #center #(-5.41875@-8.925 11.1563@-8.925 25.1813@-12.1125 18.8063@3.1875 16.2562@23.5875 14.3438@22.95 11.1563@7.65 9.24375@11.475 5.41875@14.025 -0.31875@12.75 -1.59375@9.5625 -4.78125@22.3125 -7.33125@22.3125 -9.24375@8.2875 -11.7937@3.1875 -24.5438@-1.275 -25.8188@-7.65 -13.0687@-12.1125 -9.88125@-24.225 -9.88125@-12.75 -5.41875@-8.925) true)</body>
<body package="ECEC" selector="VectorialPOV_povEnergy">VectorialPOV_povEnergy
"Returns an array containing the settings of a Situated entity vectorial pov symbol in the following order:
(color red) (color green) (color blue) (lineColor red) (lineColor green) (lineColor blue) lineWidth sizeratio position (array of outline vertices) isDistortable."
^#(1.0 0.0 0.0 0.0 0.0 0.0 1 1 #center #(-3.86@-6.84666 7.44919@-6.75 17.3815@-9.53519 13.0712@1.75 11.6948@17.35 3.66651@3.2463 -1.45236@7.24997 -5.3653@16.9093 -6.03433@7.21294 -8.37592@1.92408 -17.3815@-0.750001 -18.3185@-6.25 -9.37944@-9.53519 -7.70686@-18.35 -7.70686@-9.97591 -3.86@-6.84666) true)</body>
<body package="ECEC" selector="VectorialPOV_Unrestrained">VectorialPOV_Unrestrained
"Returns an array containing the settings of a Situated entity vectorial pov symbol in the following order:
(color red) (color green) (color blue) (lineColor red) (lineColor green) (lineColor blue) lineWidth sizeratio position (array of outline vertices)"
^#(1.0 0.0 0.0 0.0 0.0 0.0 1 0.7 #center #(-5.51429@-9.78095 10.6417@-9.64286 24.8307@-13.6217 18.6732@2.5 16.7069@24.7857 5.23787@4.63757 -2.0748@10.3571 -7.66472@24.1561 -8.62047@10.3042 -11.9656@2.74868 -24.8307@-1.07143 -26.1693@-8.92857 -13.3992@-13.6217 -11.0098@-26.2143 -11.0098@-14.2513 -5.51429@-9.78095))</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Restrained</class-id> <category>accessing</category>
<body package="ECEC" selector="energy">energy
"Getter accessor with default value = 50.
!! This method was automatically generated by Cormas !!"
^energy ifNil:[energy := 50]</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Restrained class</class-id> <category>testing</category>
<body package="ECEC" selector="isAbstract">isAbstract
^false</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Restrained class</class-id> <category>accessing</category>
<body package="ECEC" selector="catabolicRate">catabolicRate
"Getter accessor with default value = 2.
!! This method was automatically generated by Cormas !!"
^catabolicRate ifNil:[catabolicRate := 2]</body>
<body package="ECEC" selector="fertilityThreshold">fertilityThreshold
"Getter accessor with default value = 100.
!! This method was automatically generated by Cormas !!"
^fertilityThreshold ifNil:[fertilityThreshold := 100]</body>
<body package="ECEC" selector="harvestRate">harvestRate
"Getter accessor with default value = 0.5.
!! This method was automatically generated by Cormas !!"
^harvestRate ifNil:[harvestRate := 0.5]</body>
<body package="ECEC" selector="opponent">opponent
^Unrestrained</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Restrained class</class-id> <category>- default value</category>
<body package="ECEC" selector="color">color
^ColorValue blue</body>
<body package="ECEC" selector="energy_default">energy_default
"Return the default value of attribute #energy : 50.
!! This method was automatically generated by Cormas !!"
^50</body>
<body package="ECEC" selector="energy_type">energy_type
"Return the type of attribute #energy.
!! This method was automatically generated by Cormas !!"
^SmallInteger</body>
<body package="ECEC" selector="harvestRate_default">harvestRate_default
"Return the default value of harvestRate attribute"
^0.5</body>
<body package="ECEC" selector="randomAttributes">randomAttributes
"Returns a list of randomAttributes: a List of arrays: [#(#attributeName scopeLevel #randFloat min max) #(...) #(...) ... ].
This method is automatically redefined when creating new random attributes"
| list |
list := List new.
^list</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.Restrained class</class-id> <category>pov symbols</category>
<body package="ECEC" selector="VectorialPOV_povEnergy">VectorialPOV_povEnergy
"Returns an array containing the settings of a Situated entity vectorial pov symbol in the following order:
(color red) (color green) (color blue) (lineColor red) (lineColor green) (lineColor blue) lineWidth sizeratio position (array of outline vertices) isDistortable."
^#(0.0 0.0 1.0 0.0 0.0 0.0 1 1 #center #(-3.86@-6.84666 7.44919@-6.75 17.3815@-9.53519 13.0712@1.75 11.6948@17.35 3.66651@3.2463 -1.45236@7.24997 -5.3653@16.9093 -6.03433@7.21294 -8.37592@1.92408 -17.3815@-0.750001 -18.3185@-6.25 -9.37944@-9.53519 -7.70686@-18.35 -7.70686@-9.97591 -3.86@-6.84666) true)</body>
<body package="ECEC" selector="VectorialPOV_Restrained">VectorialPOV_Restrained
"Returns an array containing the settings of a Situated entity vectorial pov symbol in the following order:
(color red) (color green) (color blue) (lineColor red) (lineColor green) (lineColor blue) lineWidth sizeratio position (array of outline vertices) isDistortable."
^#(0.0 0.0 1.0 0.0 0.0 0.0 1 1 #center #(-3.86@-6.84666 7.44919@-6.75 17.3815@-9.53519 13.0712@1.75 11.6948@17.35 3.66651@3.2463 -1.45236@7.24997 -5.3653@16.9093 -6.03433@7.21294 -8.37592@1.92408 -17.3815@-0.750001 -18.3185@-6.25 -9.37944@-9.53519 -7.70686@-18.35 -7.70686@-9.97591 -3.86@-6.84666) true)</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC</class-id> <category>init</category>
<body package="ECEC" selector="fragmentedEnv">fragmentedEnv
"initialize an fragmented space (from fragmented.env file) with randomly located foragers"
self openOneSpaceInterface.
self spaceModel loadEnvironmentFromFile: 'fragmented.env'.
self initAgents.
self displayPov: #povBiomass of: VegetationUnit.
self displayPov: #defaultPOV of: Forager.</body>
<body package="ECEC" selector="fragmentedEnv4x4_6">fragmentedEnv4x4_6
"initialize an fragmented space (from fragmented.env file) with randomly located foragers"
self openOneSpaceInterface.
self spaceModel loadEnvironmentFromFile: '4x4_6.env'.
(self theVegetationUnits select:[:c | c biomass > 0]) do: [:c| c initRandomBiomass].
self initAgents.
self displayPov: #povBiomass of: VegetationUnit.
self displayPov: #defaultPOV of: Forager.</body>
<body package="ECEC" selector="homogeneousEnv">homogeneousEnv
"initialize an homogeneous space (from poor.env file) with randomly located foragers"
self openOneSpaceInterface.
self spaceModel loadEnvironmentFromFile: 'poor.env'.
self initAgents.
self displayPov: #povBiomass of: VegetationUnit.
self displayPov: #defaultPOV of: Forager.</body>
<body package="ECEC" selector="homogeneousEnv_NoAgent">homogeneousEnv_NoAgent
"initialize an homogeneous space (from poor.env file) with randomly located foragers"
self openOneSpaceInterface.
self spaceModel loadEnvironmentFromFile: 'poor.env'.
self displayPov: #povBiomass of: VegetationUnit.</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC</class-id> <category>control</category>
<body package="ECEC" selector="step:">step: t
"main step: activation of all the plants (Resource dynamics), then activation of the foragers (Agents dynamics)"
"Resource dynamics (because the dynamics of the plants are independants, the activation is not mixted)"
self stepEntities: VegetationUnit.
"Agents dynamics (because the agents may compete for plant access, the activation is randomly mixted)"
self stepEntitiesRandom: Forager. "it can alsp be: self askRandom: Forager toDo: #step"</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC</class-id> <category>accessing</category>
<body package="ECEC" selector="restrainedInitialNumber">restrainedInitialNumber
"Getter accessor with default value = 10.
!! This method was automatically generated by Cormas !!"
^restrainedInitialNumber ifNil:[restrainedInitialNumber := 10]</body>
<body package="ECEC" selector="restrainedInitialNumber:">restrainedInitialNumber: anObject
"Setter accessor of attribute restrainedInitialNumber "
restrainedInitialNumber := anObject</body>
<body package="ECEC" selector="theForagers">theForagers
"Returns a collection of all the instances of aClass (and sub classes) collected by cormasModel"
^self allTheEntities: Forager</body>
<body package="ECEC" selector="theRestrained">theRestrained
^ self theRestraineds isEmpty ifTrue:[nil] ifFalse: [self theRestraineds first]</body>
<body package="ECEC" selector="theRestraineds">theRestraineds
^theRestraineds ifNil:[theRestraineds := IndexedSet new]</body>
<body package="ECEC" selector="theRestraineds:">theRestraineds: x
theRestraineds := x</body>
<body package="ECEC" selector="theUnrestrained">theUnrestrained
^ self theUnrestraineds isEmpty ifTrue:[nil] ifFalse: [self theUnrestraineds first]</body>
<body package="ECEC" selector="theUnrestraineds">theUnrestraineds
^theUnrestraineds ifNil:[theUnrestraineds := IndexedSet new]</body>
<body package="ECEC" selector="theUnrestraineds:">theUnrestraineds: x
theUnrestraineds := x</body>
<body package="ECEC" selector="theVegetationUnit">theVegetationUnit
^ self theVegetationUnits isEmpty ifTrue:[nil] ifFalse: [self theVegetationUnits first]</body>
<body package="ECEC" selector="theVegetationUnits">theVegetationUnits
^theVegetationUnits ifNil:[theVegetationUnits := IndexedSet new]</body>
<body package="ECEC" selector="theVegetationUnits:">theVegetationUnits: x
theVegetationUnits := x</body>
<body package="ECEC" selector="unrestrainedInitialNumber">unrestrainedInitialNumber
"Getter accessor with default value = 10.
!! This method was automatically generated by Cormas !!"
^unrestrainedInitialNumber ifNil:[unrestrainedInitialNumber := 10]</body>
<body package="ECEC" selector="unrestrainedInitialNumber:">unrestrainedInitialNumber: anObject
"Setter accessor of attribute unrestrainedInitialNumber "
unrestrainedInitialNumber := anObject</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC</class-id> <category>probes</category>
<body package="ECEC" selector="restrainedsEnergy">restrainedsEnergy
"return the sum value of Restrained energy to be recorded"
^self sumOfAttribute: #energy of: Restrained</body>
<body package="ECEC" selector="restrainedSize">restrainedSize
"return the current population size of the Restrained foragers"
^self theRestraineds size</body>
<body package="ECEC" selector="unrestrainedsEnergy">unrestrainedsEnergy
"return the sum value of Unrestrained energy to be recorded"
^self sumOfAttribute: #energy of: Unrestrained</body>
<body package="ECEC" selector="unrestrainedSize">unrestrainedSize
"return the current population size of the Unrestrained foragers"
^self theUnrestraineds size</body>
<body package="ECEC" selector="vegetationBiomass">vegetationBiomass
"return the data (a number) to be plotted as the total Biomass of the vegetation"
^self theVegetationUnits inject: 0 into: [:i :j | i + j biomass]</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC</class-id> <category>instance-creation</category>
<body package="ECEC" selector="homogeneousEnv2">homogeneousEnv2
"initialize an homogeneous space (27x27, random biomass) with randomly located foragers"
self spaceModel initializeRegularX: 27 Y: 27 shape: #squared nbNeighbours: #eight boundaries: #toroidal.
self theVegetationUnits do:[: cell | cell initRandomBiomass]. "or: self initCells: #initRandomBiomass."
self initAgents</body>
<body package="ECEC" selector="initAgents">initAgents
"initialize 10 foragers of each type and move then randomly on a free cell"
self createN: self restrainedInitialNumber randomlyLocatedAloneEntities: Restrained.
self createN: self unrestrainedInitialNumber randomlyLocatedAloneEntities: Unrestrained</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC class</class-id> <category>description</category>
<body package="ECEC" selector="authors">authors
^ 'Léon Iladubobo' </body>
<body package="ECEC" selector="comments">comments
^ 'This model is the replication of the ECEC model by Pepper and Smuth: Evolution of Cooperation in an Ecological Context.' </body>
<body package="ECEC" selector="cormasCompatibleVersion">cormasCompatibleVersion
^ #(2015 9 28 10 33 6)</body>
<body package="ECEC" selector="creationDate">creationDate
^ 'May 7, 2012' </body>
<body package="ECEC" selector="currentDeveloperName">currentDeveloperName
^ 'Léon Iladubobo' </body>
<body package="ECEC" selector="emails">emails
^ 'iladubobo@yahoo.com' </body>
<body package="ECEC" selector="lastUpdate">lastUpdate
^ 'mardi 29 septembre 2015' </body>
<body package="ECEC" selector="version">version
^ 'ECEC.pcl' </body>
<body package="ECEC" selector="versionComments">versionComments
^ '
--------------------- ECEC_tutorial.pcl --------------------- Date: 2012.8.21 - 8:58:18
3 initializaton methods
*** Developer: Léon Iladubobo ***
--------------------- ECEC_tutorial.pcl --------------------- Date: 2012.8.21 - 8:58:18
First full version
*** Developer: Léon Iladubobo ***
--------------------- ECEC_tutorial.pcl --------------------- Date: 2012.8.21 - 17:22:10
First version with no bug !
*** Developer: Léon Iladubobo ***
--------------------- ECEC_tutorial.pcl --------------------- Date: 2012.8.23 - 12:53:54
Probe curves with predefined colors
*** Developer: Léon Iladubobo ***
--------------------- ECEC_tutorial.pcl --------------------- Date: 2012.8.23 - 12:53:54
with activity diagram
*** Developer: Léon Iladubobo ***
--------------------- ECEC_tutorial.pcl --------------------- Date: 2012.8.23 - 12:53:54
Modified Activity diagram for the Restrained foragers
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2014.9.8
info_biomass
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2014.9.8
init with reload from equilibrated situation
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2015.5.25
fragmented: 5x5-7
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2015.5.25
good-weakCondition povs
*** Developer: Léon Iladubobo ***
--------------------- ECEC_ISAGA.pcl --------------------- Date: 2015.6.7
spefic for ISAGA 2015
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2015.7.29
probes energy
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2015.8.21
VegetationUnit, subclass of SpatialEntityElement instead of Cell
*** Developer: Léon Iladubobo ***
--------------------- ECEC.pcl --------------------- Date: 2015.9.28
*** Developer: Léon Iladubobo ***' </body>
<body package="ECEC" selector="vwCompatibleVersion">vwCompatibleVersion
^ '7.6' </body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC class</class-id> <category>- default value</category>
<body package="ECEC" selector="restrainedInitialNumber_default">restrainedInitialNumber_default
"Return the default value of restrainedInitialNumber attribute"
^10</body>
<body package="ECEC" selector="unrestrainedInitialNumber_default">unrestrainedInitialNumber_default
"Return the default value of unrestrainedInitialNumber attribute"
^10</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC class</class-id> <category>- probes</category>
<body package="ECEC" selector="colorOfProbe_restrainedsEnergy">colorOfProbe_restrainedsEnergy
^ (ColorValue red: 0.250031 green: 0.624954 blue: 1.0)</body>
<body package="ECEC" selector="colorOfProbe_restrainedSize">colorOfProbe_restrainedSize
^ (ColorValue red: 0.104993 green: 0.104993 blue: 0.839458)</body>
<body package="ECEC" selector="colorOfProbe_unrestrainedsEnergy">colorOfProbe_unrestrainedsEnergy
^ (ColorValue red: 1.0 green: 0.250031 blue: 0.250031)</body>
<body package="ECEC" selector="colorOfProbe_unrestrainedSize">colorOfProbe_unrestrainedSize
^ (ColorValue red: 0.839458 green: 0.0 blue: 0.0)</body>
<body package="ECEC" selector="colorOfProbe_vegetationBiomass">colorOfProbe_vegetationBiomass
^ (ColorValue red: 0.0 green: 0.839458 blue: 0.0)</body>
</methods>
<methods>
<class-id>CormasNS.Models.ECEC.ECEC class</class-id> <category>+ simulation settings</category>
<body package="ECEC" selector="defaultInit">defaultInit
^#homogeneousEnv_NoAgent</body>
<body package="ECEC" selector="defaultProbes">defaultProbes
^self probes</body>
</methods>
<do-it>"Imported Classes:"</do-it>
<do-it>self error: 'Attempting to file-in parcel imports. Choose terminate or close'</do-it>
<class>
<name>AgentLocation</name>
<environment>CormasNS.Kernel</environment>
<super>CormasNS.Kernel.Agent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>patch </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>CormasKernel-Entities</category>
<attributes>
<package>Cormas</package>
</attributes>
</class>
<class>
<name>SpatialEntityElement</name>
<environment>CormasNS.Kernel</environment>
<super>CormasNS.Kernel.SpatialEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>orderedNeighbourhood default </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>CormasKernel-Entities</category>
<attributes>
<package>Cormas</package>
</attributes>
</class>
<class>
<name>CormasModel</name>
<environment>CormasNS.Kernel</environment>
<super>UI.ApplicationModel</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>cormas timeStepValue channel activeInit activeControl spaceModel data simManager database collector defaultAttributesSetter sensitivitySetter delayedChanges allClassVarBOSS </inst-vars>
<class-inst-vars>timeStep cellClass spatialClasses socialClasses passiveClasses povColorsDict visualStateIsOpen charts activeProbes activityDiagrams currentSimulation randUi autoUpdating </class-inst-vars>
<imports></imports>
<category>CormasKernel-Interface</category>
<attributes>
<package>Cormas</package>
</attributes>
</class>
</st-source>