Closed pksohn closed 7 years ago
A couple of comments on this. One is a minor correction - the transition models don't implement move probabilities -- they compare the population and jobs in the simulation data to the target population in the control totals and add new households and jobs to the database as needed. The location choice models don't just generate location probabilities, they also monte carlo sample a probability to assign agents to locations.
A second comment is about the proposed approach. It might be worth considering using the abstraction of a development project rather than a building to add to the pipeline, which would have 2 benefits: it would make it more consistent with development pipeline projects (user-specified developments), and it would enable representation of multi-building developments like a single family subdivision or a mixed-use planned development.
Thanks Paul! This is definitely still work in progress and lots of incomplete ideas. We'd love to get your thoughts again after a few more iterations. I'll let you know when it's ready.
@waddell: We've iterated on the user stories and written up a more thorough spec. Let us know what you think. I'm working on an accompanying visual as well to make it easier to follow.
This is approved. I'm closing this and moving to the wiki.
Approved new workflow for developer model
Latest in wiki.
This is a high-level design proposal meant for discussion and review. I've tagged this and other such issues with the label
Type: Proposal
. These are not meant to be treated as user stories or handled in the GitHub project workflow. Everything in here needs to be broken down into a user story for development.Stories
Summary
See "proposed workflow" below for details.
pipeline
table, which persists across model years.pipeline
table, site-by-site.Current workflow
Here I'll try to summarize the current workflow that utilizes the
proforma
anddeveloper
models. Feel free to skip to the proposed workflow below. I'm using the model names from theurbansim_parcels
repo'smodels.py
.1: Preliminary models
2: Feasibility
Generates a table of parcels with some metrics about development feasibility, like profitability.
parcels
tableparcel_id
In this model, each parcel represents the possible development (or redevelopment) of one building, and each parcel's feasibility is analyzed as such.
3: Developer
Decides which buildings get developed, based on the outputs from the feasibility step.
feasibility
, some demand-side parameters to determine how many units to buildProposed workflow
Here are all of the tables involved:
1: Preliminary models, including scheduled developments, which are added directly into the pipeline.
1.1: Project Creator
A new
ProjectCreator
model takes in the parcel table and pipeline (empty in year 1), and generates development projects and development sites.parcels
,pipeline
, configsdevelopment_projects
,development_sites
,project_feasibility
The project creator performs these steps:
parcel_candidates
tableparcel_candidates
development_projects
anddevelopment_sites
tablesProjectProForma
model (below) and append results toproject_feasibility
parcel_candidates
parcel_candidates
through theSplitter
functiondevelopment_projects
anddevelopment_sites
ProjectProForma
has been run. Append results toproject_feasibility
Aggregator
function.development_projects
anddevelopment_sites
The
Splitter
function should take in parcels and if they qualify under some criteria (probably it's larger than a maximum parcel size), run an algorithm to determine the "best" split. One possible algorithm is:ProjectProForma
.For the best combination, save the results of
ProjectProForma
so it can be appended toproject_feasibility
The
ProjectProForma
model takes a development project as an input, runssqftproforma
on every development site in the project, and aggregates results up to the project level. This requires some thoughtfulness about aggregation rules (should we just add upmax_profit
?).2: Feasibility
Runs sqftproforma model for projects with only one development site, and combines results with the
project_feasibility
table from the previous step.development_projects
,project_feasibility
, configsfeasibility
Unlike the existing workflow, this step performs analysis on development sites as units, rather than parcels. Steps are:
development_projects
intoprojects_to_analyze
project_feasilibility
(precalculated from previous step) fromprojects_to_analyze
sqftproforma
as usual onprojects_to_analyze
, outputfeasibility
project_feasibility
tofeasibility
3: Developer
Decide which development projects get pushed into the pipeline, based on the outputs from the feasibility step.
feasibility
, some demand-side parameters to determine how many units to build, configsThere is not much change in the Developer model itself, except use development sites instead of parcels. It does this:
feasibility
3.1: Append to pipeline
A new
PipelineAdder
step should append development sites to thepipeline
table. This may be a function we simply want thedeveloper
model to handle, but there may end up being some more complicated rules regarding how we add to the pipeline.pipeline
,development_projects
,development_sites
pipeline
Steps:
pipeline
4: Build from the pipeline
A new
Constructor
model "constructs" development sites in development projects in thepipeline
. These are then added to thebuildings
table.pipeline
,buildings
pipeline
,buildings
At this point,
pipeline
is a list of development projects, and each row has information on the status of development sites within the project. Steps:buildings
pipeline
buildings
pipeline
We can add in logic to delay or cancel projects as well.
pipeline
andbuildings
persist across simulation years. Everything else is reset.