josemartin22_Algoritmos-Bioinspirados-para-Netlogo/modelos/PSOTensionString.nlogo
; ---------------------------------------------
; Tension String Design Problem Implementation
; ---------------------------------------------

breed [ particles particle ]  ;; agents (turtles) that move around the space

globals [
  best-global
  evaluations
]

particles-own [

  ; Actual position
  x1      ; Wire diameter
  x2      ; Coil diameter
  x3      ; Active coils

  ; Velocities
  vx1 vx2 vx3

  g1 g2 g3 g4  ;Constraints
  f-order      ; Attribute to sort population
  fitness      ; Objective function value

  ; Best local particle (position)
  best-local
]


to setup

  clear-all

  ; Sets the seed of the pseudo-random number generator
  random-seed 123456789

  ask patches [set pcolor white]

  ; Set the image of Tension String Design Problem as background
  import-pcolors "images/SpringProblem.png"

  set evaluations 0
  create-particles swarm-population-size [

    ;Set random value in the respective domain of each particle
    set x1 min-x1 + random-float (max-x1 - min-x1 + 1)
    set x2 min-x2 + random-float (max-x2 - min-x2 + 1)
    set x3 min-x3 + random-float (max-x3 - min-x3 + 1)

    ; Best Solution (CDE)
    ;set x1 0.051609
    ;set x2 0.354714
    ;set x3 11.410831

    calculate-fitness

    ; At first, best local is the initial particle
    set best-local self

    hide-turtle
  ]

  set best-global min-one-of particles [f-order]
  update-display
  reset-ticks
end


to go

  if evaluations >= num-evaluations
    [ stop ]

  update-particles

  set best-global min-one-of particles [f-order]
  ask best-global [calculate-fitness]

  update-display
  tick
end


to calculate-fitness

  ; Here our main objective is to minimize the weight of a
  ; tension/compression spring subject to constraints

  ; Constraints
  set g1 (1 - ((x2 ^ 3) * x3) / (71785 * (x1 ^ 4)) )
  set g2 ((((4 * x2 * x2) - (x1 * x2)) / (12566 * ((x2 * (x1 ^ 3)) - (x1 ^ 4)))) + (1 / (5108 * x1 * x1)) - 1)
  set g3 (1 - ((140.45 * x1) / (x2 * x2 * x3)))
  set g4 (((x1 + x2) / 1.5) - 1)

  ; Objective function
  set fitness ((x3 + 2) * x2 * x1 * x1)

  ; Sort criterion (Adding penalty schema)
  let constraints-penalty (max (list 0 g1)) ^ 2 + (max (list 0 g2)) ^ 2 + (max (list 0 g3)) ^ 2 + (max (list 0 g4)) ^ 2
  set f-order fitness + r-penalty * constraints-penalty

  set evaluations evaluations + 1
end


to update-display

  ; Wire diameter
  ask patch -10 -150 [set plabel (word (precision ([x1] of best-global) 4))
                      set plabel-color 74]

  ; Coil diameter
  ask patch 265 12 [set plabel (word (precision ([x2] of best-global) 4))
                      set plabel-color 74]

  ; Active Coils
  ask patch 10 170 [set plabel (word (precision ([x3] of best-global) 4))
                      set plabel-color 74]
end

to update-particles

  ask particles [

    calculate-fitness

    ; Update the "personal best" location
    if f-order < [f-order] of best-local
      [ set best-local self ]

    ; Update the "global best" location
    if f-order < [f-order] of best-global
        [ set best-global self ]

    ; Calculate the new particle velocity

    ; Atracction by the inertia of the own particle
    set vx1 particle-inertia * vx1
    set vx2 particle-inertia * vx2
    set vx3 particle-inertia * vx3

    ; Atracction to the best local position of the particle
    set vx1 vx1 + attraction-to-personal-best * (random-float 1.0) * (([x1] of best-local) - x1)
    set vx2 vx2 + attraction-to-personal-best * (random-float 1.0) * (([x2] of best-local) - x2)
    set vx3 vx3 + attraction-to-personal-best * (random-float 1.0) * (([x3] of best-local) - x3)

    ; Atracction to the best global position of the swarm
    set vx1 vx1 + attraction-to-global-best * (random-float 1.0) * (([x1] of best-global) - x1)
    set vx2 vx2 + attraction-to-global-best * (random-float 1.0) * (([x2] of best-global) - x2)
    set vx3 vx3 + attraction-to-global-best * (random-float 1.0) * (([x3] of best-global) - x3)

    ; Calculate the new particle position
    set x1 x1 + vx1
    set x2 x2 + vx2
    set x3 x3 + vx3

    ; Speed limits
    if (vx1 > particle-speed-limit) [ set vx1 particle-speed-limit ]
    if (vx1 < 0 - particle-speed-limit) [ set vx1 0 - particle-speed-limit ]
    if (vx2 > particle-speed-limit) [ set vx2 particle-speed-limit ]
    if (vx2 < 0 - particle-speed-limit) [ set vx2 0 - particle-speed-limit ]
    if (vx3 > particle-speed-limit) [ set vx3 particle-speed-limit ]
    if (vx3 < 0 - particle-speed-limit) [ set vx3 0 - particle-speed-limit ]
  ]

end
@#$#@#$#@
GRAPHICS-WINDOW
282
33
924
443
-1
-1
1.055
1
18
1
1
1
0
1
1
1
-300
300
-190
190
0
0
1
ticks
30.0

BUTTON
67
34
213
67
NIL
setup
NIL
1
T
OBSERVER
NIL
NIL
NIL
NIL
1

BUTTON
141
74
212
107
NIL
go
T
1
T
OBSERVER
NIL
NIL
NIL
NIL
1

SLIDER
52
175
224
208
num-evaluations
num-evaluations
1000
1000000
100000.0
1000
1
NIL
HORIZONTAL

SLIDER
52
218
225
251
swarm-population-size
swarm-population-size
1
200
141.0
1
1
NIL
HORIZONTAL

TEXTBOX
94
502
197
520
Variables bounds
14
0.0
1

SLIDER
33
567
137
600
min-x1
min-x1
0
0.5
0.05
0.01
1
NIL
HORIZONTAL

SLIDER
155
567
261
600
max-x1
max-x1
1
20
2.0
1
1
NIL
HORIZONTAL

SLIDER
33
641
136
674
min-x2
min-x2
0
2
0.25
0.05
1
NIL
HORIZONTAL

SLIDER
154
642
261
675
max-x2
max-x2
0.5
5
1.3
0.1
1
NIL
HORIZONTAL

SLIDER
34
717
136
750
min-x3
min-x3
0.5
10
2.0
1
1
NIL
HORIZONTAL

SLIDER
155
717
262
750
max-x3
max-x3
1
50
15.0
1
1
NIL
HORIZONTAL

TEXTBOX
111
539
196
557
wire diameter
13
0.0
1

TEXTBOX
113
615
186
633
coil diameter
12
0.0
1

TEXTBOX
116
693
176
711
active coils
12
0.0
1

MONITOR
285
456
379
501
Nº Evaluations
evaluations
0
1
11

TEXTBOX
835
459
918
477
Best Particle
12
0.0
1

MONITOR
824
485
930
530
Fitness
[fitness] of best-global
7
1
11

TEXTBOX
109
144
186
164
Parameters
14
0.0
1

TEXTBOX
831
558
905
576
Constraints
14
0.0
1

MONITOR
825
592
909
637
g1
[g1] of best-global
6
1
11

MONITOR
825
650
911
695
g2
[g2] of best-global
6
1
11

MONITOR
825
706
911
751
g3
[g3] of best-global
6
1
11

MONITOR
826
764
911
809
g4
[g4] of best-global
6
1
11

BUTTON
68
74
134
107
step
go
NIL
1
T
OBSERVER
NIL
NIL
NIL
NIL
1

SLIDER
53
278
225
311
particle-inertia
particle-inertia
0
1
0.6
0.1
1
NIL
HORIZONTAL

SLIDER
53
317
225
350
particle-speed-limit
particle-speed-limit
0
1
0.4
0.1
1
NIL
HORIZONTAL

SLIDER
52
374
238
407
attraction-to-personal-best
attraction-to-personal-best
0
2
1.6
0.1
1
NIL
HORIZONTAL

SLIDER
51
415
238
448
attraction-to-global-best
attraction-to-global-best
0
2
1.3
0.1
1
NIL
HORIZONTAL

PLOT
301
535
792
812
Fitness Plot
iter #
raw fitness
0.0
10.0
0.0
10.0
true
true
"" ""
PENS
"best" 1.0 0 -2674135 true "" "plot min [fitness] of particles"
"avg" 1.0 0 -10899396 true "" "plot mean [fitness] of particles"
"worst" 1.0 0 -13345367 true "" "plot max [fitness] of particles"

SLIDER
61
835
233
868
r-penalty
r-penalty
0
10000000
5000000.0
10000
1
NIL
HORIZONTAL

TEXTBOX
103
810
198
828
Penalty Strength
12
0.0
1

@#$#@#$#@
## INTRODUCTION TO TENSION SPRING PROBLEM

Designing a spring that can fulfill a mechanical task is a crucial part in a design process.
A few design variables (wire diameter, mean coil diameterm active coils) are needed to be
determined to satisfy the constraints of the problem. 

The main objective is to **minimize the weight** of a tension or compression spring.
This also carries to fulfill the constraints under **certain conditions** which are: 
minimum deflection, surge frequency, shear stress, as well as limits on outside diameter and on design variables. 


## WHAT IS IT?

This model demostrates the use of particle swarm optimization on Tension/Compression Spring Problem. PSO are biologically-inspired computer science technique/method in the field of machine learning that optimizes a problem by particles that are moving around in a search space according to mathematical formula over the particle's position and velocity.

In real coded PSO if a problem has n design variables, then each particle can be represented with n-dimensions to
localizate it and with n-velocities as: X = [x1, x2, ... , xn] and V = [v1, v2, ... , vn] respectively. 
In this problem, we have 3 design variables:

x1 = Wire diameter (d)
x2 = Mean coil diameter (D)
x3 = Number of active coils (N)

These design variables are represented as:

![imagen-modelo](images/TensionSpring.png)

Here our main objective is to minimize the following objective function at the same time we fulfill with all the constraints that the problem statement carries:

![imagen-enunciado](images/TS-statement.png)


where 0.05 <= x1 <= 2.0, 0.25 <= x2 <= 1.3 and 2.0 <= x3 <= 15.0


The general optimization problem can be expressed as follows:

**min f(x)**

subject to equality constraints (not in our case):
![ec](images/equality-constraints.png)

and/or subject to inequality constraints
![inec](images/inequality-constraints.png)

The objective function is modified, in order to account for constraints, as follows:
![penalty](images/penalty-schema.png)

where p, r (penalty factors) are large positive numbers. It is noted that all equality and inequality constraints are normalized to the same range of values (all are <= 0).


## HOW IT WORKS

There are a population of particles (kwnon as "swarm") of candidate solutions.
Particles are defined by ther positions X = [x1, x2, ... , xn] at the search landscape an their velocities V = [v1, v2, ... , vn] which are moving through that landscape. The partcles also also have an amount of inertia which keeps them moving in the same direction the were moving previously. 

Each particle have acceleration, which depends on two factors:

- The best location that it has personally found (p-best) before at its history. This factor is known as 'atracction-to-personal-best'.
- The best location that any particle has ever found (g-best) in the search space. This factor is known as 'atracction-to-global-best'.

There is also a random factor about how much the particle is pulled toward each of these locations.

**Algorithm** (pseudocode)

```
For each particle (i=1, ... , n) do
    Initialize the particle's position uniformly distributed
    Initialize the particle's best local found position (p-best)
        Update global best known (g-best) if p-best its better
	Initialize the particle's velocity
while n-evaluations <= max-evaluations do:
	for each particle (i=1, ... , n) do
		for each dimension (i=1, ..., d) do
			Update particle's velocity
		Update particle's position
		Update local best known (p-best) if actual is better
			Update g-best if p-best is better
```

## HOW TO USE IT

Press the SETUP button to create an initial random population of solutions.

Press the STEP button to have one new iteration created from the previously state of the swarm.

Press the GO button to have the PSO algorithm running until a solution has been found. (In our case, till we reach a determinate number of evaluations of our objective function).

The best solution found in each iteration is displayed in the VIEW. The value of each design variable will be drawn next to their representation at the tension spring image. 

=== Parameters ===

The NUM-EVALUATIONS slider controls the number (limit) of evaluations of the objective functions that we want to perform.

The SWARM-POPULATION-SIZE slider controls the number of particles of the swarm.

The ATTRACTION-TO-PERSONAL-BEST slider determines the strength of attraction of each particle toward the location where it had previously found the highest value (in it's own history).

The ATTRACTION-TO-GLOBAL-BEST slider determines the strength of attraction of each particle toward the best location ever discovered by any member of the swarm.

The PARTICLE-INERTIA slider controls the amount to which particles keep moving in the same direction they have been (as opposed to being pulled by the forces of attraction).

The PARTICLE-SPEED-LIMIT slider controls the maximum rate of movement (in either the x or y directions) for each particle.

The CONSTRAINTS-PARAMETERS sliders controls how are we going to restrict the optimization of the pressure vessel design. It depends on the pressure or stress supported by each material. 

The R-PENALTY slider controls how many penalization we are going to charge to the fitness value of each solution. If a solution break lots of constraints, this parameter will set this value higher than other solutions that do not break as many constraints. 
This parameter appears at the modification of the objective function f'(x). 

The "Fitness Plot" is used to show the best, average, and worst fitness values of the solutions at each generation.


## CREDITS AND REFERENCES

This model is an implementation for the Tension Spring Design Problem.

It's a part of end-of-degree project -TFG- by Jose A. Martín Melguizo supervised by Rocio Romero Zaliz at the University Of Granada (UGR)

Granada, 18 April, 2021

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.  To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

![CC BY-NC-SA 4.0](https://licensebuttons.net/l/by-nc-sa/3.0/88x31.png)
@#$#@#$#@
default
true
0
Polygon -7500403 true true 150 5 40 250 150 205 260 250

airplane
true
0
Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15

arrow
true
0
Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150

box
false
0
Polygon -7500403 true true 150 285 285 225 285 75 150 135
Polygon -7500403 true true 150 135 15 75 150 15 285 75
Polygon -7500403 true true 15 75 15 225 150 285 150 135
Line -16777216 false 150 285 150 135
Line -16777216 false 150 135 15 75
Line -16777216 false 150 135 285 75

bug
true
0
Circle -7500403 true true 96 182 108
Circle -7500403 true true 110 127 80
Circle -7500403 true true 110 75 80
Line -7500403 true 150 100 80 30
Line -7500403 true 150 100 220 30

butterfly
true
0
Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240
Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240
Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163
Polygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165
Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225
Circle -16777216 true false 135 90 30
Line -16777216 false 150 105 195 60
Line -16777216 false 150 105 105 60

car
false
0
Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180
Circle -16777216 true false 180 180 90
Circle -16777216 true false 30 180 90
Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89
Circle -7500403 true true 47 195 58
Circle -7500403 true true 195 195 58

circle
false
0
Circle -7500403 true true 0 0 300

circle 2
false
0
Circle -7500403 true true 0 0 300
Circle -16777216 true false 30 30 240

cow
false
0
Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167
Polygon -7500403 true true 73 210 86 251 62 249 48 208
Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123

cylinder
false
0
Circle -7500403 true true 0 0 300

dot
false
0
Circle -7500403 true true 90 90 120

face happy
false
0
Circle -7500403 true true 8 8 285
Circle -16777216 true false 60 75 60
Circle -16777216 true false 180 75 60
Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240

face neutral
false
0
Circle -7500403 true true 8 7 285
Circle -16777216 true false 60 75 60
Circle -16777216 true false 180 75 60
Rectangle -16777216 true false 60 195 240 225

face sad
false
0
Circle -7500403 true true 8 8 285
Circle -16777216 true false 60 75 60
Circle -16777216 true false 180 75 60
Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183

fish
false
0
Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166
Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165
Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60
Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166
Circle -16777216 true false 215 106 30

flag
false
0
Rectangle -7500403 true true 60 15 75 300
Polygon -7500403 true true 90 150 270 90 90 30
Line -7500403 true 75 135 90 135
Line -7500403 true 75 45 90 45

flower
false
0
Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135
Circle -7500403 true true 85 132 38
Circle -7500403 true true 130 147 38
Circle -7500403 true true 192 85 38
Circle -7500403 true true 85 40 38
Circle -7500403 true true 177 40 38
Circle -7500403 true true 177 132 38
Circle -7500403 true true 70 85 38
Circle -7500403 true true 130 25 38
Circle -7500403 true true 96 51 108
Circle -16777216 true false 113 68 74
Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218
Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240

house
false
0
Rectangle -7500403 true true 45 120 255 285
Rectangle -16777216 true false 120 210 180 285
Polygon -7500403 true true 15 120 150 15 285 120
Line -16777216 false 30 120 270 120

leaf
false
0
Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195
Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195

line
true
0
Line -7500403 true 150 0 150 300

line half
true
0
Line -7500403 true 150 0 150 150

pentagon
false
0
Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120

person
false
0
Circle -7500403 true true 110 5 80
Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90
Rectangle -7500403 true true 127 79 172 94
Polygon -7500403 true true 195 90 240 150 225 180 165 105
Polygon -7500403 true true 105 90 60 150 75 180 135 105

plant
false
0
Rectangle -7500403 true true 135 90 165 300
Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285
Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285
Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210
Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135
Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135
Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60
Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90

sheep
false
15
Circle -1 true true 203 65 88
Circle -1 true true 70 65 162
Circle -1 true true 150 105 120
Polygon -7500403 true false 218 120 240 165 255 165 278 120
Circle -7500403 true false 214 72 67
Rectangle -1 true true 164 223 179 298
Polygon -1 true true 45 285 30 285 30 240 15 195 45 210
Circle -1 true true 3 83 150
Rectangle -1 true true 65 221 80 296
Polygon -1 true true 195 285 210 285 210 240 240 210 195 210
Polygon -7500403 true false 276 85 285 105 302 99 294 83
Polygon -7500403 true false 219 85 210 105 193 99 201 83

square
false
0
Rectangle -7500403 true true 30 30 270 270

square 2
false
0
Rectangle -7500403 true true 30 30 270 270
Rectangle -16777216 true false 60 60 240 240

star
false
0
Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108

target
false
0
Circle -7500403 true true 0 0 300
Circle -16777216 true false 30 30 240
Circle -7500403 true true 60 60 180
Circle -16777216 true false 90 90 120
Circle -7500403 true true 120 120 60

tree
false
0
Circle -7500403 true true 118 3 94
Rectangle -6459832 true false 120 195 180 300
Circle -7500403 true true 65 21 108
Circle -7500403 true true 116 41 127
Circle -7500403 true true 45 90 120
Circle -7500403 true true 104 74 152

triangle
false
0
Polygon -7500403 true true 150 30 15 255 285 255

triangle 2
false
0
Polygon -7500403 true true 150 30 15 255 285 255
Polygon -16777216 true false 151 99 225 223 75 224

truck
false
0
Rectangle -7500403 true true 4 45 195 187
Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194
Rectangle -1 true false 195 60 195 105
Polygon -16777216 true false 238 112 252 141 219 141 218 112
Circle -16777216 true false 234 174 42
Rectangle -7500403 true true 181 185 214 194
Circle -16777216 true false 144 174 42
Circle -16777216 true false 24 174 42
Circle -7500403 false true 24 174 42
Circle -7500403 false true 144 174 42
Circle -7500403 false true 234 174 42

turtle
true
0
Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210
Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105
Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105
Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87
Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210
Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99

wheel
false
0
Circle -7500403 true true 3 3 294
Circle -16777216 true false 30 30 240
Line -7500403 true 150 285 150 15
Line -7500403 true 15 150 285 150
Circle -7500403 true true 120 120 60
Line -7500403 true 216 40 79 269
Line -7500403 true 40 84 269 221
Line -7500403 true 40 216 269 79
Line -7500403 true 84 40 221 269

wolf
false
0
Polygon -16777216 true false 253 133 245 131 245 133
Polygon -7500403 true true 2 194 13 197 30 191 38 193 38 205 20 226 20 257 27 265 38 266 40 260 31 253 31 230 60 206 68 198 75 209 66 228 65 243 82 261 84 268 100 267 103 261 77 239 79 231 100 207 98 196 119 201 143 202 160 195 166 210 172 213 173 238 167 251 160 248 154 265 169 264 178 247 186 240 198 260 200 271 217 271 219 262 207 258 195 230 192 198 210 184 227 164 242 144 259 145 284 151 277 141 293 140 299 134 297 127 273 119 270 105
Polygon -7500403 true true -1 195 14 180 36 166 40 153 53 140 82 131 134 133 159 126 188 115 227 108 236 102 238 98 268 86 269 92 281 87 269 103 269 113

x
false
0
Polygon -7500403 true true 270 75 225 30 30 225 75 270
Polygon -7500403 true true 30 75 75 30 270 225 225 270
@#$#@#$#@
NetLogo 6.2.0
@#$#@#$#@
@#$#@#$#@
@#$#@#$#@
@#$#@#$#@
@#$#@#$#@
default
0.0
-0.2 0 0.0 1.0
0.0 1 1.0 0.0
0.2 0 0.0 1.0
link direction
true
0
Line -7500403 true 150 150 90 180
Line -7500403 true 150 150 210 180
@#$#@#$#@
0
@#$#@#$#@
