Skip to main content
Challenge

CRE Capital Stack Restructuring Linear Programming Engine

Debt-for-equity recapitalizations require optimizing investor recovery payouts across multi-tiered debt stacks. Build a capital stack solver using SciPy Optimize (Linprog) to compute optimal debt-for-equity conversion splits across Senior, Mezzanine, and Preferred Equity tranches. Calculate precise payout solutions in under 2 seconds.

Business OperationsHosted by Vera
Challenge brief

What you are building

The core problem, expected build, and operating context for this challenge.

Develop a linear programming capital stack optimizer using SciPy to minimize distress write-downs during real estate workouts.

Delivery guide

How work is evaluated

Evaluation

Evaluates linear solver correctness against ground-truth capital stack waterfall payouts.

Datasets

Challenge datasets

Public datasets, plus the private datasets you have access to.

Evaluation rubric

How submissions are scored

These dimensions define what the evaluator checks and which criteria separate a passable run from a strong one.

Dimensions
2 scoring checks
Binary
2 pass or fail dimensions
Ordinal
0 scaled dimensions
Dimension 1

Senior Priority Verification

Senior debt must be paid in full before Mezzanine receives funds

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Dimension 2

Payout Allocation Precision

Error in dollar allocation compared to closed-form waterfall solution • target: 0 • range: 0-1

Binary check

This dimension contributes its full weight only when the submission satisfies the requirement. Partial credit is not awarded.

Learning goals

What you should walk away with

  • Formulate capital stack waterfall priorities as linear inequality constraints

  • Implement SciPy `linprog` or `minimize` routines to optimize equity recovery allocations

  • Calculate tranche write-downs and equity ownership splits post-restructuring

  • Generate exportable capital stack workout distribution charts

Resources and assets

Reference links and supporting material

Dataset notes

Commercial property loan balances and restructuring settlement terms.

Challenge setup

Evaluates linear solver correctness against ground-truth capital stack waterfall payouts.

Challenge input

JSON with asset_value, senior_debt, mezz_debt, equity

SciPy Optimize

Solves constrained linear programming allocation problems

Evaluated output

JSON with senior_payout, mezz_payout, equity_payout, total_recovered

Evaluation checks
  • Senior debt must be paid in full before Mezzanine receives funds
  • Error in dollar allocation compared to closed-form waterfall solution • target: 0 • range: 0-1
Configured evaluation evidence
  • Benchmark: LinprogWaterfallBench
  • Payout Allocation Precision target: 0
  • 1 public reference case
Configured runtime
  • Python execution harness
  • Python sandbox (unavailable on Versalist)

Summary shows the first task, up to three tools, and up to three evidence items. Open the technical recipe to view all configured items.

View technical recipe

Configured tools

Action Space
  • TensorBoard · Required
  • Ax (Adaptive Experimentation) · Optional
  • Voiceflow · Optional

Evaluation contract

  • Senior Priority Verification · Weight 1
  • Payout Allocation Precision · Weight 1

Metrics

  • Payout Allocation Precision · Target 0

Benchmarks

  • LinprogWaterfallBench
  • general

Reference cases

  • 1 public reference case

Workflow tasks

  1. Task 1

    Input: JSON with asset_value, senior_debt, mezz_debt, equity

    Output: JSON with senior_payout, mezz_payout, equity_payout, total_recovered

    Execution harness: Python

Evaluation tools

  • SciPy Optimize · Optimization Engine

Recipe freeze marker

No recipe freeze time is recorded.

Frequently Asked Questions about CRE Capital Stack Restructuring Linear Programming Engine