Algorithm:
The method first determines the target vacancy rates. It distinguishes between
residential and non-residential vacancy rate. For each project type given in
the model_configuration, the method obtains current vacancy in each
location (from location_set and the overall vacancy rate). By comparing
the rate with the target vacancy rate, it determines if there is a need for
development and how many units should be developed. If there are units to be
developed, from the historical data it samples sizes of projects so that their
sum gives approximately the desired number of units to be developed. It then
creates an instance of class DevelopmentProjectDataset for this particular
project type that has unique identifier called ``project_id''. Each project
corresponds to one of the sampled amount of units. This amount is stored in
the new dataset as an attribute given in the entry ``units'' of
model_configuration (see below for details). If an attribute called
project type + ``_improvement_value'' is contained in the location_set,
an average improvement value is computed over all locations and this project
type. This value is then added to each project in the created
DevelopmentProjectDataset. Additionally, an attribute of the same name as
the unique identifier of location_set is added to the
DevelopmentProjectDataset and set to 0's (which means that the projects
are unplaced).
Output:
The method returns a dictionary with an entry for each project type containing
the corresponding DevelopmentProjectDataset object. If no projects were
created for a project type, the corresponding dictionary value is None.