Mensile · dati aperti Rivista di ottimizzazione applicata RSS ↗
Caso N. 003·Vita quotidiana

La spesa ottima

Quanto costa davvero mangiare bene? Lo abbiamo chiesto a un modello di programmazione lineare, come fece Stigler nel 1945.

Lorenzo 10 luglio 2026 6 min di lettura
Metodo
Programmazione lineare (LP)
Strumenti
Python, PuLP, pandas
Risultato
−31% — sul costo settimanale della spesa

Nel 1945 l’economista George Stigler si pose una domanda semplice e leggermente disperata: qual è la spesa minima che tiene in vita un uomo adulto, rispettando tutti i fabbisogni nutrizionali noti? Non esisteva ancora il simplesso: Stigler risolse “a occhio e buon senso” tra 77 alimenti, e arrivò a 39,93 dollari l’anno. Due anni dopo, il metodo del simplesso di Dantzig confermò che il suo errore era di pochi centesimi.1

Il diet problem è diventato l’esercizio numero uno di ogni corso di ottimizzazione — e quasi sempre resta lì, un giocattolo da aula. Ma la domanda di Stigler è tornata attualissima: con l’inflazione alimentare degli ultimi anni, quanto costa davvero mangiare in modo corretto in Italia? E quanto del nostro carrello è abitudine, non necessità?

01Il problema

Vogliamo comporre la spesa settimanale di un adulto che:

  • copra i fabbisogni dei LARN (Livelli di Assunzione di Riferimento per Nutrienti) della Società Italiana di Nutrizione Umana: energia, proteine, fibre, calcio, ferro, vitamina C e altri — 14 vincoli in tutto;
  • costi il meno possibile ai prezzi correnti;
  • resti mangiabile: nessun alimento può superare una quota massima delle calorie totali, perché la soluzione “solo avena e latte in polvere” è ottima sulla carta e immangiabile nella vita.

Il confronto è con il carrello medio di un adulto ricavato dalle statistiche sui consumi delle famiglie, che ai prezzi usati qui vale 62,40 € a settimana.

02I dati

Servono tre tabelle, tutte pubbliche:

  1. Prezzi al dettaglio — medie nazionali per 22 alimenti di base (pasta, pane, latte, uova, legumi, ortaggi, frutta, carni, pesce azzurro, olio EVO…), dall’Osservaprezzi del MIMIT e dai prezzi al consumo ISTAT.
  2. Composizione nutrizionale — per 100 g di ciascun alimento, dalle tabelle CREA di composizione degli alimenti.
  3. Fabbisogni LARN — per un adulto di riferimento: 2.000 kcal, 50 g di proteine, 25 g di fibre, 1.000 mg di calcio, e così via.

I prezzi riportati in questo numero sono medie esemplificative assemblate per la dimostrazione: servono a mostrare il metodo. Il notebook allegato scarica i dati aggiornati dalle fonti citate, e i numeri cambiano — poco — con essi.

03Il modello

La formulazione è quella classica. Per ogni alimento i la variabile xi è la quantità acquistata in ettogrammi a settimana:

min   Σi ci · xi
  t.c.   Σi ani · xi ≥ bn    per ogni nutriente n
         ei · xi ≤ β · E      per ogni alimento i
         xi ≥ 0

dove ci è il prezzo, ani il contenuto del nutriente n, bn il fabbisogno settimanale, ei le calorie dell’alimento ed E le calorie totali. Il parametro β è il vincolo di varietà: il tetto massimo di calorie che un singolo alimento può coprire. È la manopola che separa la matematica dalla cucina.

04La soluzione

In PuLP il modello sta in una ventina di righe:

import pulp

m = pulp.LpProblem("dieta_ottima", pulp.LpMinimize)
x = {i: pulp.LpVariable(i, lowBound=0) for i in alimenti}

# obiettivo: costo della spesa settimanale
m += pulp.lpSum(prezzo[i] * x[i] for i in alimenti)

# fabbisogni LARN (settimanali)
for n in nutrienti:
    m += pulp.lpSum(contenuto[n][i] * x[i] for i in alimenti) >= fabbisogno[n]

# vincolo di varietà: nessun alimento oltre il 25% delle calorie
for i in alimenti:
    m += kcal[i] * x[i] <= 0.25 * kcal_totali

m.solve()

Con β al 25% la spesa ottima costa 43,10 € a settimana: tutti e 14 i vincoli nutrizionali sono rispettati, nessun alimento domina il piatto.

Carrello medio62,40 €a settimana, per adulto
Spesa ottima43,10 €stessi fabbisogni LARN
Risparmio−31%19,30 € a settimana
Vincoli rispettati14/14energia, macro e micro

Dove finiscono i soldi? Il modello ridisegna il carrello: giù la carne, su legumi e cereali. La verdura resta — ma cambia composizione, verso gli ortaggi con il miglior rapporto nutrienti/prezzo.

Il carrello, prima e dopo

Spesa settimanale per gruppo alimentare, in euro

Carrello medioSpesa ottima
0,05,010,015,020,0 €Cereali e pane12,4Carne e pesce7,5Latticini e uova6,4Verdura6,2Frutta4,6Legumi4,1Altro1,9
Vedi i dati in tabella (€)
Carrello medioSpesa ottima
Cereali e pane9,812,4
Carne e pesce18,67,5
Latticini e uova10,26,4
Verdura8,46,2
Frutta7,94,6
Legumi1,24,1
Altro6,31,9

Il vincolo di varietà (β = 25%) impedisce le soluzioni monotone alla Stigler.

Elaborazione su dati MIMIT Osservaprezzi e ISTAT (prezzi esemplificativi)

E che cosa si mangia, in concreto? Questa è la dieta ottima in grammi al giorno — riconoscibilmente mediterranea, senza che nessuno l’abbia chiesto al modello:

La dieta ottima nel piatto

Grammi al giorno per alimento (primi 12)

0100200300 gLatte250Mele180Pane integrale150Pomodori150Yogurt125Arance120Pasta120Verdure a foglia100Carote80Fagioli secchi60Pollo60Pesce azzurro40
Vedi i dati in tabella (g)
Dieta ottima
Latte250
Mele180
Pane integrale150
Pomodori150
Yogurt125
Arance120
Pasta120
Verdure a foglia100
Carote80
Fagioli secchi60
Pollo60
Pesce azzurro40

Soluzione del modello LP con dati CREA e prezzi esemplificativi

05Il prezzo della varietà

La parte più interessante non è il minimo, ma la sua sensibilità. Stringendo β — cioè pretendendo una dieta sempre più varia — il costo sale, e il modello ci dice esattamente di quanto:

Quanto costa la varietà

Costo settimanale della dieta ottima al variare del tetto β per singolo alimento

354045505560 €40%35%30%25%20%15%10%57
Vedi i dati in tabella (€)
Costo ottimo
40%40
35%41
30%42
25%43
20%46
15%50
10%57

Sotto il 10% il problema diventa inammissibile con 22 alimenti: la varietà ha un limite fisico.

Analisi di sensibilità sul modello LP

Fra il 40% e il 25% la varietà costa pochi euro. Sotto il 20% ogni punto di β si paga caro: i vincoli nutrizionali costringono il modello verso alimenti sempre meno efficienti. A un certo punto il problema diventa inammissibile: con 22 alimenti non esiste una dieta in cui nessuno superi il 10% delle calorie.

La lezione di ottimizzazione del mese: il valore di un vincolo si misura in euro. Il prezzo-ombra della varietà è quasi zero finché è ragionevole, ed esplode quando diventa ideologia.

06Quanto si risparmia, e i limiti

19,30 € a settimana sono circa 1.000 € l’anno a persona: non è un dettaglio. Ma il numero va maneggiato con onestà:

  • il carrello medio include gusti, marche e comodità che il modello ignora di proposito: il risparmio “vero” per una famiglia reale sta fra il 10% e il 20%, non al 31%;
  • i prezzi medi nazionali nascondono forti differenze territoriali — l’ISTAT pubblica gli indici per capoluogo, e rifare il conto per la propria città è l’esercizio perfetto per il lettore;
  • una dieta è anche cultura e piacere: il modello propone, la tavola dispone.

Il notebook completo, con i dati e il codice per riprodurre ogni figura, è nella cartella del numero. Se lo rifate con i prezzi della vostra città, scriveteci: pubblichiamo i confronti nel prossimo numero.


  1. G. J. Stigler, The Cost of Subsistence, Journal of Farm Economics, 1945. La soluzione esatta arrivò nel 1947 con il metodo del simplesso, usando una delle prime applicazioni documentate: nove impiegati per 120 giorni-uomo di calcoli.