Ogni azienda, ingegnere o analista finanziario affronta quotidianamente lo stesso dilemma strategico: ottenere il massimo risultato possibile avendo a disposizione risorse rigorosamente limitate. Che si tratti di decidere quante ore assegnare a un macchinario, come distribuire un budget di marketing o quante unità di un prodotto fabbricare per minimizzare i costi operativi, la risposta non si trova andando per tentativi, ma applicando un rigoroso metodo matematico: la Programmazione Lineare (PL).
Parte fondamentale della programmazione matematica (o Ricerca Operativa), la PL è lo strumento di modellizzazione che permette di tradurre un problema decisionale complesso in un sistema di equazioni e disuguaglianze, guidando verso la combinazione produttiva perfetta.
INDICE
- 1 Le Regole del Gioco: Quando un Problema è “Lineare”?
- 2 Lo Schema Generale di Assegnazione
- 3 I Tre Pilastri del Modello Algebrico
- 4 Dal Testo alle Formule: Un Esempio Pratico di Minimizzazione
- 5 Geometria e Teorema del Vertice: Dove si nasconde l’Ottimo?
- 6 Il Ponte verso l’Algoritmo: Le Variabili di Scarto e di Surplus
- 7 Esplora l’Algebra Lineare
Le Regole del Gioco: Quando un Problema è “Lineare”?
Prima di scrivere qualsiasi formula, è essenziale capire se il problema reale che stiamo analizzando possiede i requisiti per essere trattato con la Programmazione Lineare. Un modello di PL si muove all’interno di un perimetro teorico basato su tre premesse fondamentali:
- Variabili Continue: Le incognite del problema contano quantità che possono assumere qualsiasi valore reale, inclusi i decimali (come litri di carburante, ore lavorative o budget). Se il problema impone come risultato solo numeri interi non divisibili (come il numero di macchinari da acquistare), si entra nel campo della programmazione intera.
- Proporzionalità e Additività (Linearità): Non esistono economie di scala, sconti sulle quantità o rendimenti crescenti. Se produrre un oggetto richiede 2 ore e costa 10€, produrne dieci richiederà esattamente 20 ore e costerà 100€. Inoltre, il consumo totale di una risorsa è semplicemente la somma dei consumi delle singole attività.
- Certezza Statica (Determinismo): Il problema viene fotografato in un preciso arco temporale e tutti i dati — costi orari, prezzi, disponibilità — sono noti a priori con assoluta certezza, senza variazioni probabilistiche.
Lo Schema Generale di Assegnazione
Per trasformare un processo aziendale in un modello matematico, il primo passo consiste nell’organizzare le informazioni in una matrice chiara e strutturata, nota come schema generale di assegnazione.
Immaginiamo una fabbrica che può realizzare $n$ differenti prodotti (le nostre incognite $x_1, x_2, \dots, x_n$), assorbendo capacità da $m$ differenti risorse o macchinari. Ogni singolo incrocio della tabella racconta un pezzo del nostro processo produttivo:
| Risorse / Prodotti | Prodotto 1 (x1) | Prodotto 2 (x2) | … | Prodotto n (xn) | Disponibilità / Limite (bi) |
| Risorsa 1 (es. Ore Lavoro) | $a_{11}$ | $a_{12}$ | … | $a_{1n}$ | $b_1$ |
| Risorsa 2 (es. Ore Macchina) | $a_{21}$ | $a_{22}$ | … | $a_{2n}$ | $b_2$ |
| … | … | … | … | … | … |
| Risorsa $m$ (es. Materia Prima) | $a_{m1}$ | $a_{m2}$ | … | $a_{mn}$ | $b_m$ |
| Peso Economico ($c_j$) | $c_1$ | $c_2$ | … | $c_n$ | — |
Come si legge questa tabella?
- Il coefficiente $a_{ij}$ rappresenta il coefficiente tecnico, ossia la quantità della risorsa $i$ necessaria per fabbricare una singola unità del prodotto $j$.
- Il valore $b_i$ è il termine noto, cioè il tetto massimo di disponibilità (nel caso di un vincolo di capacità $\le$) o la quota minima da soddisfare (nel caso di un vincolo di domanda $\ge$).
- Il valore $c_j$ indica il peso economico (costo, profitto o ricavo) associato a una singola unità di prodotto realizzata.
I Tre Pilastri del Modello Algebrico
Una volta completata la tabella di assegnazione, tradurre il problema nel linguaggio dell’algebra lineare richiede la formalizzazione di tre blocchi strutturali:
1. Le Variabili Decisionali
Il vettore delle incognite $\bar{x} = [x_1, x_2, \dots, x_n]$ rappresenta le leve operative che abbiamo in mano. Risolvere il problema significa determinare esattamente quale numero sostituire a ciascuna di queste variabili per ottenere il successo aziendale.
2. La Funzione Obiettivo (FO)
È la bussola matematica del modello. Esprime lo scopo della nostra analisi come una combinazione lineare delle variabili decisionali moltiplicate per i rispettivi pesi economici:
$$\min Z = \sum_{j=1}^{n} c_j \cdot x_j \quad \text{oppure in forma matriciale:} \quad \min Z = \bar{c} \cdot \bar{x}$$
(Nota: se l’obiettivo è massimizzare un utile o un ricavo, la formula si imposta come $\max Z$).
3. Il Sistema dei Vincoli
Le risorse finite e i contratti di vendita impongono confini precisi alla produzione. Per ciascuna delle $m$ risorse scriviamo una disuguaglianza lineare:
$$\sum_{j=1}^{n} a_{ij} x_j \le b_i \quad \text{(oppure } \ge b_i \text{ per i vincoli di fabbisogno)}$$
In forma matriciale, indicando con $A$ la matrice dei coefficienti tecnologici, il sistema si riassume in: $A \cdot \bar{x} \le \bar{b}$.
A queste disequazioni tecniche si aggiungono sempre i vincoli di non negatività:
$$x_1 \ge 0, \quad x_2 \ge 0, \quad \dots, \quad x_n \ge 0$$
In economia non si possono fabbricare quantità negative di beni; bloccare le variabili nel quadrante positivo del piano cartesiano è un requisito logico inderogabile.
Dal Testo alle Formule: Un Esempio Pratico di Minimizzazione
Per vedere come questi tre pilastri prendono vita quando l’obiettivo è minimizzare i costi di produzione, analizziamo un caso industriale concreto basato sull’assorbimento di ore lavoro e ore macchina.
Il Caso della Minimizzazione Lavoro-Macchina
Un reparto industriale produce due beni, A e B, combinando lavoro manuale e lavorazione automatizzata.
- Il costo del lavoro è di 15€/ora, mentre il costo di utilizzo dei macchinari è di 8€/ora.
- Per fabbricare una unità del bene A servono 3 ore lavoro e 5 ore macchina.
- Per fabbricare una unità del bene B servono 6 ore lavoro e 2 ore macchina.
- Il reparto ha una capacità giornaliera massima di 150 ore lavoro e 100 ore macchina.
- Per rispettare gli impegni contrattuali con i clienti, l’azienda deve obbligatoriamente produrre almeno 14 unità totali al giorno tra i beni A e B.
Come si formalizza il modello per minimizzare il costo totale giornaliero?
Costruiamo il modello passo dopo passo:
1. Identificazione delle Variabili e Calcolo dei Costi Unitari
Associamo ai beni le nostre incognite:
- $x_1$: Quantità prodotta del bene A.
- $x_2$: Quantità prodotta del bene B.
Prima di impostare la funzione obiettivo, calcoliamo il costo unitario effettivo ($c_j$) di ciascun bene sommando le spese di manodopera e di macchinario:
- Costo unitario Bene A ($c_1$): $(3 \text{ ore} \times 15\text{€}) + (5 \text{ ore} \times 8\text{€}) = 45\text{€} + 40\text{€} = \mathbf{85\text{€}}$
- Costo unitario Bene B ($c_2$): $(6 \text{ ore} \times 15\text{€}) + (2 \text{ ore} \times 8\text{€}) = 90\text{€} + 16\text{€} = \mathbf{106\text{€}}$
2. Costruzione della Tabella di Assegnazione
Organizziamo i dati tecnici, le capacità e il vincolo di domanda nella tabella riassuntiva:
| Risorse / Parametri | Bene A (x1) | Bene B (x2) | Simbolo | Limite / Obbligo (bi) |
| Ore Lavoro (impiego unitario) | 3 | 6 | $\le$ | 150 (capacità max) |
| Ore Macchina (impiego unitario) | 5 | 2 | $\le$ | 100 (capacità max) |
| Commesse Clienti (produzione minima) | 1 | 1 | $\ge$ | 14 (obbligo min) |
| Costo Unitario ($c_j$) | 85€ | 106€ | — | — |
3. Il Modello Matematico Finale
Unendo i costi calcolati, i tetti massimi delle ore disponibili e l’obbligo di produzione minima, otteniamo il sistema lineare formale:
$$\min Z = 85x_1 + 106x_2$$
$$\text{s.t.} \quad 3x_1 + 6x_2 \le 150 \quad \text{(vincolo ore lavoro)}$$
$$\quad 5x_1 + 2x_2 \le 100 \quad \text{(vincolo ore macchina)}$$ \\quad x_1 + x_2 \ge 14 \quad \text{(vincolo domanda contrattuale)} \\ \quad x_1 \ge 0, \quad x_2 \ge 0 \quad \text{(non negatività)}$$
L’inserimento del vincolo di domanda ($x_1 + x_2 \ge 14$) è il dettaglio chiave che rende il problema di minimizzazione operativamente valido: senza questo obbligo, la matematica suggerirebbe la soluzione banale di non produrre nulla ($x_1 = 0, x_2 = 0$) per azzerare i costi!
Geometria e Teorema del Vertice: Dove si nasconde l’Ottimo?
Se provassimo a disegnare su un grafico l’insieme di tutti i punti che rispettano contemporaneamente i vincoli tecnologici, la domanda minima e le condizioni di non negatività, otterremmo una figura geometrica detta regione delle soluzioni ammissibili.
Per le proprietà matematiche delle equazioni lineari, questa regione assume sempre la forma di un insieme convesso: in due dimensioni è un poligono, mentre in più dimensioni diventa un poliedro. La caratteristica chiave di un insieme convesso è che non presenta “buchi” o rientranze: unendo due punti qualsiasi al suo interno con un segmento, l’intero segmento rimarrà dentro la figura.
Di fronte a un poliedro composto da infiniti punti ammissibili, potremmo pensare che trovare quello ottimale sia un’impresa impossibile. Qui interviene una delle scoperte più importanti della matematica applicata, il Teorema del Vertice:
Dato un problema di programmazione lineare, se esiste una soluzione ottima unica e di valore finito, essa si trova sempre in corrispondenza di uno dei vertici (punti estremi) della regione delle soluzioni ammissibili.
Questo teorema riduce drasticamente il nostro lavoro: per trovare la strategia di costo minima non dobbiamo setacciare gli infiniti punti all’interno del poliedro, ma ci basta controllare esclusivamente i suoi “angoli”!
Il Ponte verso l’Algoritmo: Le Variabili di Scarto e di Surplus
Il Teorema del Vertice ci indica dove guardare, ma per calcolare algebricamente le coordinate dei vertici dobbiamo superare un ostacolo formale: i nostri vincoli sono scritti come disequazioni ($\le$ e $\ge$). L’algebra classica, tuttavia, lavora con le equazioni ($=$).
Per pareggiare i conti, introduciamo nel sistema delle nuove incognite ausiliarie, che si dividono in due categorie a seconda del verso della disuguaglianza:
- Variabili di Scarto (Slack Variables): Si sommano ($+s_i$) nei vincoli del tipo $\le$ per misurare la quota di risorsa rimasta inutilizzata (es. le ore macchina avanzate).
- Variabili di Surplus (o Eccedenza): Si sottraggono ($-e_i$) nei vincoli del tipo $\ge$ per misurare di quanto abbiamo superato la soglia minima richiesta (es. i beni prodotti in più rispetto alle 14 unità contrattuali).
Il sistema si trasforma così in un insieme di $m$ equazioni lineari con $n+m$ incognite totali. Poiché il numero di incognite supera quello delle equazioni, il sistema è indefinito e possiede infinite soluzioni. Per isolare un singolo vertice (che in algebra prende il nome di soluzione di base), basta scegliere di “spegnere” (porre uguali a zero) un numero di incognite pari alla differenza tra variabili ed equazioni ($n$), e risolvere il sistema quadrato nelle rimanenti $m$ variabili (che diventano le variabili in base). Se il risultato ottenuto non contiene numeri negativi, abbiamo trovato una soluzione di base ammissibile, cioè le coordinate esatte di uno dei vertici del nostro poliedro.
Con decine o centinaia di variabili industriali, calcolare tutte le combinazioni possibili richiede una formula combinatoria precisa:
$$C_{n+m, m} = \frac{(n+m)!}{m! \cdot n!}$$
Esplorarle tutte richiederebbe un tempo di calcolo impraticabile persino per i computer moderni. È proprio per aggirare questo scoglio combinatorio che interviene il geniale metodo inventato da George Dantzig nel 1947: un algoritmo capace di esplorare i vertici muovendosi esclusivamente lungo i percorsi in discesa verso il costo minimo, ignorando a priori le combinazioni inutili. Per scoprire come funziona questo motore algebrico e imparare a guidarlo passo dopo passo nelle procedure di minimizzazione e massimizzazione, ti invitiamo a leggere la nostra guida al calcolo:
[La Teoria Generale del Metodo del Simplesso: Logica e Algebra dell’Ottimizzazione].
Esplora l’Algebra Lineare
Vuoi padroneggiare la matematica che si nasconde dietro questi modelli? Il cuore della programmazione lineare è fatto di vettori, matrici e sistemi di equazioni. Con il Corso di Algebra Lineare impari a manipolare matrici, applicare il metodo di Gauss e risolvere sistemi complessi passo dopo passo, con teoria chiara ed esercizi pratici svolti.
visita il canale YouTube