- Given an square area,
- Partition this area into differently sized rectangles,
- Such that the difference in size between the largest and the smallest rectangle is minimized.
Instead of partitioning, we can look at the problem as a tiling problem: given a set of differently sized tiles, place a subset of them on the area such that the whole area is covered and the difference in the size of used tiles (largest minus smallest) is minimized.
The model in [1] looked like:
Original MIP Model |
---|
Decision Variables |
---|
Here I want to discuss a different approach. Instead of solving the problem in one swoop for both (select tiles) and (place tiles), we can design a simple algorithm that iterates between two different models until we find a feasible integer solution. By ordering things from best to worse, as soon as we find a feasible solution, we have the optimal solution.
The first model is dedicated to select variables (i.e. select tiles) such that and where the objective is optimized. The second model takes a solution for and checks if it is feasible. If not feasible, we go back to model 1 and generate a new, next best solution for .
Model 1: selection of tiles, can look like:
MIP Model 1: Generate proposals for |
---|
Previously found solutions for are stored in the data structure . The cut will forbid any previously found solution to be considered again. In the first solve, we can use (no previously found solutions).
The second model establishes whether the solution in model 1 is feasible. This model, given a selection of tiles () will try to place the tiles such that all locations of the whole area are covered by exactly one tile.
MIP Model 2: Check feasibility of |
---|
The algorithm can look like:
- Initialization: .
- Solve model 1
- Record the solution , augment the set and add this solution to .
- Solve model 2
- If feasible: STOP. We have found the optimal solution.
- Go to step 2.
Small example
When we solve a problem, we need 10 cycles:
---- 227 PARAMETER ysolrep solutions for m1 (ordered by obj) obj smallest largest status sol1 3 24 27 Infeasible sol2 6 18 24 Infeasible sol3 6 18 24 Infeasible sol4 7 9 16 Infeasible sol5 7 9 16 Infeasible sol6 7 21 28 Infeasible sol7 7 21 28 Infeasible sol8 7 14 21 Infeasible sol9 7 14 21 Infeasible sol10 8 4 12 Feasible
The status column indicates what model 2 thinks about this proposal. The first 9 generated proposals were infeasible. The first tiling with a difference of 8 was feasible, and we can declare that an optimal solution. We have proven that no better solution exists.
The results look like:
Solution for 10x10 problem |
Large example
The results for a problem are:
Optimal solution for 25x25 problem |
References
- Mondriaan Tilings, https://yetanothermathprogrammingconsultant.blogspot.com/2020/04/mondriaan-tilings.html The problem and a mathematical model are detailed in this post.
No comments:
Post a Comment