# Converse Formula

No preview image

### 1 collaborator Steven Kimbrough (Author)

### Tags

location

Tagged by Steven Kimbrough about 8 years ago

spatial

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 this modelEmbed this model

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

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.

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

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?

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

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.

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

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

## Comments and Questions

Click to Run Model

```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 8 years ago by Steven Kimbrough.

## Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.