Converse Formula

No preview image

1 collaborator

Default-person Steven Kimbrough (Author)



Tagged by Steven Kimbrough about 8 years ago


Tagged by Steven Kimbrough about 8 years ago

store location 

Tagged by Steven Kimbrough about 8 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 5.1.0 • Viewed 449 times • Downloaded 26 times • Run 0 times
Download the 'Converse Formula' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


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."


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))


  1. Db is the "breaking point" between city A and city B, in distance from B.

  2. Dab is the distance between city A and city B.

  3. Pa is the population of city A.

  4. 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.


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)))


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:

  1. How large would the population of city B need to be in order for the breakpoint to be at least 37.0?
  2. How small would the population of city A need to be in order for the breakpoint to be at most 40.0?
  3. 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?


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.


  1. 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?
  2. 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?
  3. 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?
  4. 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.
  5. Reimplement the Converse Formula NetLogo model in Python. Compare and contrast the two implementation environments, NetLogo and Python, for this purpose.


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 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 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

Version: $Id: Converse Formula.nlogo 4332 2014-09-05 20:41:11Z sok $.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

to plotversusDab
  set-current-plot "Db Versus Dab"
  set-current-plot-pen "pen-1"
  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)))]

to plotversusroot
  set-current-plot "Db Versus root"
  set-current-plot-pen "default"
  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)))]

to plotversuspa
  set-current-plot "Db Versus Pb"
  set-current-plot-pen "default"
  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)))]  

There is only one version of this model, created about 8 years ago by Steven Kimbrough.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.