p15 | Dutch Housing Problem¶
See also
This problem is sourced from Ferchtandiker2025 [1].
Note
We add implicit assumptions that all sets are non-empty, \(R_{jv}, \text{area}_j, m_{ih}, a_i, s_i, o_h \geq 0\), and that
iFreeandhCorpare valid indices in thenIandnHdimensions, respectively.
NP-hard: yes
Description¶
The data given in the description below are just examples. The model that has to be developed should contain parameters for these values.
A residential tower consists of several floors. The optimization model has to consider just one of these possibilities. Each floor can have apartments with different areas.
The owner of an apartment can be “corporation”, “investor”, or “private”. There are three important sectors: “social”, “middle”, and “free”. The profit per apartment for the real estate developer is given, and depends on the area of the apartment, the sector, and the owner.
Here are the design restrictions:
Percentage of apartments in “social” sector should be at least a certain percentage of all apartments.
Percentage of apartments in “middle” sector should be at least a certain percentage of all apartments.
There should be a minimum average area requirement for “social” apartments.
There should be a minimum average area requirement for “middle” sector apartments.
There should be a minimum total area of “social” sector apartments owned by corporations.
There should be a minimum total area of “middle” sector apartments owned by corporations.
There should be a minimum total area requirement for “free” sector apartments.
The Corporation cannot buy apartments in the “free” sector.
There should be a minimum Percentage of apartments that go to “investors”.
All apartments on the same floor should be assigned to the same owner class (“corporation”, “investor”, or “private”).
The aim of the real estate developer is to develop a design (i.e., which apartments on which floor, and for each apartment: which sector and which owner) such that the profit for the real estate company is maximized and all restrictions as described above are satisfied.
Formulations¶
Formulation a (valid)¶
See also
This formulation is sourced from Ferchtandiker2025 [1] (formulation id: efficient).
Note
This is the aggregate (efficient) formulation.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of sectors |
integer |
scalar |
|
Number of distinct apartment floor areas |
integer |
scalar |
|
Number of owner classes |
integer |
scalar |
|
Number of floor configurations |
integer |
scalar |
|
Total number of floors in the tower |
integer |
scalar |
|
Number of apartments with floor area \(j\) in configuration \(v\) |
integer |
|
|
Profit per apartment for sector \(i\), floor area \(j\), and owner \(h\) |
continuous |
|
|
Actual floor area value for area index \(j\) |
continuous |
|
|
Minimum floor area required for each sector \(i\) and owner \(h\) |
continuous |
|
|
Minimum fraction of total apartments that must belong to each sector \(i\) |
continuous |
|
|
Minimum average floor area required for apartments in each sector \(i\) |
continuous |
|
|
Minimum fraction of total apartments that must belong to each owner class \(h\) |
continuous |
|
|
Index of the free sector |
integer |
scalar |
|
Index of the corporation owner class |
integer |
scalar |
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
Number of floors using configuration \(v\) with owner \(h\) |
integer |
|
|
Number of apartments in sector \(i\) with floor area \(j\) and owner \(h\) |
integer |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of sectors is positive. |
\(nI > 0\) |
yes |
Number of distinct apartment floor areas is positive. |
\(nJ > 0\) |
yes |
Number of owner classes is positive. |
\(nH > 0\) |
yes |
Number of floor configurations is positive. |
\(nV > 0\) |
yes |
Total number of floors is positive. |
\(K > 0\) |
yes |
\(R\) is non-negative. |
\(R_{jv} \geq 0 \quad \forall j \in J, v \in V\) |
yes |
Area values are non-negative. |
\(\text{area}_j \geq 0 \quad \forall j \in J\) |
yes |
Minimum area requirements are non-negative. |
\(m_{ih} \geq 0 \quad \forall i \in I, h \in H\) |
yes |
Sector fraction lower bounds are non-negative. |
\(a_i \geq 0 \quad \forall i \in I\) |
yes |
Average area lower bounds are non-negative. |
\(s_i \geq 0 \quad \forall i \in I\) |
yes |
Ownership fraction lower bounds are non-negative. |
\(o_h \geq 0 \quad \forall h \in H\) |
yes |
iFree is a valid sector index. |
\(0 \leq \text{iFree} < nI\) |
no |
hCorp is a valid owner index. |
\(0 \leq \text{hCorp} < nH\) |
no |
Constraints¶
Total number of floors equals \(K\).
\[ \sum_{v \in V} \sum_{h \in H} x_{vh} = K \]Apartment-count consistency: for each area \(j\) and owner \(h\), the total apartments of area \(j\) supplied by chosen configurations equals the total apartments of area \(j\) assigned to any sector.
\[ \sum_{v \in V} R_{jv}\, x_{vh} = \sum_{i \in I} y_{ijh} \quad \forall j \in J,\; h \in H \]Minimum fraction of total apartments that must be in sector \(i\).
\[ \sum_{j \in J} \sum_{h \in H} y_{ijh} \geq a_i \sum_{l \in I} \sum_{j \in J} \sum_{h \in H} y_{ljh} \quad \forall i \in I \]Minimum average floor area for sector \(i\).
\[ \sum_{j \in J} \sum_{h \in H} \text{area}_j \times y_{ijh} \geq s_i \sum_{j \in J} \sum_{h \in H} y_{ijh} \quad \forall i \in I \]Apartments with area below minimum for (sector \(i\), owner \(h\)) must be zero.
\[ y_{ijh} = 0 \quad \forall i \in I,\; j \in J,\; h \in H \text{ with } \text{area}_j < m_{ih} \]Corporations cannot own free sector apartments.
\[ y_{\text{iFree},j,\text{hCorp}} = 0 \quad \forall j \in J \]Minimum fraction of total apartments for owner \(h\).
\[ \sum_{i \in I} \sum_{j \in J} y_{ijh} \geq o_h \sum_{i \in I} \sum_{j \in J} \sum_{h' \in H} y_{ijh'} \quad \forall h \in H \]\(x\) is non-negative. (implicit)
\[ x_{vh} \geq 0 \quad \forall v \in V,\; h \in H \]\(y\) is non-negative. (implicit)
\[ y_{ijh} \geq 0 \quad \forall i \in I,\; j \in J,\; h \in H \]
Objective¶
Maximize total profit from apartment assignments.
Formulation b (valid)¶
See also
This formulation is sourced from Ferchtandiker2025 [1] (formulation id: inefficient).
Note
This is the disaggregate (inefficient) formulation.
Parameters¶
Name |
Description |
Type |
Shape |
|---|---|---|---|
|
Number of floors in the tower |
integer |
scalar |
|
Number of floor configurations |
integer |
scalar |
|
Number of owner classes |
integer |
scalar |
|
Number of sectors |
integer |
scalar |
|
Number of distinct apartment floor areas |
integer |
scalar |
|
Maximum number of apartments across all configurations |
integer |
scalar |
|
Number of apartments in configuration \(v\) |
integer |
|
|
Area index of apartment \(a\) in configuration \(v\) (maps \((v, a)\) to an index in 0..nJ-1) |
integer |
|
|
Profit per apartment for sector \(i\), area index \(j\), and owner \(h\) |
continuous |
|
|
Actual floor area value for area index \(j\) |
continuous |
|
|
Minimum floor area required for each sector \(i\) and owner \(h\) |
continuous |
|
|
Minimum fraction of total apartments that must belong to each sector \(i\) |
continuous |
|
|
Minimum average floor area required for apartments in each sector \(i\) |
continuous |
|
|
Minimum fraction of total apartments that must belong to each owner class \(h\) |
continuous |
|
|
Index of the free sector |
integer |
scalar |
|
Index of the corporation owner class |
integer |
scalar |
Variables¶
Name |
Description |
Type |
Shape / Indices |
|---|---|---|---|
|
\(1\) if floor \(k\) uses configuration \(v\) with owner \(h\), \(0\) otherwise |
binary |
|
|
\(1\) if apartment \(a\) in configuration \(v\) on floor \(k\) (with owner \(h\)) is assigned to sector \(i\), \(0\) otherwise |
binary |
|
Assumptions¶
Description |
Formulation |
Implicit |
|---|---|---|
Number of floors is positive. |
\(nK > 0\) |
yes |
Number of floor configurations is positive. |
\(nV > 0\) |
yes |
Number of owner classes is positive. |
\(nH > 0\) |
yes |
Number of sectors is positive. |
\(nI > 0\) |
yes |
Number of distinct apartment floor areas is positive. |
\(nJ > 0\) |
yes |
cap is non-negative and at most nA for each configuration. |
\(0 \leq \text{cap}_v \leq nA \quad \forall v \in V\) |
yes |
jApt values are valid area indices. |
\(0 \leq \text{jApt}_{va} < nJ \quad \forall v \in V,\; a < \text{cap}_v\) |
yes |
Area values are non-negative. |
\(\text{area}_j \geq 0 \quad \forall j \in J\) |
yes |
Minimum area requirements are non-negative. |
\(m_{ih} \geq 0 \quad \forall i \in I,\; h \in H\) |
yes |
Sector fraction lower bounds are non-negative. |
\(b_i \geq 0 \quad \forall i \in I\) |
yes |
Average area lower bounds are non-negative. |
\(s_i \geq 0 \quad \forall i \in I\) |
yes |
Ownership fraction lower bounds are non-negative. |
\(o_h \geq 0 \quad \forall h \in H\) |
yes |
iFree is a valid sector index. |
\(0 \leq \text{iFree} < nI\) |
no |
hCorp is a valid owner index. |
\(0 \leq \text{hCorp} < nH\) |
no |
Constraints¶
Each floor is assigned exactly one configuration and owner.
\[ \sum_{v \in V} \sum_{h \in H} x_{kvh} = 1 \quad \forall k \in K \]Each apartment on a chosen floor must be assigned to exactly one sector.
\[ \sum_{i \in I} y_{kvhia} = x_{kvh} \quad \forall k \in K,\; v \in V,\; h \in H,\; a \in A_v \]Minimum fraction of total apartments that must be in sector \(i\).
\[ \sum_{k} \sum_{v} \sum_{h} \sum_{a \in A_v} y_{kvhia} \geq b_i \sum_{k} \sum_{v} \sum_{h} \sum_{i'} \sum_{a \in A_v} y_{kvhi'a} \quad \forall i \in I \]Minimum average floor area for sector \(i\).
\[ \sum_{k,v,h,a \in A_v} \text{area}_{j_{va}} \times y_{kvhia} \geq s_i \sum_{k,v,h,a \in A_v} y_{kvhia} \quad \forall i \in I \]Apartments with area below minimum for (sector \(i\), owner \(h\)) must have zero assignment.
\[ y_{kvhia} = 0 \quad \forall k,v,h,i,a \in A_v \text{ with } \text{area}_{j_{va}} < m_{ih} \]Corporations cannot own free sector apartments.
\[ y_{kv\,\text{hCorp}\,\text{iFree}\,a} = 0 \quad \forall k \in K,\; v \in V,\; a \in A_v \]Minimum ownership fraction: total apartments assigned to owner \(h\) meets \(o_h\) times all apartments.
\[ \sum_{k,v} x_{kvh} \times |A_v| \geq o_h \sum_{k,v,h'} x_{kvh'} \times |A_v| \quad \forall h \in H \]
Objective¶
Maximize total profit from apartment assignments.
Reformulations¶
Each entry below pairs two formulations of this problem, records whether the second is a reformulation of the first, and gives the parameter map carrying the first formulation’s parameters to the second’s.
a → b (valid)¶
Note
Formulation
adescribes a configuration by apartment counts \(R_{jv}\); formulationbindexes apartments individually.\(\text{jApt}\) is determined only up to the order of a configuration’s apartments, which are interchangeable. The Python listing fixes the canonical choice: area indices in ascending order of \(j\). Entries at \(a \geq \text{cap}_v\) pad the row out to \(nA\) and are never referenced by formulation
b.
Parameter map
Name |
Definition in terms of |
|---|---|
|
\(nK = K\) |
|
\(nV = nV\) |
|
\(nH = nH\) |
|
\(nI = nI\) |
|
\(nJ = nJ\) |
|
\(\text{cap}_v = \sum_{j \in J} R_{jv} \quad \forall v \in V\) |
|
\(nA = \max_{v \in V} \text{cap}_v\) |
|
\(|\{a < \text{cap}_v : \text{jApt}_{va} = j\}| = R_{jv} \quad \forall j \in J,\; v \in V\) |
|
\(p_{ijh} = O_{ijh}\) |
|
\(\text{area}_j = \text{area}_j\) |
|
\(m_{ih} = m_{ih}\) |
|
\(b_i = a_i\) |
|
\(s_i = s_i\) |
|
\(o_h = o_h\) |
|
\(\text{iFree} = \text{iFree}\) |
|
\(\text{hCorp} = \text{hCorp}\) |