NetLogo version NetLogo 4.0.4
Running with NetLogoLite.jar version 404.
NetLogo Version: NetLogo 4.0.4
globals [ ;; for farm color assignments new-color ;; the last color provided by the next-color utility new-color-inc ;; the direction (plus or minus) to shift the shade new-color-base ;; the shade of gray that is the base color for the current color series ] patches-own [ farm-id ] breed [ farms farm ] farms-own [ farm-root farm-patches farm-size ] to setup ca display build-farms histogram-farm-size end to build-farms ;; create the initial farm ask patch min-pxcor min-pycor [ sprout-farms 1 [ set farm-size world-width initialize-farm ] ] ;; first, enforce MAX-FARM-SIZE, split any farms over the max size. while [ any? large-farms ] [ ask large-farms [ split-farm ] ] ifelse seek-mean-farm-size? [ ;; sanity check on mean-farm-size if desired-mean-farm-size < min-farm-size [ user-message (word "The desired mean farm size can't be less than the minimum farm size,\n" "or the desired mean can never be reached!\n\n" "Please change either the minimum farm size or the desired mean farm size." ) stop ] ;; enforce mean farm size while [ mean [ farm-size ] of farms > desired-mean-farm-size and any? splittable-farms ] [ ask one-of splittable-farms [ split-farm ] if show-steps? [ display ] ] ][ ;; enforce MIN-FARM-COUNT ;; split randomly, until at least enough farms while [ count farms < desired-min-farm-count and any? splittable-farms ] [ ask one-of splittable-farms [ split-farm ] if show-steps? [ display ] ] ] ;; tag all patches with current farm id ask farms [ ask farm-patches [ set farm-id myself ] ] ;; for visual effect, move FARM turtle to center of farm, size for visual effect ask farms [ position-farm ] ;; highlight the borders ask farms [ highlight-borders ] end to position-farm let scale farm-size / 2 set size scale setxy ( [ pxcor ] of farm-root + scale ) ( [ pycor ] of farm-root + scale ) end to highlight-borders ask farm-patches with [ any? neighbors4 with [ farm-id != [ farm-id ] of myself ] ] [ set pcolor [ color + 3 ] of farm-id ] end to-report large-farms report farms with [ farm-size > max-farm-size ] end to-report splittable-farms report (farms with [ farm-size > min-farm-size ] ) end to split-farm ;; do not even try to split if this farm is only 1 unit wide. if farm-size <= 1 [ stop ] ;; OK, split! let xx 0 let yy 0 let new-size farm-size / 2 ;; create new farm-roots relative to current farm root ;; (do this relative to farm-root so that farm turtle's location is coupled to ;; determinig patches for splitting, etc) let new-farm-roots [ patches at-points map [ (list (first ? * new-size) (last ? * new-size) ) ] [ [ 0 0 ] [ 0 1 ] [ 1 1 ] [ 1 0 ] ] ] of farm-root ask new-farm-roots [ sprout-farms 1 [ set farm-size new-size initialize-farm ] ] die end to initialize-farm ;; store ID of this patch, ;; so we can use farm-root to id the lower-left corner of farm ;; letting us put farm turtle anywhere, if we =hoose. set farm-root patch-here set farm-patches patches with [ pxcor >= [ xcor ] of myself and pxcor < [ xcor + farm-size] of myself and pycor >= [ ycor ] of myself and pycor < [ ycor + farm-size] of myself ] set shape "farm" set color next-color ask farm-patches [ set pcolor [ color ] of myself ] ;; move/size farm decorously, only if "show steps" is on. if show-steps? [ position-farm ] end to-report next-color ifelse new-color = 0 [ set new-color gray ] [ set new-color wrap-color (new-color + 10 ) ] report new-color end to-report between [ value minimum maximum ] report (minimum <= value and value <= maximum) end to histogram-farm-size set-current-plot "by farm size" histogram [ log farm-size 2] of farms end
View or download the complete model file (to download: right-click, save-link-as):
-- Download farms-using-subdivision --