DrugSupply: An Illegal Drug Economy Model

created with NetLogo

view/download model file: drugsupply.nlogo

This model is part of a project under, and was supported by, National Institute on Drug Abuse grant DA-10736, "Drug Trends in Community Contexts," Michael Agar, principal investigator.

WHAT IS IT?
-----------
This is a model of a drug economy. The key point in the economy is that the bosses who employ dealers do so without actually holding drugs themselves, thus isolate themselves from direct risk of arrest. It includes a stripped down business life cycle for drug dealing: Hustling for deals, making a deal, going to the source to buy the drug (wholesale), carrying the drug to the buy and selling it, and returning to the boss to complete the deal. The players are exposed to risk of arrest via a cruising cop.

The source/sink (wholesale seller, retail buyer) are "exogenous" and of infinite capacity. By this we mean the model does not attempt to create and evolve the entire drug supply chain. Rather we focus solely on the economics of the boss and his runners. This is done to simplify and clarify the actual dealer economy. The findings of this model can provide insights into a more inclusive drug supply chain model using something like the BeerGame model.

HOW IT WORKS
------------
The model is initialized with a number ("agents" slider) of undifferentiated druggies with random wealth in the range 0-100. There is a switch ("cop?") controlling whether or not a police cruiser is present as well. (Thus in the code there are two specific NetLogo agent types called "breeds" -- druggies and cops)

During each initial step of the model, druggies hustle for deals by moving randomly and looking to see if they are currently paired with a potential boss. Four sliders shape the deal:
- invest%: The percent of his wealth a boss wants to invest in a deal.
- cut%: The percent of the profit going to the boss.
- dealMin%: The minimum deal a runner will accept as a percentage of his current wealth.
- profit%: The profit on the transaction expressed as a percent of the boss's investment.

During the hustle, a druggie asks a potential boss what deal he is willing to make. The boss calculates this from his current wealth as deal = (wealth * invest%). The profit on this sale is calculated using profit%. The amount going to the boss is cut% and to the potential runner is (1 - cut%). The potential runner calculates whether or not to risk it based on his current wealth. He does this by calculating dealMin% * wealth. If his cut is greater than this minimum value, he will perform the run.

Thus the risk calculation for the runner is simple: if I'm poor, I'll do most deals, but if I'm well off, I'll be picky.

This then begins the creation of differentiated druggies: bosses and runners. Also, as time goes by, all druggies spend money for food, dues to the mob and so on. This is calculated as cost% * wealth and is subtracted from the wealth each step of the model. We peg the lower bound of wealth at 1. This cost creates pressure for deals to occur.

This starts the life cycle of a deal. The boss gives cash to the runner, subtracting it from his wealth. The runner goes to the source to buy the drugs. He then is in the carrying state and exposed to arrest. He goes to the sink/buyer to sell the drugs and then becomes free of risk of arrest after the sell. Finally he returns to the boss where they settle the deal.

At this point, the runner can decide to make another run, based on what sort of deal the boss can make using the same calculations as above. Both the boss and runner are now richer, thus a re-deal is not assured but is likely. In addition to the deal calculation, a second factor is used: loyalty. This is a number between 0 and 1. The lower the number, the less likely the runner will attempt a re-deal. If its 0, the runner simply leaves. If its one, the runner always attempts a re-deal. If its .50, he'll attempt a re-deal 50% of the time. (Loyalty may be a bit of a misnomer here -- the boss could be of the sort that offs runners that leave his network, so it is motivated by fear and mob control as well as mutual benefit.)

Note that hustlers can do a deal with either a free hustler or a druggie who has become a boss, if the above calculations for deal making indicate a deal. Thus a boss can have more than one runner at a given time. But the boss is always poorer during a deal due to his fronting the drug money to his runners. This creates interesting and complex dynamics.

HOW TO USE IT
-------------
Select an interesting number of agents, set cops? to include one or not, and adjust the parameters for deal making. Click "defaults" to use the startup values. Click "setup" to create the initial scene, then "go" to run the model.

The model starts with a set of reasonable default values which can be re-installed by clicking "defaults". The model also allows you to have repeatable runs by setting "seed?" to On. This will install a random number generator seed at "setup" thus insuring a run with the same parameters will always proceed the same. Turning this off lets you have variations within runs with the same settings.

The world the druggies live in has the source to the north, and the sink/buyer to the south, as red and green stripes of patches. When a deal is struck, the boss stops moving and changes to a brightly colored circle who's size is based on his wealth. His label shows how many runners he has at that time. The runner stops his random motion and starts a north/south trek as the life cycle of the deal. He takes on the color of his boss. This makes it easy to follow the progress of the deal.

If a cop is present, he cruises the middle of the world, thus can easily nab a druggie carrying drugs as he goes from the red stripe to the green stripe. If an arrest is made, several things happen at once:
- The busted runner's boss is also busted.
- The boss and the busted runner become stationary during their jailtime. The boss turns to a square and the runner paints his patch gray.
- The jailtime for the boss is 100, while the runners is twice that.
- The boss and all his runners, including the busted runner, loose their current deal.
- The non-busted runners for the boss return to hustling.
- While in jail, the boss and busted runner still loose wealth as usual via the cost% parameter.
(See code below to see how simple all this is!)

Note that, due to the north/south routes, you can easily spot the busted runner and his boss as the model runs.

Like most models, this is pretty "busy". To slow things down, you can use the "step" button rather than the "go" button. You can also move the display slider on top of the agent's world to the left to slow down the action while using the "go".

The plot frequency can be changed from 1 to 10 to 100 steps using the plotFreq chooser.

The model stops when the first dealer becomes a billionaire, changing his shape to a star, and printing the current displayed values and settings for the run.

THINGS TO NOTICE
----------------
As the model runs, you'll notice a balance or equilibrium occurs between the number of bosses and runners. With a cop, this number drops and varies considerably.

On the bottom of the display are four monitors for bosses, runners, cruisers (hustlers), and busts. They should sum to the number of agents you started with. They provide an interesting way to judge when the economy reaches an equilibrium. With loyalty set to 1, you'll find the cruisers drops to 0 when there is no cop.

A set of plots and histograms are given to show the behavior during the run.

THINGS TO TRY
-------------
Start with the default deal settings by clicking "defaults". Click go and remember the ticks it took to build a billionaire. Note that the max wealth curve does indeed look a lot like a stock market with huge variations. What do you think causes the variations? (We are told in economics, queueing theory and chaos theory that inter-event delays can lead to instability and wide variation.)

Change the invest% and cut% to their max of 90%. Run the model and compare the ticks. (800 vs 406 for my runs). Does this make sense?

Re-establish the defaults and then try min/max loyalty. (1703 vs 576 for my runs) Again, how would you explain this?

Similarly, look for states where the economy disolves into no bosses. Here's a set of parameters that do this:
- invest%:0.1
- cut%:0.5
- dealMin%:0.5
- profit%:1.0
- costs%:0.05
- loyalty:0.0
Does this make sense? How about moving the loyalty to 1.00 .. should help, right? Try it. Now bump the profit% to 2.00. What happens now? Any ideas why? Then set the cut% to .75. Now what differences do you see? Finally, set the invest% to .25. This is getting pretty interesting, right?

Note: You can make the runs fast by turning off the display (the on/off slider on the top of the model's view area) and setting the plotFreq to 100. Remember to reset the plotFreq after hitting defaults if you do this.

Use the 3D button after you start a run to see if you notice different things during the run. What stands out more?

EXTENDING THE MODEL
-------------------
This model has been kept very simple indeed in order to make it both easy to change and to investigate only the actual economic topology of drug dealing.

- Add more cops.
- Extend the bust to include all the druggies, not just the busted one and the boss.
- Create a slider for changing the jailtime, and the percent served by bosses vs runners.
- Let bosses form a hierarchy by taking deals from other bosses and having their runners do the deal.
- Make the sources and sinks limited and dynamic.
- Look into a true drug supply chain similar to the BeerGame but with the DrugSupply economy. See:
http://backspaces.net/models/beergame.html

NETLOGO FEATURES
----------------
- Teamwork: The simplicity of NetLogo made it quite easy for three of us to conspire on the model. For example, rather than the complex description of a "bust" above, I can simply show this:

to do-bust [druggie]
let theBoss boss-of druggie
ask druggies with [boss = theBoss] [clear-dope]
ask druggie [set jailtimer jailTime * 2 set pcolor jailColor]
ask theBoss [clear-dope set jailtimer jailTime set shape "square"]
end

Reading the code is far less error-prone than a verbal explanation.

- 3D, Shapes, Sizes and Colors: Being able to run the model with no modifications in 3D helps us show it to non-scientests without explaining all the "dots on the screen" of the 2D model. We find clients of our consulting are often puzzled by more traditional models. Similarly, the ease of changing sizes, shapes, and colors greatly improve visualization. Things like: The busted dealers are squares, the runners and cruisers are arrows, the cop is in a car, richer means bigger, runners are the color of their boss, and so on are a great help.

- Breeds: Although one can always add tags to agents for distinguishing very different agents (cops and druggies in this model), breeds make it far more manageable.

- Startup: We find the convention of the "startup" procedure (which always runs as soon as the model is loaded) quite convenient. In this model for example, we want to start with the same defaults no matter how the model was last saved. So we simply press the "defaults" button (run the set-defaults procedure) within startup.

- Random-seed: Because we want reproducible results while we investigate the model's behavior, it is quite useful to be able to set the random number generator's initial seed. We can turn it off easily when we want to investigate variation within runs of the same parameter settings as well.

- Plots & Histograms: We tried dozens of different plots and histograms before settling on the four shown here. The ease in quick modification was invaluable.

- Numerics: The smooth transition between integers and floating point numbers was important for this model due to the wealth of the really rich is in the billions while the poorest runners is almost always 1, the minimum. Managing this with Java's ints, longs, floats and doubles can be quite difficult.
[Note: A slight improvement to NetLogo's numerics might include a version of the "precision" command which works on the numeric portion of large floats. So possibly "precision-float 1.23456E12 2" would produce 1.23E12.]

RELATED MODELS
--------------
DrugSupply is a second model in an NIH funded project to investigate illicit drug epidemics. An earlier Netlogo model from the project, DrugTalk, looked at demand as a function of consumer evaluation,
http://ccl.northwestern.edu/netlogo/models/community/Drugtalk.

CREDITS AND REFERENCES
----------------------
This model is part of a project under, and was supported by, National Institute on Drug Abuse grant DA-10736, "Drug Trends in Community Contexts," Michael Agar, principal investigator. Design and implementation of the model was carried out by Stephen Guerin and Owen Densmore of Redfish Group in Santa Fe, NM.