VN2 inventory competition

In 2025, I organized VN2, the first public inventory planning competition. Over 180 participants placed six weekly orders for 599 store-product combinations, on real retail data. Download the data and the official simulator, and test your inventory policy against the winners.

Sponsors: Flieber, Daybreak and SupChains. Platform: DataSource.ai.

  • 599 store-product combinations
  • 20,000€ in prizes
  • 13.2% lower cost than the benchmark, for the winner

The task: Place six weekly orders that minimize holding and shortage costs.

The data comes from an anonymous retailer, with 297 products in 67 stores. That makes 599 store-product combinations. Competitors received 157 weeks of sales, from April 2021 to April 2024.

Each week, competitors ordered from the central warehouse. An order takes two weeks to arrive, and a sale missed for lack of stock is lost. The supplier has no capacity limit.

Most products ran out of stock in the past. Each week, a flag says whether the store had stock left at the end of the week. As the data is real, some flags may be wrong.

  1. 29 September 2025

    The data

    Competitors received the sales history, the stock flags and the product hierarchy.

  2. 21 October to 5 November 2025

    Six rounds

    One order every two or three days. After each round, competitors received the new week of sales and their own inventory.

  3. 4 December 2025

    The webinar

    The top 5 explained their models.

    Watch it

The cost that ranked the participants

0.2€ × units left + 1€ × sales lost

Each unit left on the shelf at the end of a week costs 0.2€. Each sale lost for lack of stock costs 1€. Goods in transit cost nothing.

The score is the cost of weeks 3 to 8. Weeks 1 and 2 cost every player 913.8€, as no order made by the participants could impact them.

Judging an inventory policy is harder than judging a forecast. The only way is to see which policy results in the lowest total cost over time.

The code
start = end_inventory + arriving_this_week
sales = min(start, demand)
lost = demand - sales
end_inventory = start - sales
cost = 0.2 * end_inventory + 1.0 * lost

How the simulation works

An example with one product, ordered with the benchmark policy

End of week 8. The score of this product, the cost of weeks 3 to 8, is 12.8€.

One product ordered with the benchmark policy: the eight weeks of VN2
WeekOrder placed at the start of the weekStarting inventoryReceiptsDemandLost salesEnding inventoryHolding costShortage costScore, weeks 3 to 8
1 (not scored)23705020.4€0€–
2 (not scored)42+58100€1€–
350+2340193.8€0€3.8€
4119+4100132.6€0€6.4€
5613+511071.4€0€7.8€
6157+110200€2€9.8€
7–0+67100€1€10.8€
8–0+1550102€0€12.8€

Only 25 of 180 beat the benchmark

The cost of weeks 3 to 8 of the top 5 and of the benchmark. Lower is better.
Final rankingCost, weeks 3 to 8
1stBartosz Szabłowski3,763€
2ndMatias Alvo3,765€
3rdPhilip Stubbs and Jakub Figura3,792€
4thCarlo Cavalieri3,794€
5thRuben van de Geer, Diederik Perdok and Simon Grest3,824€
26thBenchmark4,334€

The benchmark is a 13-week moving average with seasonal weights. It orders up to 4 weeks of forecast and takes 55 lines of Python. Only 25 of the 180 participants beat it, and most end-to-end models did not.

The benchmark wasn't optimized, and its 4-week coverage was too long. With 3.5 weeks, it would have scored about 3,900€, the sixth place.

The top 5 explain their models

Webinar, December 2025

What the winners did

After the competition, I interviewed the top 20 about their methods.

  • Each of them tested and tuned their policy on the past, by simulation.
  • They projected their inventory to the week the order arrives, with the shortages expected before it.
  • Mean forecasts and probabilistic forecasts both reached the top 5. LightGBM and CatBoost led the forecasts.
  • The second place used reinforcement learning to place the orders.
  • No participant using DDMRP, ABC segmentation or demand-pattern classes beat the benchmark.

At SupChains, we set inventory targets the same way, by simulation on real demand and real forecasts.

Try it yourself

You can replay the six rounds on your own and score your orders with the official simulator.

  1. Write your policy. One Python function receives the sales, the stock flags and your inventory. It returns 599 orders.
  2. Play the six rounds. vn2_play.py calls your function before each week, with only the data known that week. Then it prints your cost, week by week.
  3. Compare. The benchmark scores 4,334€. The winner scored 3,763€.
What the zip holds
Week 0 - Sales.csvUnits sold per week, April 2021 to April 2024
Week 0 - In Stock.csvThe stock flag of each week
Week 0 - Master.csvThe product and store hierarchy
Week 0 - Initial State.csvThe stock and the orders on the road before week 1
Week 1 to 8 - Sales.csvOne more week of sales per round
vn2_play.pyPlays your policy for the six rounds
vn2_simulate.pyThe official rules; scores six order files
vn2_benchmark.pyThe benchmark, 4,334€
README.mdThe rules, the data and the score
How to cite VN2. The data is free to use. When you use it, please cite the competition.

Vandeput, N. (2025). VN2 Inventory Planning Challenge. Organized by Nicolas Vandeput (SupChains). Sponsored by Flieber, Daybreak and SupChains. https://supchains.com/vn2-inventory-competition/

BibTeX

@misc{vandeput2025vn2,
  author       = {Vandeput, Nicolas},
  title        = {{VN2} Inventory Planning Challenge},
  year         = {2025},
  howpublished = {\url{https://supchains.com/vn2-inventory-competition/}},
  note         = {Organized by Nicolas Vandeput (SupChains). Sponsored by Flieber, Daybreak and SupChains.}
}

The original competition pages stay online on DataSource.ai.

Nicolas Vandeput speaking on stage

Free chapters of our latest book

You also get the SupChains Way, then one lesson every two weeks.