The Strength of Multi-Row Relaxations

Similar documents
The strength of multi-row models 1

Projected Chvátal-Gomory cuts for Mixed Integer Linear Programs. Pierre Bonami CMU, USA. Gerard Cornuéjols CMU, USA and LIF Marseille, France

Cutting Planes in SCIP

Computational Experiments with Cross and Crooked Cross Cuts

Lift-and-Project Inequalities

Integer Programming ISE 418. Lecture 13. Dr. Ted Ralphs

On optimizing over lift-and-project closures

Cutting Plane Separators in SCIP

Computational Experiments with Cross and Crooked Cross Cuts

Cutting planes from two rows of simplex tableau

MIR Closures of Polyhedral Sets

21. Solve the LP given in Exercise 19 using the big-m method discussed in Exercise 20.

On the knapsack closure of 0-1 Integer Linear Programs. Matteo Fischetti University of Padova, Italy

Computational Experiments with Cross and Crooked Cross Cuts

Section Notes 9. Midterm 2 Review. Applied Math / Engineering Sciences 121. Week of December 3, 2018

Integer Programming ISE 418. Lecture 13b. Dr. Ted Ralphs

Solving LP and MIP Models with Piecewise Linear Objective Functions

Split Rank of Triangle and Quadrilateral Inequalities

Strengthened Benders Cuts for Stochastic Integer Programs with Continuous Recourse

Slack Variable. Max Z= 3x 1 + 4x 2 + 5X 3. Subject to: X 1 + X 2 + X x 1 + 4x 2 + X X 1 + X 2 + 4X 3 10 X 1 0, X 2 0, X 3 0

Lecture 2. Split Inequalities and Gomory Mixed Integer Cuts. Tepper School of Business Carnegie Mellon University, Pittsburgh

On Counting Lattice Points and Chvátal-Gomory Cutting Planes

Section Notes 9. IP: Cutting Planes. Applied Math 121. Week of April 12, 2010

A Review of Linear Programming

Sensitivity Analysis

Computing with Multi-Row Intersection Cuts

Foundations of Operations Research

Lift-and-Project cuts: an efficient solution method for mixed-integer programs

A notion of Total Dual Integrality for Convex, Semidefinite and Extended Formulations

arxiv: v1 [math.oc] 16 Sep 2018

Foundations of Operations Research

Strengthening Gomory Mixed-Integer Cuts: A Computational Study

Matteo Fischetti, DEI, University of Padova. COFIN Matheon workshop, Villa Vigoni (Como), May 2006

Systems Analysis in Construction

A Lower Bound on the Split Rank of Intersection Cuts

On the Exact Separation of Mixed Integer Knapsack Cuts

Operations Research Lecture 6: Integer Programming

Split cuts from sparse disjunctions

Integer Linear Programs

Computing with multi-row Gomory cuts

F 1 F 2 Daily Requirement Cost N N N

Computational testing of exact separation for mixed-integer knapsack problems

Intersection cuts for single row corner relaxations

Reduce-and-split cuts: Improving the performance of mixed integer Gomory cuts 1

Standard Form An LP is in standard form when: All variables are non-negativenegative All constraints are equalities Putting an LP formulation into sta

Week_4: simplex method II

An Adaptive Partition-based Approach for Solving Two-stage Stochastic Programs with Fixed Recourse

Mixing Inequalities and Maximal Lattice-Free Triangles

1 Review Session. 1.1 Lecture 2

CO350 Linear Programming Chapter 6: The Simplex Method

CO350 Linear Programming Chapter 8: Degeneracy and Finite Termination

Simplex tableau CE 377K. April 2, 2015

IP Cut Homework from J and B Chapter 9: 14, 15, 16, 23, 24, You wish to solve the IP below with a cutting plane technique.

Integer Programming ISE 418. Lecture 12. Dr. Ted Ralphs

23. Cutting planes and branch & bound

Special cases of linear programming

Dual Basic Solutions. Observation 5.7. Consider LP in standard form with A 2 R m n,rank(a) =m, and dual LP:

Lagrangian Relaxation in MIP

Cutting Planes for Mixed-Integer Programming: Theory and Practice

The Strength of Multi-row Aggregation Cuts for Sign-pattern Integer Programs

Decision Procedures An Algorithmic Point of View

AM 121: Intro to Optimization

The CPLEX Library: Mixed Integer Programming

CO350 Linear Programming Chapter 5: Basic Solutions

Polyhedral Approach to Integer Linear Programming. Tepper School of Business Carnegie Mellon University, Pittsburgh

Reduced rst-level representations via the reformulation-linearization technique: results, counterexamples, and computations

Solving Box-Constrained Nonconvex Quadratic Programs

Integer Programming. Wolfram Wiesemann. December 6, 2007

March 13, Duality 3

How tight is the corner relaxation? Insights gained from the stable set problem

Integer Programming ISE 418. Lecture 8. Dr. Ted Ralphs

Change in the State of the Art of (Mixed) Integer Programming

Linear programming: algebra

On the Number of Solutions Generated by the Simplex Method for LP

Lesson 27 Linear Programming; The Simplex Method

Indicator Constraints in Mixed-Integer Programming

Improved strategies for branching on general disjunctions

Introduction to Mathematical Programming IE406. Lecture 13. Dr. Ted Ralphs

Improved strategies for branching on general disjunctions

CO350 Linear Programming Chapter 6: The Simplex Method

From structures to heuristics to global solvers

Linear Programming, Lecture 4

A geometric perspective on lifting

Cutting planes from two rows of a simplex tableau

Benders Decomposition for the Uncapacitated Multicommodity Network Design Problem

ECE 307 Techniques for Engineering Decisions

Optimization Methods in Management Science

Introduction to Mathematical Programming IE406. Lecture 21. Dr. Ted Ralphs

The Simplex Method. Lecture 5 Standard and Canonical Forms and Setting up the Tableau. Lecture 5 Slide 1. FOMGT 353 Introduction to Management Science

Preprocessing. Complements of Operations Research. Giovanni Righini. Università degli Studi di Milano

Theoretical challenges towards cutting-plane selection

Minimal Valid Inequalities for Integer Constraints

maxz = 3x 1 +4x 2 2x 1 +x 2 6 2x 1 +3x 2 9 x 1,x 2

Using Sparsity to Design Primal Heuristics for MILPs: Two Stories

On the number of distinct solutions generated by the simplex method for LP

Solving the MWT. Recall the ILP for the MWT. We can obtain a solution to the MWT problem by solving the following ILP:

Prelude to the Simplex Algorithm. The Algebraic Approach The search for extreme point solutions.

Decomposition Algorithms with Parametric Gomory Cuts for Two-Stage Stochastic Integer Programs

The Primal-Dual Algorithm P&S Chapter 5 Last Revised October 30, 2006

Relation of Pure Minimum Cost Flow Model to Linear Programming

Transcription:

The Strength of Multi-Row Relaxations Quentin Louveaux 1 Laurent Poirrier 1 Domenico Salvagnin 2 1 Université de Liège 2 Università degli studi di Padova August 2012

Motivations Cuts viewed as facets of relaxations of the problem In particular, multi-row relaxations Focus on exact separation Evaluate any relaxation

Plan A. Separation over arbitrary mixed-integer sets B. Application to two-row relaxations

A. Separation over arbitrary mixed-integer sets

Problem Given a mixed-integer set P R n, a point x R n, find (α, α 0 ) R n+1 such that α T x α 0 is a valid inequality for P that separates x, or show that x conv(p).

Problem Given a mixed-integer set P R n, a point x R n, find (α, α 0 ) R n+1 such that α T x α 0 is a valid inequality for P that separates x, or show that x conv(p).

General framework Solve the optimization problem min x T α s.t. x T α α 0 for all x P <norm.> Let (ᾱ, ᾱ 0 ) be the optimal solution. If x T ᾱ < ᾱ 0, then (ᾱ, ᾱ 0 ) separates x. If x T ᾱ ᾱ 0, then x conv(p).

General framework Solve the optimization problem min x T α s.t. x T α α 0 for all x P <norm.> Let (ᾱ, ᾱ 0 ) be the optimal solution. If x T ᾱ < ᾱ 0, then (ᾱ, ᾱ 0 ) separates x. If x T ᾱ ᾱ 0, then x conv(p).

Row generation 1. Consider the relaxation of the separation problem min x T α s.t. x T α α 0 for all x S P <norm.> (master) Let (ᾱ, ᾱ 0 ) be an optimal solution. 2. Now solve the MIP min s.t. ᾱ T x x P (slave) and let x p be a finite optimal solution. If ᾱ T x p ᾱ 0, then (ᾱ, ᾱ 0 ) is valid for P. If ᾱ T x p < ᾱ 0, then S := S {x p }.

Row generation 1. Consider the relaxation of the separation problem min x T α s.t. x T α α 0 for all x S P <norm.> (master) Let (ᾱ, ᾱ 0 ) be an optimal solution. 2. Now solve the MIP min s.t. ᾱ T x x P (slave) and let x p be a finite optimal solution. If ᾱ T x p ᾱ 0, then (ᾱ, ᾱ 0 ) is valid for P. If ᾱ T x p < ᾱ 0, then S := S {x p }.

Row generation 1. Consider the relaxation of the separation problem min x T α s.t. x T α α 0 for all x S P <norm.> (master) Let (ᾱ, ᾱ 0 ) be an optimal solution. 2. Now solve the MIP min s.t. ᾱ T x x P (slave) and let x p be a finite optimal solution. If ᾱ T x p ᾱ 0, then (ᾱ, ᾱ 0 ) is valid for P. If ᾱ T x p < ᾱ 0, then S := S {x p }.

Computational example Instance: bell3a Constraints: 123 Variables: 133 (71 integer: 32 general, 39 binaries) Models: 82 five-row models read from an optimal tableau Cuts: Gap closed: 37 (17 tight at the end) 59.02% (from 39.03% by GMIs) Time: 1615.70s Iterations: 107647

Two-phases: Phase one x between bounds {}}{ { x at bounds }} { x : x B } x N {{ } fix to bound α : α B α N. }{{}

Two-phases: Phase one x between bounds {}}{ { x at bounds }} { x : x B } x N {{ } fix to bound α : }{{}. } α B {{ } α N find

Two-phases: Phase two x between bounds {}}{ { x at bounds }} { x : x B } x N {{ } fix to bound α : }{{}. } α B {{ } } α N {{ } fixed lift

Two-phases summary The feasible region of phase-1 slave is P {x : x N = x N } phase-1 separates iff phase-2 separates whenever x conv(p), phase-2 is avoided Optimal objective function values are the same phase-2 master objective function is 0

Two-phases summary The feasible region of phase-1 slave is P {x : x N = x N } phase-1 separates iff phase-2 separates whenever x conv(p), phase-2 is avoided Optimal objective function values are the same phase-2 master objective function is 0

Two-phases summary The feasible region of phase-1 slave is P {x : x N = x N } phase-1 separates iff phase-2 separates whenever x conv(p), phase-2 is avoided Optimal objective function values are the same phase-2 master objective function is 0

Computational example (2-phases) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases Time: 1615.70s 161.15s Iterations: 107647 23822

Computational example (2-phases) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases Time: 1615.70s 161.15s Iterations: 107647 23822

Lifting binary variables x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x N α : } α B {{ } α Nbin α N fixed

Lifting binary variables x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x N α : } α B {{ } α Nbin }{{} α N fixed lift

Lifting binary variables x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x N α : } α B {{ } α Nbin }{{} α N fixed fixed

Computational example (lifting binaries) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting Time: 1615.70s 161.15s 136.54s Iterations: 107647 23822 23231

Computational example (lifting binaries) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting Time: 1615.70s 161.15s 136.54s Iterations: 107647 23822 23231

Sequential phase-2 ( phase-s ) x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x k x N }{{} (fixed to bnd) α : } α B {{ α Nbin } α k α N }{{} fixed zero

Sequential phase-2 ( phase-s ) x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x k x N }{{} (fixed to bnd) α : } α B {{ α Nbin } α k α N }{{} fixed zero

Sequential phase-2 ( phase-s ) x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x k x N }{{} (fixed to bnd) α : } α B {{ α Nbin } α k }{{} α N }{{} fixed lift zero

Sequential phase-2 ( phase-s ) x between bounds {}}{ { x at bounds }} { binary {}}{ x : x B x Nbin x k x N }{{} (fixed to bnd) α : } α B {{ α Nbin } α k }{{} α N }{{} fixed fixed zero

Computational example (phase S) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting phase S Time: 1615.70s 161.15s 136.54s 5.84s Iterations: 107647 23822 23231 2497

Computational example (phase S) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting phase S Time: 1615.70s 161.15s 136.54s 5.84s Iterations: 107647 23822 23231 2497

Solver tricks: callbacks Solving slave MIPs min ᾱ T x s.t. x P, Feasible solution ˆx with ᾱ T ˆx < ᾱ 0 ˆx can be added to S. Dual bound z reaches ᾱ 0, (ᾱ, ᾱ 0 ) is valid for P.

Solver tricks: callbacks Solving slave MIPs min ᾱ T x s.t. x P, Feasible solution ˆx with ᾱ T ˆx < ᾱ 0 ˆx can be added to S. Dual bound z reaches ᾱ 0, (ᾱ, ᾱ 0 ) is valid for P.

Solver tricks: callbacks Solving slave MIPs min ᾱ T x s.t. x P, Feasible solution ˆx with ᾱ T ˆx < ᾱ 0 ˆx can be added to S. Dual bound z reaches ᾱ 0, (ᾱ, ᾱ 0 ) is valid for P.

Computational example (solver tricks) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting phase S cb Time: 1615.70s 161.15s 136.54s 5.84s 4.65s Iterations: 107647 23822 23231 2497 2497

Computational example (solver tricks) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting phase S cb Time: 1615.70s 161.15s 136.54s 5.84s 4.65s Iterations: 107647 23822 23231 2497 2497

Computational example (summary) (bell3a, 82 five-row models, 37 cuts, 59.02%gc) original 2-phases lifting phase S cb 347 35 29 1.26 1 Time: 1615.70s 161.15s 136.54s 5.84s 4.65s Iterations: 107647 23822 23231 2497 2497 43 10 9 1 1

B. Application to two-row relaxations

Objectives Mainly, evaluate and compare the intersection cut model a few strengthenings of it a full two-row model

Two-row relaxation: which models? We are still far from a closure What reasonable set of two-models can we select? All models read from a simplex tableau O(m 2 ) two-row models

Two-row relaxation: which models? We are still far from a closure What reasonable set of two-models can we select? All models read from a simplex tableau O(m 2 ) two-row models

Two-row relaxation: which models? We are still far from a closure What reasonable set of two-models can we select? All models read from a simplex tableau O(m 2 ) two-row models

all two-row models: separation loop Let x LP optimium Read the two-row models from optimal tableau. Read and add GMIs from that tableau. do { Let x new LP optimum. Separate x with the two-row models. } while (cuts were found).

all two-row models: separation loop Let x LP optimium Read the two-row models from optimal tableau. Read and add GMIs from that tableau. do { Let x new LP optimum. Separate x with the two-row models. } while (cuts were found).

all two-row models: separation loop Let x LP optimium Read the two-row models from optimal tableau. Read and add GMIs from that tableau. do { Let x new LP optimum. Separate x with the two-row models. } while (cuts were found).

all two-row models: results Computations on the 62 MIPLIB 3.0 (preprocessed) instances for which (a). the integrality gap is not zero, and (b). the optimal MIP solution is known.

all two-row models: results We have a result for 55/62 instances (4 numerical, 3 memory). cuts gc% GMI 24.800 22.60% All 2-row 72.382 37.49% For 13 instances, the separation is exact.

all two-row models: results We have a result for 55/62 instances (4 numerical, 3 memory). cuts gc% GMI 24.800 22.60% All 2-row 72.382 37.49% For 13 instances, the separation is exact.

all two-row models: results We have a result for 55/62 instances (4 numerical, 3 memory). cuts gc% GMI 24.800 22.60% All 2-row 72.382 37.49% For 13 instances, the separation is exact.

Heuristic selection of two-row models Issue: O(m 2 ) is already a large number of models Hypothesis: Not all models are necessary to achieve good separation Rationale: MIPLIB models are mostly sparse Multi-cuts from rows with no common support are linear combinations of the corresponding one-row cuts

Heuristic selection of two-row models Issue: O(m 2 ) is already a large number of models Hypothesis: Not all models are necessary to achieve good separation Rationale: MIPLIB models are mostly sparse Multi-cuts from rows with no common support are linear combinations of the corresponding one-row cuts

Heuristic selection of two-row models Issue: O(m 2 ) is already a large number of models Hypothesis: Not all models are necessary to achieve good separation Rationale: MIPLIB models are mostly sparse Multi-cuts from rows with no common support are linear combinations of the corresponding one-row cuts

Heuristic selection of two-row models: results With an arbitrary limit of m two-row models, we have a result for 58/62 instances (1 numerical, 3 memory). On the 55 common results, cuts gc% GMI 24.800 22.60% All 2-row 72.382 37.49% Heuristic 57.418 35.19% For 25 instances, the separation is exact.

Heuristic selection of two-row models: results With an arbitrary limit of m two-row models, we have a result for 58/62 instances (1 numerical, 3 memory). On the 55 common results, cuts gc% GMI 24.800 22.60% All 2-row 72.382 37.49% Heuristic 57.418 35.19% For 25 instances, the separation is exact.

Heuristic selection of two-row models: results With an arbitrary limit of m two-row models, we have a result for 58/62 instances (1 numerical, 3 memory). On the 55 common results, cuts gc% GMI 24.800 22.60% All 2-row 72.382 37.49% Heuristic 57.418 35.19% For 25 instances, the separation is exact.

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 2.4 x 2 x 3 x 5 +2 x 6 = 0.2 x 1, x 2, x 3, x 4, x 5, x 6 Z 0 x 1 1 0 x 2 1 0 x 3 1 0 x 4 1 0 x 5 1 0 x 6 1

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 3 x 2 x 3 x 5 +2 x 6 = 1 x 1, x 2, x 3, x 4, x 5, x 6 Z 0 x 1 1 0 x 2 1 0 x 3 1 0 x 4 1 0 x 5 1 0 x 6 1

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 2.4 x 2 x 3 x 5 +2 x 6 = 0.2 x 1,, x 3, x 4, x 5, x 6 Z 0 x 1 1 0 x 2 1 0 x 3 1 0 x 4 1 0 x 5 1 0 x 6 1

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 2.4 x 2 x 3 x 5 +2 x 6 = 0.2 x 1, x 2, x 3, x 4, x 5, x 6 Z 0 x 1 1 0 x 2 1 0 x 3 1 0 x 4 1 0 x 5 1 0 x 6 1

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 2.4 x 2 x 3 x 5 +2 x 6 = 0.2 x 1, x 2,,,, Z 0 x 1 1 0 x 2 1 0 x 3 1 0 x 4 1 0 x 5 1 0 x 6 1

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 2.4 x 2 x 3 x 5 +2 x 6 = 0.2 x 1, x 2,,,, Z 0 x 3 1 0 x 4 1 0 x 5 1 0 x 6 1

Two-row intersection cuts basic nonbasic {}}{{}}{ x 1 +2 x 3 x 4 + x 5 +3 x 6 = 2.4 x 2 x 3 x 5 +2 x 6 = 0.2 x 1, x 2,,,, Z 0 x 3 0 x 4 x 5 1 x 6 1

Two-row intersection cuts + strengthening P I S-free lifting P IU full 2-row basic nonbasic Z bnd. Z bnd. B B B : keep B: keep binding : drop

Two-row intersection cuts + strengthening P I S-free lifting P IU full 2-row basic nonbasic Z bnd. Z bnd. B B B : keep B: keep binding : drop

Two-row intersection cuts + strengthening P I S-free lifting P IU full 2-row basic nonbasic Z bnd. Z bnd. B B B : keep B: keep binding : drop

Two-row intersection cuts + strengthening P I S-free lifting P IU full 2-row basic nonbasic Z bnd. Z bnd. B B B : keep B: keep binding : drop

Two-row intersection cuts + strengthening P I S-free lifting P IU full 2-row basic nonbasic Z bnd. Z bnd. B B B : keep B: keep binding : drop

Two-row intersection cuts + strengthening P I S-free lifting P IU full 2-row basic nonbasic Z bnd. Z bnd. B B B : keep B: keep binding : drop

Two-row intersection cuts and strengthenings 51 common instances: cuts gc% exact GMI 28.240 22.46% all P I 29.420 27.65% 42 S-free 38.380 30.22% 29 lifting 22.700 27.35% 10 P IU 42.640 28.56% 25 full 2-row 55.500 35.66% 22

Two-row intersection cuts and strengthenings 51 common instances: cuts gc% exact GMI 28.240 22.46% all P I 29.420 27.65% 42 S-free 38.380 30.22% 29 lifting 22.700 27.35% 10 P IU 42.640 28.56% 25 full 2-row 55.500 35.66% 22

Two-row intersection cuts and strengthenings 51 common instances: cuts gc% exact GMI 28.240 22.46% all P I 29.420 27.65% 42 S-free 38.380 30.22% 29 lifting 22.700 27.35% 10 P IU 42.640 28.56% 25 full 2-row 55.500 35.66% 22

Two-row intersection cuts and strengthenings 51 common instances: cuts gc% exact GMI 28.240 22.46% all P I 29.420 27.65% 42 S-free 38.380 30.22% 29 lifting 22.700 27.35% 10 P IU 42.640 28.56% 25 full 2-row 55.500 35.66% 22

Two-row intersection cuts and strengthenings 15 common instances: cuts gc% exact GMI 20.667 26.541 all P I 20.933 33.535 all S-free 25.400 35.229 all P IU 36.600 36.257 all full 2-row 57.267 43.956 all

Two-row intersection cuts and strengthenings 7 common instances: [bell5, blend2, egout, khb05250, misc03, misc07, set1ch] cuts gc% exact GMI 25.571 24.744 all P I 25.143 33.641 all S-free 28.714 33.836 all lifting 25.571 33.716 all P IU 47.857 37.531 all full 2-row 48.000 37.583 all

Bases We depend on the optimal basis Will the gap closed by two-row cuts survive more GMIs?

Bases We depend on the optimal basis Will the gap closed by two-row cuts survive more GMIs?

Bases We depend on the optimal basis Will the gap closed by two-row cuts survive more GMIs?

Relax and cut Convenient way to explore different (feasible) bases. Now trying to separate a point with a much stronger LP bound (obtained by adding GMIs).

Relax and cut Convenient way to explore different (feasible) bases. Now trying to separate a point with a much stronger LP bound (obtained by adding GMIs).

Relax and cut Convenient way to explore different (feasible) bases. Now trying to separate a point with a much stronger LP bound (obtained by adding GMIs).

Relax and cut: results 43 common instances: cuts gc% exact GMI 24.814 23.282 all 2-row i.c. 31.884 28.838 42 full 2-row 62.140 36.080 22 relax&cut GMI 60.372 34.970 all relax&cut 2-row i.c. 63.163 41.951 37 relax&cut full 2-row 76.767 47.277 12

Future More rows More tricks More tests

Future More rows More tricks More tests

Future More rows More tricks More tests

Future More rows More tricks More tests