
Contenuto: l’articolo spiega cos’è la Ricerca Operativa, come modellare un problema di ottimizzazione, come utilizzare il Risolutore di Excel, le differenze tra problemi lineari, non lineari e complessi, applicazioni pratiche in ambito aziendale.
Attività pratiche: mostrano concretamente come impostare e risolvere tre diverse tipologie di problemi reali utilizzando il Risolutore di Excel.
La ricerca operativa (RO) è una disciplina che utilizza modelli matematici, statistici e algoritmi per supportare le decisioni aziendali. Il suo obiettivo è individuare la soluzione migliore (ottima) a un problema complesso, nel rispetto di determinati vincoli.
Alla base di molti problemi di ricerca operativa troviamo tre elementi fondamentali:
- Variabili decisionali: le quantità che il decisore può controllare.
- Funzione obiettivo: ciò che si vuole massimizzare o minimizzare (profitto, costo, tempo, rendimento, ecc.).
- Vincoli: limitazioni di risorse, capacità, budget, tempo o requisiti tecnici.

Uno degli strumenti più accessibili per applicare la ricerca operativa in ambito aziendale è il Risolutore di Microsoft Excel (Solver), un componente aggiuntivo che consente di risolvere problemi di massimizzazione e minimizzazione in modo intuitivo.
Excel diventa così un laboratorio di ottimizzazione, adatto sia per la didattica sia per applicazioni operative in azienda.
Alcune tipologie di problemi che si possono affrontare con il Risolutore di Excel sono:
- Massimizzazione e Minimizzazione
- Allocazione delle Risorse
- Programmazione Lineare e Non Lineare
- Pianificazione e Scheduling
- Miscelazione e Dosaggio
- Routing e Logistica
- Equilibrio Finanziario
Come funziona il Risolutore di Excel
Per verificare se è già disponibile, apri Excel e vai nella scheda Dati della barra multifunzione: all’estrema destra dovrebbe comparire il pulsante Risolutore. Se non lo vedi, significa che il componente aggiuntivo non è ancora attivato.
Per aggiungerlo seleziona Componenti aggiuntivi tra gli strumenti, spunta la casella Risolutore (Solver Add-in) e premi OK. Dopo l’attivazione, tornando nella scheda Dati, troverai il pulsante Risolutore pronto per essere utilizzato.

Lo strumento permette di:
1. Definire una cella obiettivo (da massimizzare, minimizzare o portare a un valore specifico).
2. Selezionare le celle variabili (variabili decisionali).
3. Impostare i vincoli.
4. Scegliere il metodo di risoluzione:
- Simplex LP → per problemi lineari.
- GRG Non Lineare → per problemi non lineari continui
- Evolutionary → per problemi non lineari complessi o non differenziabili.
Tipi di problemi risolvibili
Il metodo Simplex LP risolve problemi di Programmazione Lineare dove la funzione obiettivo e i vincoli sono espressioni lineari e non c’è alcuna interazione non lineare tra le variabili. In questo caso il problema può essere risolto con il metodo del Simplesso.
- Il metodo del Simplesso è un algoritmo che cerca la soluzione ottima muovendosi tra i vertici del poliedro definito dai vincoli lineari. Partendo da un vertice iniziale ammissibile, il metodo valuta quali vertici adiacenti portano a un miglioramento della funzione obiettivo e si sposta di vertice in vertice seguendo la direzione che aumenta (o diminuisce, se si minimizza) il valore della funzione, continuando fino a raggiungere un vertice in cui nessun movimento verso un vertice adiacente può migliorare ulteriormente la soluzione, identificando così l’ottimo globale.
Il metodo GRG (Generalized Reduced Gradient) è adatto per gestire funzioni obiettivo non lineari e vincoli di uguaglianza non lineari, ma richiede funzioni continue e derivabili.
- Il metodo Generalized Reduced Gradient (GRG) si basa sul concetto di gradiente, cioè il vettore che indica la direzione di massima crescita (o diminuzione) di una funzione. In un problema non lineare con vincoli, non ci si può muovere liberamente nella direzione del gradiente “normale” perché si rischierebbe di violare i vincoli; per questo il GRG calcola un gradiente ridotto, ossia una direzione di miglioramento che è compatibile con i vincoli, e si muove lungo quella direzione finché trova un punto in cui il gradiente ridotto si annulla, segnalando che non esistono ulteriori miglioramenti ammissibili.
Il metodo Evolutionary risolve problemi che: non richiedono derivabilità, prevedono variabili intere e funzioni logiche. E’ adatto per problemi con soglie, premi, condizioni e funzioni non lisce e utilizza un algoritmo genetico.
- Un algoritmo genetico è un metodo di ottimizzazione che imita il processo evolutivo naturale generando inizialmente un insieme di soluzioni possibili, valutandone la qualità tramite una funzione obiettivo e poi migliorandole progressivamente attraverso meccanismi ispirati alla selezione naturale, come selezione delle soluzioni migliori, combinazione delle loro caratteristiche (crossover) e piccole modifiche casuali (mutazione), fino a far emergere dopo varie iterazioni una soluzione sempre più adatta al problema da risolvere.
Attività pratica n.1 - Problema non lineare
Si deve produrre il contenitore (scatola) per un prodotto. Il volume del contenitore deve essere di 75 cm3. La larghezza deve essere il doppio della profondità. La superficie esterna deve essere smaltata. Determinare le dimensioni del contenitore in modo da minimizzare la superficie esterna.

Impostiamo il foglio con dei dati iniziali ipotetici (celle in giallo) e le formule:

I parametri del risolutore sono i seguenti:
- Obiettivo: superficie minima
- Celle variabili: altezza e profondità
- Vincoli: il volume deve essere uguale a 75


Il problema è non lineare perché il vincolo di volume contiene un prodotto di variabili e anche la funzione obiettivo contiene termini quadratici. La soluzione trovata mediante algoritmo non lineare è la seguente:

Attività pratica n. 2 - Problema lineare
Un negozio vende tre tipi di droni (drone 1, drone 2, drone 3). Questi droni hanno un profitto unitario differente (100€, 400€, 50€). Questi droni, però, hanno anche un costo diverso (320 €, 1500 €, 50 €), inoltre occupano unità di spazio diverse in magazzino (0,5 uds, 1 uds, 0,2 uds).
Ipotizziamo d’avere 100.000€ disponibili per effettuare un ordine dal nostro fornitore, e 256 unità di spazio disponibili in magazzino. Quali e quanti droni ordinare per massimizzare il mio profitto?
Per poterli comprare abbiamo due vincoli: (1) il costo e (2) lo spazio. Sono dati che costituiscono delle limitazioni: noi possiamo fare quello che vogliamo, ma limitatamente.
Impostiamo il foglio con dei dati iniziali ipotetici (celle in giallo) e le formule:

I parametri del risolutore sono i seguenti:
- Obiettivo: profitto totale massimo
- Celle variabili: quantità acquistate dei tre droni
- Vincoli:
- le quantità acquistate devono essere numeri interi positivi
- il costo totale deve essere minore di 100.000
- lo spazio occupato deve essere minore di 256


Questo è un problema di programmazione lineare (PL) perché sia la funzione obiettivo sia tutti i vincoli sono espressioni lineari delle variabili decisionali. Scegliamo il metodo di risoluzione lineare e impostiamo il rispetto dei vincoli sugli interi nelle opzioni (togliendo il flag a “Ignora vincoli sugli interi”).
La soluzione trovata è la seguente:

Attività pratica n. 3 - Problema complesso
Un’azienda produce due prodotti: A e B. Il profitto unitario per il prodotto A è di 30 € mentre per il prodotto B è di 50€. La lavorazione del prodotto A richiede 2 ore mentre quella del prodotto B richiede 5 ore. La domanda massima per i due prodotti è rispettivamente di 80 e 40 unità. Inoltre, se produciamo meno di 20 unità di B, perdiamo un bonus commerciale di 500 €.
Impostiamo il foglio con dei dati iniziali ipotetici (celle in giallo) e le formule:

I parametri del risolutore sono i seguenti:
- Obiettivo: profitto totale massimo
- Celle variabili: quantità prodotte
- Vincoli:
- le quantità prodotte devono essere numeri interi positivi
- produzione massima prodotto A 80 unità e prodotto B 40 unità
- le ore totali impiegate massime 20


E’ evidentemente un problema non differenziabile, con variabili intere e funzione obiettivo a soglia (presenza della funzione SE).
La soluzione trovata, dopo alcune iterazioni, è la seguente:

Indice
