The work of a real estate project developer is tricky. One has to establish whether a development is feasible by going through the steps of analyzing the market, environmental assessments, surveys, plans (site, development and building), permits, and financing, just to name a few . This while complying to all stakeholders , rules and regulations. For a developer to assess the feasibility of a project alone is a tedious process, with many iterations taking place between the developer and stakeholders. This while the process usually also gets constrained by adding the time of assessment as an extra factor. To find the best result seems therefore nearly impossible, with the developer relying on his or her experience to determine if the outcome could be considered “the best” or “good enough”.
During the process of a feasibility study, project developers face some of these limitations:
- Calculations for the assessment of a project are done up front or after meetings or discussions with stakeholders. This makes it difficult to make decisions during a meeting about the requirements and constraints discussed at the moment.
- Sharing information or project input with colleagues and relevant parties during developments is difficult, since these may vary during the assessment. Keeping track of the most recent input is therefore a challenge.
- Obtaining an optimal result is an almost impossible task, with projects usually having many variables and constraints, and projects looking different from one another.
Optimization for Real Estate Development
As was mentioned, project developers (from now on “project developers” and “the user” will be used interchangeably) are limited by constraints and uncertainty ranges to determine the feasibility of and/or best outcome for the project. The calculations required to determine the outcome for a single set of inputs are usually simple in terms of complexity, and therefore do not require a lot of computational power. Project developers usually also only want to have one optimal outcome, or cost function, which is to obtain the highest earnings for a project. These two characteristics (low computational complexity and a single cost function) make it especially advantageous to construct an optimization. In relatively little time, the user could therefore calculate thousands to millions sets of inputs to get an optimal result.
It is therefore up to the user to determine all the inputs needed for a project*, after which should be determined which, with what interval**, and to what extent the input should vary, and what the constraints are. Any optimization has its limitations, and therefore, no matter how simplistic a calculation is, the number of sets of inputs do influence the time of the optimization immensely.
For example, let’s say a project consists of low, medium and high income segments. If the number of units would be used as variable, with every segment’s units ranging from 50 to 100, together with a 1-unit interval (assuming that constraints have been added to the equation), the number of input sets equate to 132,651 (51³)***. By increasing the interval or the number of variables will affect the number of input sets dramatically. It is therefore important for the user to critically assess the variables, and to determine to what extent they affect the outcome.
There are ways to customize the optimization to obtain an optimal value in the shortest period of time. Here is a list of changes one can bring to the optimization:
- The calculations and logic of the project developer can be expressed in code, and this is no different with the optimization. A project developer with years of experience has a good idea which variables have a greater impact on the outcome. The optimization could therefore be split into different stages. This optimal value is calculated by first finding the optimal input for a certain set of variables with the greatest impact in the first stage, and using the optimal variable set of this first stage for the following stages.
- If these sections can provide an optimal variable set independent of the other, an optimization can be split into different sections.
- If the user has a good idea where the optimal value for a certain variable is, the value could be initialized at that approximated point, and the optimization could be tuned to have a narrow range (and therefore few intervals) around the optimal value.
- The optimization could be split up into iterations, with each iteration having less intervals or a narrower range. After each iteration, the optimal variable set is taken for the next iteration.
If the optimization still does not perform as the user would expect, the user should consider using advanced optimization models (although the models are redundant if the variables show linear tendencies).
Using VIKTOR as tool
VIKTOR could play a major role in relieving pressure for the project developer. The VIKTOR platform uses a Python framework, which makes it possible for the user to define all calculations and logic using Python. The variable input can also be defined with a structure with any defaults and exceptions included, making it easier for the user to add input. The user could then use VIKTOR as a tool during discussions or meetings with stakeholders by quickly assessing the requirements and constraints being discussed. This makes it possible to make decisions much quicker on the spot. The ability to compute thousands of scenarios within seconds could further enhance the decision-making process, especially when applying a well set up optimization. VIKTOR’s central data structure also allows for multiple colleagues within the company to have access to a project’s input, therefore eliminating the process of sending the project input to colleagues.
If you want to read more on how VIKTOR is used by developers in the construction industry, refer to this customer case and download our whitepaper.
Sources (only for reference)
* The VIKTOR SDK provides a variety of field options, some which are useful for repetitive inputs. Suppose a development consists of various sections, all with the same type of inputs (e.g. area, cost per square meter, revenue per square meter, etc.). These could be structured using dynamic arrays or tables within VIKTOR.
** Assuming the optimization requires an interval for a specific variable
*** Assuming the brute force optimization method