No Friends on a Powder Day?
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
Skiers and snowboarders are fond of saying “There are no friends on a powder day”. This model simulates the use of new snow on a ski slope, and the amount of snow skied by skiers of varying abilities. With this model we approximate the distribution of “wealth” (how much snow each skier can ride over) under varying conditions. The distribution of “poor” red skiers, “middle class” green skiers, and “rich” blue skiers will demonstrate whether the Pareto principle holds true on the slopes, and the breakdown of overall wealth by ability level will show whether advanced skiers truly have an advantage over beginners.
This model is adapted from Wilensky's Wealth Distribution model, which is in turn modeled on Epstein & Axtell's "Sugarscape" model. Key differences incorporated here include:
• Each patch’s snow is only reduced, not totally consumed, when visited by one or more agents. • Agents do not have a ‘metabolism’, they simply collect wealth. Instead, they get sore incrementally over time. • Agents are split randomly among 3 ability levels to represent beginner, intermediate, and advanced skiers. Their ability level is proportional to the amount of snow they destroy and wealth they gain at each tick. • Agents only move across, diagonally downward, or straight down the hill. • Initial wealth is set at 0.1 for all skiers, reflecting that no one has yet enjoyed the hill at the start of that day.
HOW IT WORKS
We begin with an even breakdown of beginner, intermediate, and advanced skiers, who are spread evenly over the slope. They ski down, covering ground and pushing snow proportional to their respective ability level (labeled next to each skier). At each tick, every skier observes the patches ahead in five directions; right, down-and-right, straight down, down-and-left, and left. Skiers look out as far as their randomly assigned vision. They then move in the direction of the best snow they have seen, moving 3 patches if they are experts, 2 for intermediate skiers, and 1 for beginners.
Skiers also have a randomly assigned level of energy and soreness, since even the best skiers may have partied at the ski lodge the night before. As time goes on skiers gain soreness, which is added equally among the ability levels. When a skier can no longer find enough snow to justify their soreness, or they are sorer than their initial energy level could accommodate, they ‘go home’ and are replaced by a new skier with randomly assigned attributes.
To answer the question of relative wealth gained on a “pow day”, simply click setup and then go. You will see that NUM-SNOW-FALL is set to zero, meaning there is no new snow falling any more (as is the case when the fresh snow fell overnight and the sun comes out in the morning, commonly referred to as a “bluebird day”). This default setup also assumes that there is a 3:1 advantage in enjoyment for an expert skier over a beginner. With these settings, the model confirms that the Pareto principle holds. As with the Wealth model on which this is based, the Lorenz curve illustrates that after approximately 500 ticks all the wealth is isolated among just a couple of skiers, with the vast majority having no more snow to ski.
Another perspective added in this model is the percent of wealth held by each group of skier abilities. If it is true that you, an expert, should abandon your beginner or intermediate friends on a day with lots of snow, then wealth held by the expert ability group should be drastically higher than that of the beginner or intermediate groups. We also track the relative numbers of beginner, intermediate, and expert skiers to ensure that their relative populations (which are random and should even out over time) aren’t accounting for the differences in the relative wealth of each ability group.
HOW TO USE IT
Use the NUM-SKIERS slider to adjust the number of skiers on the hill. The MAX-VISION slider adjusts the maximum amount of distance each skier can be assigned to see (the actual distance each can see is randomly assigned between 1 and MAX-VISION). The ABILITY-ADVANTAGE slider adjusts how much more snow a skier with higher ability (ranging from 1 to 3) can add to their wealth and remove from the hill. The wealth added at each patch is equal to:
snow-here * ability ^ ability-advantage
Since the ability is in the exponent, a value of 1 gives us a ratio of 3:2:1 across ability levels. This makes sense since skiers also move at a speed ratio of 3:2:1 (from expert to beginner). However, you could argue that with increased ability comes increased snow removed at each patch, so values of 2 and 3 can be selected to illustrate a more dramatic difference.
ENERGY-MIN and ENERGY-MAX are the range of “endurances” for each skier, again randomly assigned. Taken together, the above values compose the attributes of our agents.
PERCENT-BEST-LAND determines what percent of patches receive the best snow. The default is ‘total coverage’ at 100%, as is often the case after heavy snow on an open ski run. A lower setting might simulate a run later in the day, or perhaps partial tree coverage.
NUM-SNOW-FALL is the amount of snow added per patch per SNOW-FALL-INTERVAL. Using these sliders together you can simulate heavier/lighter and faster/slower snowfalls. The default NUM-SNOW-FALL is zero, to simulate ‘bluebird’ conditions. With NUM-SNOW-FALL at zero, SNOW-FALL-INTERVAL has no effect.
SETUP is used to set the initial values selected and should be used before increasing NUM-SKIERS to avoid an error. GO ONCE moves one tick ahead in time and GO CONTINUOUSLY moves ahead at the speed selected with the slider at the top.
Use the CLASS PLOT to see the number of agents in the red (bottom third), green (middle third), and blue (upper third) of the wealth distribution. A CLASS HISTOGRAM gives a more easily interpreted relative class breakdown at each tick. The LORENZ CURVE, with the Wealth Distribution model on which this one is based, illustrates the Lorenz curve at each moment relative to the ‘ideal’ 45-degree line, and the GINI-INDEX V. TIME provides a longitudinal look at the same ratio, with 0 being ideal equality and 1 being total inequality. Additionally, the DISTRIBUTION OF ABILITIES provides an instantaneous look at the relative number of beginner, intermediate, and advanced skiers. This gives useful background for the WEALTH BY ABILITY HISTOGRAM which can help answer our question of whether advanced skiers really do get significantly more snow, and by how much under varying conditions.
THINGS TO NOTICE
Can we answer our key question: do some skiers really get significantly more snow? If so, by how much, and under which conditions? Importantly, is this inequality in wealth isolated among the more advanced and faster skiers, or are the wealthy chosen by chance alone?
Under most conditions we will see that Pareto’s Law holds and, over time, a few skiers have all the wealth. The wealthy skiers are usually, but not always, advanced level, so there is some chance involved as well. Also important to our question is the ‘bluebird’ scenario; if no more snow is falling, the inequality is dramatic and is created very quickly. This means it’s important to get on that first chairlift!
There is also a scenario where Pareto’s Law does not apply. When enough snow is falling, the number of skiers is low enough, and the ABILITY-ADVANTAGE is set to 1, a relatively equal wealth distribution can be found. Does this mean, if the snow is good and still falling, you should not abandon even your beginner friends?!
THINGS TO TRY
Experiment with different conditions, varying numbers of skiers, and adjust the ABILITY-ADVANTAGE to the level you think reflects the real world. How does this change the outcome?
Check the weather report at your local resort before you go and try to simulate the expected conditions here. Does this help inform your plans?
For a more in-depth analysis, take a look at the Code tab. Do you think the arbitrary wealth function in the ski-forward procedure accurately reflects the relative enjoyment of the various ability levels? You can also try setting energy and soreness levels by ability, since beginners often tire by lunch time while experts ski from the first to last chair.
EXTENDING THE MODEL
Add a plot of the wealth of each ability level over time.
Add switches to tie energy, soreness, and vision to ability level.
Fix Y index on Gini-Index v. Time. Lower limit should be 0,0 not -0.1, 0. This is likely due to adjusting the initial wealth to 0.1.
Add Chooser for various wealth algorithms to simulate different ways of accounting for ability-advantage.
Incorporate Poulhès and Miral values and algorithms wherever possible.
NETLOGO FEATURES
In addition to the scale-color reporter from Wilensky's Wealth Distribution model, this model includes the update-wealth-ability procedure to report the global values which break down accumulated wealth by ability.
CREDITS AND REFERENCES
This model is based on Wilensky's Wealth Distribution NetLogo model, which in turn is based on Epstein, J. & Axtell R. (1996). Growing Artificial Societies: Social Science from the Bottom Up. Washington, DC: Brookings Institution Press.
The Pareto principal can be understood here: https://en.wikipedia.org/wiki/Pareto_principle
The phrase “No Friends on a Powder Day” is colloquial, and is examined subjectively here: https://www.backcountry.com/explore/no-friends-on-a-powder-day-strategies-for-when-its-deep .
Of particular interest is a rigorous Agent-based model of skiers in a ski area by Poulhès and Mirial (2017), which aims to “offer a decision-making tool for the operator and design engineering” of a ski resort:
Alexis Poulhès, Paul Mirial, Dynaski, an Agent-based Model to Simulate Skiers in a Ski area,
Procedia Computer Science, Volume 109, 2017, Pages 84-91, ISSN 1877-0509, https://doi.org/10.1016/j.procs.2017.05.298. (https://www.sciencedirect.com/science/article/pii/S1877050917309559)
This model was created using the NetLogo software:
• Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
RELATED MODELS
• Wilensky, U. (1998). NetLogo Wealth Distribution model. http://ccl.northwestern.edu/netlogo/models/WealthDistribution. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
Comments and Questions
globals [ max-snow ; maximum amount any patch can hold gini-index-reserve lorenz-points ;; create wealth by ability globals to use in histogram wealth-ability-1 wealth-ability-2 wealth-ability-3 ] patches-own [ snow-here ; the current amount of snow on this patch max-snow-here ; the maximum amount of snow this patch can hold ] turtles-own [ soreness ; how sore a turtle (skier) is, proportional to how long a skier has been skiing wealth ; the amount of fresh snow a skiier has skied energy ; maximum ticks a turtle can ski before they're tired and go home ability ; how fast a skier goes, and proportional to how much snow they destroy vision ; how many patches ahead a skier can see ] ;;; ;;; SETUP AND HELPERS ;;; to setup clear-all ;; set global variables to appropriate values set max-snow 100 ;; call other procedures to set up various parts of the world setup-patches setup-turtles update-lorenz-and-gini reset-ticks end ;; set up the initial amounts of snow each patch has to setup-patches ;; give some patches the highest amount of snow possible -- ;; these patches are the "best terrain" ask patches [ set max-snow-here 0 if (random-float 100.0) <= percent-best-land [ set max-snow-here max-snow set snow-here max-snow-here ] ] ;; spread that snow around the window a little and put a little back ;; into the patches that are the "best land" found above repeat 5 [ ask patches with [max-snow-here != 0] [ set snow-here max-snow-here ] diffuse snow-here 0.25 ] repeat 10 [ diffuse snow-here 0.25 ] ;; spread the snow around some more ask patches [ set snow-here floor snow-here ;; round snow levels to whole numbers set max-snow-here snow-here ;; initial snow level is also maximum recolor-patch ] end to recolor-patch ;; patch procedure -- use color to indicate snow level set pcolor scale-color white snow-here 0 max-snow end ;; set up the initial values for the turtle variables to setup-turtles set-default-shape turtles "person" create-turtles num-skiers [ move-to one-of patches ;; put turtles on patch centers set size 1.5 ;; easier to see set-initial-turtle-vars set soreness random energy ] recolor-turtles end to set-initial-turtle-vars set soreness 0 ;;face one-of neighbors4 set energy energy-min + random (energy-max - energy-min + 1) set ability 1 + random 3 ;;round ability set wealth 0.1 ;; everyone starts the day having skied 0 snow (0.1 to avoid division by zero) set vision 1 + random max-vision set label ability end ;; Set the class of the turtles -- if a turtle has less than a third ;; the wealth of the richest turtle, color it red. If between one ;; and two thirds, color it green. If over two thirds, color it blue. to recolor-turtles let max-wealth max [wealth] of turtles ask turtles [ ifelse (wealth <= max-wealth / 3) [ set color red ] [ ifelse (wealth <= (max-wealth * 2 / 3)) [ set color green ] [ set color blue ] ] ] end ;;; ;;; GO AND HELPERS ;;; to go ask turtles [ turn-towards-snow ] ;; choose direction holding most snow within the turtle's vision and downhill ski-forward ask turtles [ move-eat-soreness-die ] recolor-turtles ;; grow snow every snow-fall-interval clock ticks if ticks mod snow-fall-interval = 0 [ ask patches [ grow-snow ] ] update-lorenz-and-gini ask turtles [ update-wealth-ability ] ;; tracks the wealth for each ability level tick end ;; determine the direction which is most profitable for each turtle in ;; the surrounding patches within the turtles' vision ;; re-worked to make them only go across, diagonal, or straight down the hill to turn-towards-snow ;; turtle procedure set heading one-of (range 90 270) let best-direction 180 let best-amount snow-ahead set heading 90 if (snow-ahead > best-amount) [ set best-direction 90 set best-amount snow-ahead ] set heading 135 if (snow-ahead > best-amount) [ set best-direction 135 set best-amount snow-ahead ] set heading 180 if (snow-ahead > best-amount) [ set best-direction 180 set best-amount snow-ahead ] set heading 225 if (snow-ahead > best-amount) [ set best-direction 225 set best-amount snow-ahead ] set heading 270 if (snow-ahead > best-amount) [ set best-direction 270 set best-amount snow-ahead ] set heading best-direction end to-report snow-ahead ;; turtle procedure let total 0 let how-far 1 repeat vision [ set total total + [snow-here] of patch-ahead how-far set how-far how-far + 1 ] report total end to grow-snow ;; patch procedure ;; if a patch does not have it's maximum amount of snow, add ;; num-snow-fall to its snow amount if (snow-here < max-snow-here) [ set snow-here snow-here + num-snow-fall ;; if the new amount of snow on a patch is over its maximum ;; capacity, set it to its maximum if (snow-here > max-snow-here) [ set snow-here max-snow-here ] recolor-patch ] end ;; each turtle skis foward to the snow on its patch. if there are multiple ;; turtles on a patch, divide the snow evenly among the turtles to ski-forward ; have turtles ski the snow based on ability ask turtles [ set wealth floor (wealth + ((snow-here * ability ^ ability-advantage) / (count turtles-here))) ] ;; now that the snow has been skied, have the turtles make the ;; patches which they are on have less snow ask turtles ;; each skier removes some of the fresh snow ;; the amount removed increases based on ability and ability-advantage [ set snow-here (snow-here - (ability ^ ability-advantage) * 10) recolor-patch ] end to move-eat-soreness-die ;; turtle procedure ;; each skier moves fd ability ;; skiers tire faster and faster over time set wealth (wealth - soreness) ;; grow more tired set soreness (soreness + 1) ;; check for "death" conditions: if you have no more wealth or ;; you're more tired than you have energy to continue, ;; then you "die" and are "reborn" (in fact, your variables ;; are just reset to new random values) if (wealth < 0) or (soreness >= energy) [ set-initial-turtle-vars ] end ;; this procedure recomputes the value of gini-index-reserve ;; and the points in lorenz-points for the Lorenz and Gini-Index plots to update-lorenz-and-gini let sorted-wealths sort [wealth] of turtles let total-wealth sum sorted-wealths let wealth-sum-so-far 0 let index 0 set gini-index-reserve 0 set lorenz-points [] ;; now actually plot the Lorenz curve -- along the way, we also ;; calculate the Gini index. ;; (see the Info tab for a description of the curve and measure) repeat num-skiers [ set wealth-sum-so-far (wealth-sum-so-far + item index sorted-wealths) set lorenz-points lput ((wealth-sum-so-far / total-wealth) * 100) lorenz-points set index (index + 1) set gini-index-reserve gini-index-reserve + (index / num-skiers) - (wealth-sum-so-far / total-wealth) ] end to update-wealth-ability if (ability = 1) [set wealth-ability-1 (wealth-ability-1 + wealth)] if (ability = 2) [set wealth-ability-2 (wealth-ability-2 + wealth)] if (ability = 3) [set wealth-ability-3 (wealth-ability-3 + wealth)] end ; Copyright 1998 Uri Wilensky. ; See Info tab for full copyright and license.
There is only one version of this model, created over 4 years ago by Spencer Murphy.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
pow-day.png | png | screen grab | over 4 years ago, by Spencer Murphy | Download |
This model does not have any ancestors.
This model does not have any descendants.