Open the box →
Poached eggs with avocado and toast, a dish from the quick band Roast vegetables, a dish from the moderate band Stracotto in a slow cooker, a dish from the long band

A handful of recipes, not a thousand.

230,064cards in the box
6pulled
812real people in the validation test

Choosing what to eat or prepare is a common part of everyday life. However, the decision can become more difficult when a person has to search through a very large number of options. Digital food platforms provide greater variety, but they also require users to compare many recipes before finding something suitable. This creates a practical need for a system that can reduce a large catalogue into a smaller and more relevant set of choices.

At most three recipes per preparation-time band.

A slice of toast just out of the toaster, a butter knife, a cracked eggshell.
Quick
15 minutes or lessat most three
A steel pan on the hob with onion softening, a wooden spatula beside it.
Fast
15 to 30 minutesat most three
A tray of chopped root vegetables and thyme, ready for the oven.
Moderate
30 to 60 minutesat most three
A cast-iron pot with its lid ajar and a slow curl of steam.
Long
Over an hourat most three

Every card carries how long it reportedly takes, and that files it behind one of four dividers. The rule is the only structure the optimiser is given.

Method detail

Digital food platforms give you everything. Choice overload is the idea that too many options make choosing harder — it is why this project exists, and it is not something this project measured.

A shortlist that ignores the dividers tends to collapse behind one of them: six fifteen-minute pastas, or six all-day braises. No price, no calories, no cuisine, no "diversity score" — each would need data the box doesn't hold, or would break the property in the programme that keeps the answers whole.

The four bands, 15 / 30 / 60 minutes, and the cap of three are fixed by the study's protocol and were not tuned to the result.

A blank index card with the Quick divider's coloured tab. A blank index card with the Fast divider's coloured tab. A blank index card with the Moderate divider's coloured tab. A blank index card with the Long divider's coloured tab.

Six recipes selected; the cap can exclude a high-scoring one.

move the rules in the box →

Method detail

Maximise match score: exactly six recipes, at most three per band.

That is the whole linear programme. Each x may sit anywhere between 0 and 1, and every one still comes out a whole card.

Method detail

The match score

A frozen text model (all-MiniLM-L6-v2) turns each card's name and ingredients into numbers. A person's taste is the average of the cards they rated 4 or 5 before the cutoff. A card's match score — pencilled in its corner — is how close it sits to that taste, on a 0–1 scale. It says "reads like things you liked." It does not say "you will enjoy this."

Why the answers stay whole

The dividers are disjoint, so the constraint matrix is totally unimodular and every vertex of the feasible region is integral. The programme never has to be told x is 0 or 1; the geometry makes it so. Add a price or a calorie constraint and that property breaks, which is why they are not here.

Feasibility first

The optimum lies at a vertex.

Drag the point. Every split between the two recipes scores less than the better whole one.

Method detail

You cannot draw 229,000 variables. So hold five of the six cards fixed and let two compete for the last slot: the weakest pick, A, and the best card that could take its place, B. The rule xA + xB = 1 is a straight line inside the unit square; a linear objective is best at one end of it. A whole card, never a split.

It is the same optimum the solver finds on the full problem, not a different one — the slice is a two-variable view of it, which is what the graphical method in the syllabus is for.

Optimality is certified by strong duality.

The programme that maximises match and its twin that minimises a price on each rule meet at the same value. A gap of zero is the certificate.

Method detail

Every linear programme has a dual that runs the other way. At the optimum the two are equal; strong duality. The dual also prices the dividers: β for a divider is how much match one extra slot behind it would buy. Not full: zero, the rule cost nothing. Full: the exact cost of variety, in match-score units. Not money, not effort, not psychology.

A popularity baseline outperformed the personalised method.

Validation test on 812 real people against ratings they had not yet made. The bar sits clear of "no difference": the gap is real, and it is not in our favour. The final run, on 530 people and 2018 ratings, came out the same way.

Method detail

Explore the method interactively.

Choose the person, move the two rules, and watch a high-scoring recipe be excluded by the cap.

Choice overload motivates the study; it is not a finding.

The idea that a smaller, well-spread set is easier to choose from is why shortlisting is worth studying. It is not something this project observed. No participant was recruited, no survey was run, no decision was timed for the record.

Method detail

It measures

  • Whether a shortlist retrieves recipes the person later rated highly
  • Ranking quality, and how far the shortlist spreads across dividers
  • Whether a valid shortlist exists at all, and how often it does not
  • How the answer moves when the shortlist length and the cap change

It does not measure

  • Choice overload, stress, regret or decision difficulty
  • Confidence, satisfaction, or how quickly anyone decides
  • Nutrition, diet quality, allergy safety or any health outcome
  • Anything about people in general, or about a live deployment
  • CompleteData audited and cleaned: 231,637 → 230,541 recipes; 1,132,367 → 1,126,591 ratings
  • CompleteScoring, the linear programme, the duality certificate, 188 automated tests
  • CompleteValidation-stage evaluation on 812 people, with bootstrap intervals and sensitivity sweeps
  • CompleteThe final run on 2018 labels: 530 people, approved under Decision D-022 (every eligible user, no 5,000 cap) and run once under a protocol frozen before the 2018 data was examined
  • PlannedA live study: recruited participants, randomised order, consent, ethics approval
Study type
Offline benchmark on existing public data. No participants, no surveys, no primary data collection.
Dataset
Food.com Recipes and Interactions, Kaggle, Shuyang Li, version 2. Licence: "Data files © Original Authors", which grants no redistribution rights. This site reproduces only about 1,300 recipe titles with their reported cooking times, to illustrate the study.
Reproducibility
Every run writes its configuration, data hashes, code revision, package versions and seeds. Every number here carries the run that produced it.
Contributions
Khushi owns the research question, theory, interpretation and writing. Rish owns the implementation and its documentation.

Image credits

The table, the divider scenes, the box and the other props are generated images (OpenAI GPT Image, via ChatGPT, September 2026), made for this page as atmosphere. None of them depicts any recipe in the study. Recipe photographs are Food.com's own, for the exact recipe shown, or none.

Status and future work

Both the validation stage and the final run on 2018 labels are complete. The final run matched the validation-stage finding: popularity beat the personalised method on both periods, independently. The live study — real people, randomised, consented — is the remaining future work, listed under Limits.