Bar Moth
No preview image
Model was written in NetLogo 5.0
•
Viewed 308 times
•
Downloaded 24 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
breed [ males BP_male] breed [ females BP_female] breed [ BAR bar_staff ] breed [ Tablefour four_top ] breed [ TableEight eight_top ] breed [ barstools barstool] breed [ customers customer] globals [ MensRoom WomensRoom DanceFloorCor CurrentBarValue AVGBarValue Crowd BestGuy BestGirl NetworkB NetworkG AVGDrinkCount ] patches-own [ obstacle openspace BarCounter DrinkPoints Swarm ] customers-own [ power path BarCoordinates powerrank placeinlist gender bladderrate drinkcount stuck drinkconsume drinkhand bathroom rate dance danceCor single seat looks crush numfollowingme ] Bar-own [ DrinkMakingRate CurrentDrinks ] to Floor_Plan clear-all set-patch-size 15 resize-world 0 60 0 60 ask patches [set pcolor black] ifelse( file-exists? "bar_floor_plan.txt") [ file-open "bar_floor_plan.txt" while [not file-at-end?] [ let next-x file-read let next-y file-read let next-color file-read ask patch next-x next-y [set pcolor next-color] ] user-message "Bar Floor Plan Loaded Correctly!" file-close ] [ user-message "**ERROR** Cannot find the file: bar_floor_plan.txt in the current directory"] set WomensRoom patch 48 44 set MensRoom patch 52 44 ask patches with [pcolor = 9.9] [ set obstacle 1 ] ask patches with [pcolor = 6] [ set obstacle 1 ] ask patches with [pcolor = 35] [ set Barcounter 1 set drinkpoints 30 ] set avgbarvalue 0 set AVGDrinkCount 0 end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to default Floor_Plan ifelse( file-exists? "dance_floor.txt") [ file-open "dance_floor.txt" while [not file-at-end?] [ let next-x file-read let next-y file-read let next-color file-read ask patch next-x next-y [set pcolor next-color] ] user-message "Dance Floor Loaded Correctly!" file-close ] [ user-message "**ERROR** Cannot find the file: dance_floor.txt in the current directory"] setupTablesDefault Setup-people end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to SetupTablesDefault set-default-shape Tablefour "square" set-default-shape barstools "dot" create-Tablefour 10 ask Tablefour [ set size 2.5 set color 45 setxy 45 10 ] set-default-shape TableEight "square" create-TableEight 4 ask TableEight [ set size 4 set color 26 setxy 48 10 ] ask four_top 1 [ setxy 17 37] ask four_top 2 [ setxy 17 42 ] ask four_top 3 [ setxy 17 47 ] ask four_top 0 [ setxy 11 47 ] ask four_top 4 [ setxy 11 42 ] ask four_top 5 [ setxy 11 37 ] ask four_top 6 [ setxy 27 37 ] ask four_top 7 [ setxy 27 31 ] ask four_top 8 [ setxy 27 26 ] ask four_top 9[ setxy 27 21 ] ask eight_top 10 [ setxy 38 15 ] ask eight_top 11 [ setxy 38 21 ] ask eight_top 12 [ setxy 38 27 ] ask eight_top 13 [ setxy 38 33 ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to SetupTables set-default-shape Tablefour "square" set-default-shape barstools "dot" create-Tablefour Num_Four_Top_Tables ask Tablefour [ set size 2.5 set color 45 setxy 45 10 ] set-default-shape TableEight "square" create-TableEight Num_Eight_Top_Tables ask TableEight [ set size 4 set color 26 setxy 48 10 ] if (Num_Four_Top_Tables > 1) [ let i 0 let y4t 10 while [i < Num_Four_Top_Tables] [ ask four_top i [ setxy 45 y4t] set i i + 1 set y4t y4t + 2.5 ] ] if (Num_Eight_Top_Tables > 1) [ let i count Tablefour let y4t 10 while [i < Num_Four_Top_Tables + Num_Eight_Top_Tables] [ ask eight_top i [ setxy 48 y4t] set i i + 1 set y4t y4t + 3.5 ] ] let tag1 0 let tag2 0 ask four_top (Num_Four_Top_Tables - 1) [ set tag1 ycor + 2] ask eight_top (Num_Four_Top_Tables + Num_Eight_Top_Tables - 1) [ set tag2 ycor + 2] ask patch (46) (tag1) [ set plabel-color black set plabel "4-Tops" ] ask patch (48) (tag2) [ set plabel-color black set plabel "8-Tops" ] ask patch 49 40 [ set plabel-color black set plabel "TABLES CHOICES" ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to MoveTables if mouse-down? [ let pickup4 min-one-of Tablefour [distancexy mouse-xcor mouse-ycor] let pickup8 min-one-of TableEight [distancexy mouse-xcor mouse-ycor] let pick4 [distancexy mouse-xcor mouse-ycor] of pickup4 let pick8 [distancexy mouse-xcor mouse-ycor] of pickup8 while [mouse-down?] [ ifelse (pick4 < pick8) [ ask pickup4 [ setxy (round mouse-xcor) (round mouse-ycor) ] ][ask pickup8 [setxy (round mouse-xcor) (round mouse-ycor)]] display ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Erasedance ask patches with [pcolor = 114] [ set pcolor black ] set dancefloorcor nobody end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Dancefloor if (mouse-down?) [ let TX round mouse-xcor let TY round mouse-ycor ask patch TX TY [ if (pcolor = black) [ set pcolor 114] ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Setup-people reset-ticks GenerateBarStools set dancefloorcor one-of patches with [pcolor = 114] ask patches with [pcolor = black] [ if (not any? turtles-here) [set openspace 1 ] ] set-default-shape customers "person" set-default-shape BAR "person service" set-default-shape TableEight "square" ask n-of Patrons (patches with [pcolor = black and pycor < 25 ]) [ if not any? turtles-here [ sprout-customers 1 [ set path (list (patch (6 + random 36) 52) (patch (7 + random 35) 52) (patch (8 + random 34) 52) (patch 40 52) (patch (10 + random 32) 52)) set power (list (1 + random 20) (1 + random 20) (1 + random 20) (1 + random 20) (1 + random 20) ) set powerrank (list 0 0 0 0 0) calculateRanking set heading random 360 set color blue set size 2 set drinkcount 0 set gender 1 set bathroom MensRoom set drinkconsume .99 set bladderrate .4 set rate 3.1 + random-float .5 set dance 0 set dancecor dancefloorcor set single 1 set looks (30 + random 71) set crush nobody ] ] ] ask n-of (round (( PercentageFemale / 100) * Patrons)) customers [ set gender 0 set color pink set rate 2.1 + random-float .5 set bathroom WomensRoom set dance 1 ] ask n-of (0.57 * patrons) customers [ set single 0 ] ask n-of Number_staff (patches with [pcolor = 6]) [ sprout-BAR 1 [set heading random 360 set color white set size 2 set drinkmakingrate (skills * (1 + random-float 1)) set CurrentDrinks 0 ] ] set bestguy nobody set bestgirl nobody end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to GenerateBarStools ask Tablefour [ if ((xcor < 42) and (xcor > 5 ) and (ycor > 10) and (ycor < 60)) [ let i 0 ask patch-here[ set pcolor 9.9 set obstacle 1 ] ask neighbors4[ set pcolor 9.9 set obstacle 1] while [i < 4 ] [ hatch-barstools 1 [ set size 2 set color 8 set heading (i * 90) forward 1.75 ] set i i + 1 ] ] ] ask Tableeight [ if ((xcor < 42) and (xcor > 5 ) and (ycor > 10) and (ycor < 60)) [ let i 0 ask neighbors [ set pcolor 9.9 set obstacle 1] while [i < 4 ] [ hatch-barstools 1 [ set size 2 set color 8 set heading (i * 90) forward 2 right 90 forward 0.5 left 180 hatch-barstools 1 [ forward 1 ] ] set i i + 1 ] ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to GO DoCalculations ask customers [ routine set numfollowingme count customers with [crush = myself] ] ask Bar [ staff-routine ] if (any? patches with [swarm > 1]) [ diffuse swarm 0.75 RecolorCrowd ] tick end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to DoCalculations if (bestguy != nobody) [ set networkB (sum [numfollowingme] of customers with [crush = bestguy]) + (count customers with [crush = bestguy]) set networkG (sum [numfollowingme] of customers with [crush = bestgirl]) + (count customers with [crush = bestgirl]) ] set CurrentBarValue sum [drinkpoints] of patches with [pcolor = 35] set AvgBarValue mean [drinkpoints] of patches with [pcolor = 35] set Crowd max-one-of patches [count customers in-radius 10] set AvgDrinkCount mean [drinkcount] of customers end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to MarkBestLooking set BestGuy max-one-of (customers with [gender = 1]) [looks] ask bestguy [ set shape "Markedmale" set size 2 ] set Bestgirl max-one-of (customers with [gender = 0]) [looks] ask bestgirl [ set shape "markedfemale" set size 2 ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Routine Intoxicated ifelse (bladderrate > 20) [ face bathroom checkobstacle BathRoomFunction ] [ ifelse (drinkhand < 1.5) [ usememory face BarCoordinates checkobstacle BarCounterFunction (BarCoordinates) ] [ ifelse (single = 0) [ FindBarstool ] [ ifelse (single = 1) and (drinkcount < Drinks_till_dance) [ finddate ConsumeDrink checkobstacle ] [ if (gender = 1) and (crush != nobody) [ set dance 1 ] ifelse (dance = 1) and (drinkcount >= Drinks_till_Dance) [ ifelse any? patches with [pcolor = 114] [ face dancecor checkobstacle danceaway ConsumeDrink ] [set dance 0] ] [ConsumeDrink checkobstacle ] ] ] ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Intoxicated if (gender = 1) and (drinkcount > max_drinks_male) [ hatch 1 [ set crush nobody set drinkcount 0 set rate 3.1 + random-float .5 set dance 0 set dancecor dancefloorcor set single random 2 set looks (30 + random 71) set bladderrate .4 set numfollowingme 0 set shape "person" ] ask self [die] ] if (gender = 0) and (drinkcount > max_drinks_male) [ hatch 1 [ set crush nobody set drinkcount 0 set rate 2.1 + random-float .5 set dance 1 set dancecor dancefloorcor set single random 2 set looks (30 + random 71) set bladderrate .4 set numfollowingme 0 set shape "person" ] ask self [die] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Checkobstacle ifelse ([obstacle] of patch-ahead 1 != 1) and (not any? customers-on patch-ahead 1) [ walkabout set stuck 0 ] [ ifelse (stuck > 2) [ while [[obstacle] of patch-ahead 1 = 1] [ right random-float 90 ] walkabout while [[obstacle] of patch-ahead 1 = 1] [ left random-float 180 set stuck 0 ] walkabout ] [ left random-float 90 set stuck stuck + 1 checkobstacle ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Danceaway if (patch-here = dancecor) [ right random-float 360 checkobstacle forward random-float 1 back random-float 1 left random-float 360 checkobstacle forward random-float 1 back random-float 1 if (gender = 0) [ set color scale-color pink drinkhand 20 0 ] if (gender = 1) [ set color scale-color blue drinkhand 20 0 ] set dancecor one-of patches with [pcolor = 114] ] end ;;//////////////////////////////////////////////////////////////////////////////////////////////// to FindBarstool ifelse (any? barstools-here) [ ConsumeDrink ][ checkobstacle if(any? barstools in-cone 4 160) [ set Seat min-one-of barstools [distance myself] face Seat ConsumeDrink checkobstacle ] ] end ;;//////////////////////////////////////////////////////////////////////////////////////////////// to FindDate if (gender = 0) [ if (crush = nobody) and (any? customers in-radius Look_Vision with [gender = 1]) [ let potentiallist customers in-radius Look_Vision with [gender = 1] let tempA max-one-of potentiallist [looks] let theirlooks 0 ask tempA [ set theirlooks looks ] if (theirlooks >= looks ); and (theirlooks <= (looks + drinkcount * 3 )) [ set crush tempA ] ] ] if (gender = 1) [ if (crush = nobody) and (any? customers in-radius Look_Vision with [gender = 0]) [ let potentiallist customers in-radius Look_Vision with [gender = 0] let tempA max-one-of potentiallist [looks] let theirlooks 0 ask tempA [ set theirlooks looks ] if (theirlooks > looks); and (theirlooks < (looks + drinkcount * 3)) [ set crush tempA ] ] ] if (crush != nobody) [ face crush if (any? customers in-radius 5 = crush) [ right random-float 90 ] ] end ;;//////////////////////////////////////////////////////////////////////////////////////////////// to Walkabout forward random-float 1 end ;;//////////////////////////////////////////////////////////////////////////////////////////////// to ConsumeDrink let waste drinkhand set drinkhand (drinkhand * drinkconsume) set waste ((waste - drinkhand) / rate) set bladderrate bladderrate + waste end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to WhereIsCrowd ask crowd [ set swarm 10] diffuse swarm 0.75 RecolorCrowd end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to RecolorCrowd ask patches with [swarm > 0] [ if (openspace = 1) [ set pcolor scale-color red swarm 0 10 ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to BathRoomFunction if (patch-here = bathroom) [ set bladderrate (bladderrate / (1 + random 20)) ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to BarCounterFunction [Coordinates] let BC 0 if (patch-here = Coordinates) [ ask patch-here [ ifelse (drinkpoints > 25) [ set drinkpoints 0 set BC 25 ][ set BC drinkpoints set drinkpoints 0 ] ] set drinkhand drinkhand + BC set drinkcount drinkcount + (BC / 25) ifelse (BC < 25) [ let pvalue (random 21) + 5 let pathvalue patch (10 + random 10) (52) let ranvalue (random-float 1) * pvalue let PowNew rebuildlist(power) let PatNew rebuildlist(path) let RanNew rebuildlist(powerrank) set PowNew lput pvalue PowNew set PatNew lput pathvalue PatNew set RanNew lput ranvalue RanNew set power PowNew set path PatNew set powerrank RanNew calculateranking ][ set power lput [BC] of patch-here power set power but-first power set path lput patch-here path set path but-first path calculateRanking ] ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to CalculateRanking let n 0 let large patch-here let x1 0 let y1 0 let mydist 0 let distrank (list 0 0 0 0 0) while [n < 5] [ set large item n path ask large [ set x1 pxcor set y1 pycor ] set mydist distancexy x1 y1 set mydist (1.00 / (mydist + .1)) set distrank lput mydist distrank set distrank but-first distrank set n n + 1 ] set powerrank (map + (distrank)(power)) end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to-report Rebuildlist [finlist] let T1 sublist finlist 0 placeinlist let T2 sublist finlist (placeinlist + 1) 5 let R 5 - (length T1) - 1 let i 0 while [i < R] [ set T1 lput (item i T2) T1 set i i + 1 ] report T1 end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to UseMemory let n 0 let current 0 let large 0 let pos1 0 while [n < 5] [ set large item n powerrank if ( large > current) [ set pos1 n set current large ] set n n + 1 ] ifelse (current > 0) [ set BarCoordinates item pos1 path set placeinlist pos1 ][checkobstacle] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Staff-routine ifelse (currentdrinks < 5) [ set color blue makedrinks ][ set color white placedrinks ] end ;;/////////////////////////////////////////////////////////////////////////////////////////////// to Makedrinks if (drinkmakingrate > 1) [ ifelse (drinkmakingrate > 2) [ ifelse (drinkmakingrate > 4) [ ifelse (drinkmakingrate > 6) [ ifelse (drinkmakingrate > 8) [ ifelse (drinkmakingrate > 10) [ ifelse (drinkmakingrate > 12) [ ifelse (drinkmakingrate > 14) [ ifelse (drinkmakingrate > 16) [ ifelse (drinkmakingrate > 18) [ set currentdrinks currentdrinks + (40 + random 11) ][set currentdrinks currentdrinks + (30 + random 11)] ][set currentdrinks currentdrinks + (25 + random 6)] ][set currentdrinks currentdrinks + (20 + random 6)] ][set currentdrinks currentdrinks + (15 + random 6)] ][set currentdrinks currentdrinks + (10 + random 6)] ][set currentdrinks currentdrinks + (6 + random 5)] ][set currentdrinks currentdrinks + (4 + random 3)] ][set currentdrinks currentdrinks + (1 + random 4)] ][set currentdrinks currentdrinks + (1 + random 2)] ] end ;;//////////////////////////////////////////////////////////////////////////////////////////////// to Placedrinks let DrinkPlace nobody let oldp patch-here ifelse ([pcolor] of patch-ahead 1 = 6) and (not any? turtles-on patch-ahead 1) [ forward 1 if(any? patches in-cone 3 160 with [pcolor = 35]) [ let Pdrinks currentdrinks ask patches in-cone 3 160 [ if (barcounter = 1) [ set DrinkPlace min-one-of patches [distance myself] ] ] ask DrinkPlace [ if (any? customers in-radius 5) and (drinkpoints < 50) [ set drinkpoints drinkpoints + Pdrinks set Pdrinks 0 ] ] set currentdrinks Pdrinks ] left random-float 360 ] [ ifelse ([pcolor] of patch-ahead 1 = 9.9) [ right random-float 180 ][ ] ] let newp patch-here if (oldp = newp) [ let space1 patch-here ask neighbors with [pcolor = 6][ set space1 min-one-of patches [distance myself] ] face space1 forward 1 ] end
There is only one version of this model, created about 10 years ago by John Shull.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Bar_floor_plan.txt | data | Text File for coordinates related to the 'Default' settings | about 10 years ago, by John Shull | Download |
dance_floor.txt | data | Text file for coordinates related to the 'Default' settings | about 10 years ago, by John Shull | Download |
This model does not have any ancestors.
This model does not have any descendants.