Converse Formula
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
The Converse Formula NetLogo model implements and affords the post-solution analysis and exploration of Converse's formula for store placement. The formula is quite simple and indeed naive in many ways. Yet it has been used in practice. The purpose of this NetLogo model is to afford with a maximally simple example the process of "thinking with models."
PROBLEM DESCRIPTION
The scene: A competitor has a store in city A. There is no other potentially competitive store in the region. If we put a competing store of our own in city B, will it attract enough traffice to be profitable? Converse's formula constitutes a relevant model.
The Converse formula is:
Db = Dab / (1 + sqrt (Pa / Pb))
where
Db is the "breaking point" between city A and city B, in distance from B.
Dab is the distance between city A and city B.
Pa is the population of city A.
Pb is the population of city B.
The formla purports to tell us where the breaking point is on the line between the two cities, where people inside the breaking point will shop at the associated city. If we then know the population of the region and how it is distributed, we can calculate how many people will shop at city B.
HOW IT WORKS
This implementation slightly generalizes the Converse formula, replacing the square root function with a root parameter, root
. This formula, appearing in the Db
monitor on the Interface tab, effectively implements Converse's formula in our NetLogo model:
Dab / (1 + ((Pa / Pb) ^ (1 / root)))
HOW TO USE IT
The Converse formula tells us that if cities A and B are 100 kilometers apart, city A has a population of 400,000, and city B has a population of 85,000, then the breakpoint (defining the "cachment area" of B) is at about 31.55 kilometers.
Besides implementing the Converse formula and letting us easily and quickly calculate it for different values of the parameters, the model supports us in exploring various post-solution analysis and exploration questions, such as:
- How large would the population of city B need to be in order for the breakpoint to be at least 37.0?
- How small would the population of city A need to be in order for the breakpoint to be at most 40.0?
- Given fixed values of the other three parameters and a $D_b$ value that has a margin of safely of 5 kilometers for maintaining profitability, over what range of $r$ do we remain within this margin of safety?
THINGS TO NOTICE
Three NetLogo command procedures in the Code tab implement the three plots on the Interface tab. The code is somewhat atypical of how plotting is normally done in NetLogo. Typically, a go
procedure executes repeatedly, advancing the tick counter each time through. This automatically updates the plots. Here we have no go
procedure so the typical approach will not work. Instead, we use the sort of approach that MATLAB, Python, etc. use for plotting: we create (here) a list of values to be plotted and then we iterate through, plotting each item as we go. The procedures in the Code tab show how to do this. In effect we are implementing the linspace
command of MATLAB.
EXTENDING THE MODEL
- Critically assess the Converse formula as a model. What are its strengths? limitations? key assumptions? Under what conditions is it likely to be useful? not very useful?
- In addition to the post-solution analysis questions discussed above in "How to Use It," what other interesting questions are supported by the Converse Formula NetLogo model? Discuss and explain why they are interesting or likely to be useful. What about interesting questions that are not well supported by the model?
- What is the epistemological status of Converse's formula? It is evidently not a law of nature, although it is expressed like one. Does it support counterfactuals? Is it true?
- Reimplement the Converse Formula NetLogo model in a spreadsheet program, such as Excel. Compare and contrast the two implementation environments, NetLogo and spreadsheets, for this purpose.
- Reimplement the Converse Formula NetLogo model in Python. Compare and contrast the two implementation environments, NetLogo and Python, for this purpose.
HOW TO CITE
If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software:
- Kimbrough, Steven O. (2014). Converse Formula model. University of Pennsylvania, Philadelphia, PA. Converse Formula.nlogo
COPYRIGHT AND LICENSE
Copyright 2014 Steven O. Kimbrough.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Commercial licenses are also available. To inquire about commercial licenses, please contact Steven O. Kimbrough at kimbrough@wharton.upenn.edu.
Version: $Id: Converse Formula.nlogo 4332 2014-09-05 20:41:11Z sok $.
Comments and Questions
to plotversusDab set-current-plot "Db Versus Dab" set-current-plot-pen "pen-1" clear-plot let increment Dab / 100 let to-plot n-values 100 [(1 + ?) * increment] set-current-plot "Db Versus Dab" set-current-plot-pen "pen-1" let Dab-temp Dab foreach to-plot [ set Dab-temp ? plotxy Dab-temp Dab-temp / (1 + ((Pa / Pb) ^ (1 / root)))] end to plotversusroot set-current-plot "Db Versus root" set-current-plot-pen "default" clear-plot let increment 5 / 100 let to-plot n-values 100 [(1 + ?) * increment] let root-temp root foreach to-plot [ set root-temp ? plotxy root-temp Dab / (1 + ((Pa / Pb) ^ (1 / root-temp)))] end to plotversuspa set-current-plot "Db Versus Pb" set-current-plot-pen "default" clear-plot let increment 5000000 / 1000 let to-plot n-values 1000 [(1 + ?) * increment] let Pb-temp Pb foreach to-plot [ set Pb-temp ? plotxy Pb-temp Dab / (1 + ((Pa / Pb-temp) ^ (1 / root)))] end
There is only one version of this model, created about 10 years ago by Steven Kimbrough.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.