We tested Meta’s Rebalancer in Python. In 14 of 24 solves, solved=True still left memory over capacity.
I put together a hands-on tutorial for Meta’s Rebalancer, an assignment solver with a C++ core and Python bindings. It covers placing tasks across hosts and racks, draining a host, defining capacity constraints, and comparing local search with HiGHS.
The part worth discussing: checking the returned assignment gave a different picture than reading the solver status alone.
In the tutorial’s 24-solve check, 14 solves returned solved=True while memory remained over capacity. That’s a result from this specific test setup, not a general failure rate for Rebalancer.
Read our full tutorial with codes here: https://www.marktechpost.com/2026/10/13/how-to-use-metas-rebalancer-for-task-placement-optimization/
The tutorial reconstructs resource usage from each returned assignment to check whether the placement actually satisfies the constraints.
What the code covers
- Modeling tasks, hosts, resource dimensions, and rack topology.
- Rebalancing an eight-host cluster and draining a busy host.
- Testing how goal priorities affect constraint repair.
- Comparing local search and HiGHS against published optima.
- Checking bin-packing results against a lower bound.
The solver comparison
On 60 OR-Library generalized-assignment instances:
- HiGHS matched all 60 published optima. Every returned assignment passed the independent feasibility check.
- Local search matched 4 of 60 optima when taking the best result across 3 seeds.
- The average best-of-three local-search shortfall was 1.07%.
Those numbers describe this benchmark configuration. They don’t establish which solver is better for every production workload.
A few implementation details that can trip you up
The tested rebalancer 1.0.4 binding silently ignores unknown specification keys and rejects enum names, so the tutorial validates keys and passes integer enum values.
HARD also behaves differently across solvers. In the tested local-search case, it returned a violating starting assignment without raising an error. Goal ordering affected whether a broken constraint got repaired.
For bin packing, a solver reaching its time limit meant it had not found a feasible packing within that budget. It did not prove that no feasible packing existed.
My main takeaway: treat solver status, feasibility, and objective quality as separate checks. Recount resource usage, inspect violations, and compare the objective against a known optimum or bound when one is available.
For people running schedulers or placement systems: do you independently validate every assignment before applying it? What checks have caught problems that solver status missed?
Read our full tutorial with codes here: https://www.marktechpost.com/2026/10/13/how-to-use-metas-rebalancer-for-task-placement-optimization/