Programmazione Lineare Multiobiettivo (PLM): Guida Completa a Risoluzione Grafica, Goal Programming e Metodo STEM

Cerca:

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Metodi per la programmazione multiobiettivo

La Programmazione Lineare Multiobiettivo (PLM) è un’estensione potente della classica Programmazione Lineare (PL). Mentre la PL si concentra sull’ottimizzazione di un singolo obiettivo (massimizzare il profitto o minimizzare i costi), la PLM affronta scenari decisionali più realistici in cui coesistono obiettivi multipli, spesso in conflitto tra loro. Questi obiettivi possono essere incommensurabili, ovvero non misurabili sulla stessa scala o con la stessa unità di misura, rendendo impossibile una semplice somma o sottrazione. La necessità della PLM emerge proprio dalla complessità del mondo reale, dove le decisioni raramente dipendono da un unico fattore.

1. Risoluzione Grafica: Soluzioni Ottime, Efficienti e Debolmente Efficienti

Per problemi con sole due variabili decisionali, la rappresentazione grafica è uno strumento incredibilmente intuitivo per visualizzare e comprendere la PLM. Ci permette di esplorare il concetto di soluzioni efficienti e il confine di Pareto.

Esempio Pratico: Azienda di Prodotti A e B

Immaginiamo un’azienda che produce due prodotti, A e B, e deve bilanciare profitto e impatto ambientale.

Obiettivi:

  • Profitto ([math]Z_1[/math]): Ogni unità di A rende 30€, ogni unità di B rende 20€. L’obiettivo è massimizzare [math]Z_1=30A+20B[/math].
  • Impatto Ambientale ([math]Z_2[/math]): Il prodotto A consuma più risorse. L’obiettivo è minimizzare l’impatto, che per comodità modellistica possiamo esprimere come massimizzare la riduzione dell’impatto: [math]Z_2=−10A−5B[/math]. Un valore più alto (meno negativo, o zero) di [math]Z_2[/math] significa un impatto minore.

Vincoli (Limiti di Produzione):

  • Tempo Macchina: [math]4A+2B \le 100[/math]
  • Materiale Disponibile: [math]A+B \le 40[/math]
  • Non Negatività: [math]A,B \ge 0[/math]

Risoluzione Grafica Passo-Passo

  1. Traccia il Poligono delle Soluzioni Ammissibili: Questa è l’area definita dall’intersezione di tutti i vincoli. Ogni punto all’interno o sui bordi di questo poligono rappresenta una combinazione fattibile di prodotti A e B.
    I vertici di questo poligono sono i punti chiave da considerare:

[math](0,0)[/math]: Origine

[math](25,0)[/math]: Intersezione [math]4A+2B=100[/math] con [math]B=0[/math]. ([math]4A \le 100 \implies A \le 25[/math]).

Questo rispetta anche [math]A+B \le 40 \implies 25+0 \le 40[/math].

[math](0,40)[/math]: Intersezione [math]A+B=40[/math] con [math]A=0[/math]. ([math]0+B \le 40 \implies B \le 40[/math]).

Questo rispetta anche [math]4A+2B \le 100 \implies 4(0)+2(40)=80 \le 100[/math].

[math](10,30)[/math]: Intersezione di [math]4A+2B=100[/math] e [math]A+B=40[/math].
Dalla seconda equazione: [math]B=40−A[/math].
Sostituisci nella prima: [math]4A+2(40−A)=100 \implies 4A+80−2A=100 \implies 2A=20 \implies A=10[/math].
Sostituisci [math]A=10[/math] in [math]B=40−A \implies B=40−10=30[/math].
Quindi, il vertice è [math](10,30)[/math].

I vertici del poligono delle soluzioni ammissibili sono: [math](0,0)[/math], [math](25,0)[/math], [math](10,30)[/math], [math](0,40)[/math].

Calcolo degli Obiettivi ai Vertici: Valutiamo [math]Z_1[/math] e [math]Z_2[/math] in ciascun vertice:

Vertice (A,B)[math]Z_1=30A+20B[/math] (Profitto)[math]Z_2=−10A−5B[/math] (Rid. Impatto)
(0,0)[math]30(0)+20(0)=0[/math][math]−10(0)−5(0)=0[/math]
(25,0)[math]30(25)+20(0)=750[/math][math]−10(25)−5(0)=−250[/math]
(10,30)[math]30(10)+20(30)=300+600=900[/math][math]−10(10)−5(30)=−100−150=−250[/math]
(0,40)[math]30(0)+20(40)=800[/math][math]−10(0)−5(40)=−200[/math]

Traccia le Isolinee per Ogni Obiettivo: Le isolinee sono linee che rappresentano valori costanti per ciascuna funzione obiettivo.

Per [math]Z_1=30A+20B[/math]: Le isolinee sono rette con pendenza [math]−30/20=−3/2[/math]. La direzione di miglioramento (massimizzazione) è verso l’alto e a destra.

Per [math]Z_2=−10A−5B[/math]: Le isolinee sono rette con pendenza [math]−(−10)/(−5)=−2[/math]. La direzione di miglioramento (massimizzazione) è verso l’alto e a destra (o in pratica, più vicina all’origine per minimizzare l’impatto).

Identifica il Confine di Pareto (Fronte Efficiente):

Il confine di Pareto (o frontiera di Pareto) è la porzione del poligono delle soluzioni ammissibili dove non è possibile migliorare un obiettivo senza peggiorarne almeno un altro. Rappresenta l’insieme delle soluzioni efficienti o Pareto-ottimali, ovvero i migliori compromessi possibili.

Per identificarlo, analizziamo i vertici del nostro poligono di soluzioni ammissibili e i segmenti che li connettono, considerando i valori degli obiettivi [math]Z_1[/math] (Profitto, da massimizzare) e [math]Z_2[/math] (Riduzione Impatto Ambientale, da massimizzare):

VerticeAB[math]Z_1 = 30A + 20B[/math][math]Z_2 = -10A - 5B[/math]
(0,0)0000
(25,0)250750-250
(10,30)1030900-250
(0,40)040800-200

Ora, valutiamo quali punti sono “dominati” e quali fanno parte della frontiera di Pareto:

Analisi del Vertice (25,0): Confrontando (25,0) con (10,30):

    • Per [math]Z_1[/math]: [math]900[/math] (a [math](10,30)[/math]) è maggiore di [math]750[/math] (a [math](25,0)[/math]).
    • Per [math]Z_2[/math]: [math]-250[/math] (a [math](10,30)[/math]) è uguale a [math]-250[/math] (a [math](25,0)[/math]).

Poiché [math](10,30)[/math] è migliore per [math]Z_1[/math] e uguale per [math]Z_2[/math] rispetto a [math](25,0)[/math], diciamo che [math](25,0)[/math] è **dominato** da [math](10,30)[/math]. Questo significa che [math](25,0)[/math] e qualsiasi punto sul segmento [math](25,0)-(10,30)[/math] (escluso [math](10,30)[/math] stesso) non fanno parte del confine di Pareto, perché esiste una soluzione migliore o uguale per tutti gli obiettivi e strettamente migliore per almeno uno.

Identificazione dei Segmenti Efficienti:

    • Segmento tra (0,0) e (0,40): Spostandosi da [math](0,0)[/math] a [math](0,40)[/math], il profitto [math]Z_1[/math] aumenta da [math]0[/math] a [math]800[/math], mentre l’impatto [math]Z_2[/math] peggiora da [math]0[/math] a [math]-200[/math]. Questo è un classico trade-off: miglioriamo un obiettivo sacrificandone un altro. Pertanto, il segmento [math](0,0)-(0,40)[/math] fa parte del confine di Pareto.
    • Segmento tra (0,40) e (10,30): Spostandosi da [math](0,40)[/math] a [math](10,30)[/math], il profitto [math]Z_1[/math] aumenta da [math]800[/math] a [math]900[/math], mentre l’impatto [math]Z_2[/math] peggiora da [math]-200[/math] a [math]-250[/math]. Anche qui abbiamo un trade-off: un miglioramento di [math]Z_1[/math] a scapito di [math]Z_2[/math]. Pertanto, il segmento [math](0,40)-(10,30)[/math] fa parte del confine di Pareto.

In sintesi, il confine di Pareto (o frontiera efficiente) è rappresentato dalla linea che connette i punti [math](0,0)[/math], [math](0,40)[/math] e [math](10,30)[/math]. Ogni punto su questa linea rappresenta un compromesso ottimale, dove non è possibile migliorare un obiettivo senza peggiorarne almeno un altro. Il decisore dovrà scegliere il punto specifico su questa frontiera in base alle proprie priorità e al bilanciamento desiderato tra profitto e impatto ambientale.

Forse potrebbe interessarti anche:  Catene di Markov in Python: Modellare Funnel, Retention e Churn oltre le classiche dashboard

👉Analisi di un Problema di Programmazione Lineare Multiobiettivo: Ricerca delle Soluzioni di Pareto

Tipi di Soluzioni

Soluzione Efficiente (o Pareto-Efficiente): Un punto nel poligono ammissibile è efficiente se non esiste un’altra soluzione ammissibile che è migliore o uguale per tutti gli obiettivi e strettamente migliore per almeno un obiettivo. Queste soluzioni formano la frontiera di Pareto, rappresentando i migliori compromessi possibili.

Soluzione Debolmente Efficiente: Un punto è debolmente efficiente se non esiste un’altra soluzione ammissibile che è strettamente migliore per tutti gli obiettivi contemporaneamente. Ciò significa che potrebbe esistere una soluzione che è migliore per un obiettivo e uguale per gli altri. Nella pratica, le soluzioni efficienti sono un sottoinsieme delle soluzioni debolmente efficienti. Le soluzioni debolmente efficienti possono includere punti dove è possibile migliorare un obiettivo senza peggiorarne gli altri, mantenendo alcuni obiettivi uguali.

Soluzione Ottima (nel contesto PLM): In PLM, non esiste un’unica “soluzione ottima” intrinseca, come in PL classica. Invece, c’è un insieme di soluzioni efficienti. La “soluzione ottima” per il decisore è quella che viene scelta all’interno di questo insieme, basandosi sulle sue preferenze, priorità o un’ulteriore analisi multicriteriale. Ad esempio, il decisore potrebbe preferire il punto che massimizza il profitto ([math]Z_1[/math]) pur accettando un impatto ambientale ([math]Z_2[/math]) non ideale, o viceversa.

2. Metodo Goal Programming (GP)

Il Goal Programming (GP) è un approccio per la PLM che trasforma il problema di ottimizzazione multiobiettivo in un problema a obiettivo singolo, minimizzando le deviazioni da obiettivi target predefiniti (chiamati “goal”). È particolarmente utile quando il decisore può stabilire dei livelli di aspirazione per ciascun obiettivo.

Esempio Pratico: Obiettivi e Priorità Aziendali

Riprendendo l’azienda precedente, supponiamo che il management abbia stabilito i seguenti obiettivi (Goal):

  • Profitto minimo ([math]G_1[/math]): Ottenere almeno 900€ di profitto. [math]30A+20B \ge 900[/math]
  • Impatto massimo ([math]G_2[/math]): Contenere l’impatto ambientale a non oltre 300 unità (ricorda che [math]10A+5B[/math] è l’impatto). [math]10A+5B \le 300[/math]

Formulazione del GP con Variabili di Deviazione

Il cuore del GP risiede nell’introduzione di variabili di deviazione per ciascun obiettivo. Per ogni obiettivo j, introduciamo:

  • [math]d_j^-[/math]: la deviazione negativa (quanto siamo al di sotto del target se è un “almeno” o quanto siamo al di sopra del target se è un “al massimo”).
  • [math]d_j^+[/math]: la deviazione positiva (quanto siamo al di sopra del target se è un “almeno” o quanto siamo al di sotto del target se è un “al massimo”).

Per costruzione, solo una delle due variabili di deviazione per un dato obiettivo può essere positiva in una soluzione ottima, cioè [math]d_j^- \cdot d_j^+ = 0[/math].

Riscriviamo le equazioni degli obiettivi aggiungendo le variabili di deviazione:

Profitto ([math]G_1[/math]): Target 900€ (almeno). Vogliamo minimizzare la carenza ([math]d_1^-[/math]).
[math]30A+20B+d_1^- – d_1^+ = 900[/math]
Se [math]30A+20B < 900[/math], allora [math]d_1^-[/math] sarà positivo (la carenza), e [math]d_1^+[/math] sarà zero.
Se [math]30A+20B > 900[/math], allora [math]d_1^+[/math] sarà positivo (l’eccesso), e [math]d_1^-[/math] sarà zero.
Se [math]30A+20B = 900[/math], allora [math]d_1^-[/math] e [math]d_1^+[/math] saranno entrambi zero.

Impatto ([math]G_2[/math]): Target 300 unità (non oltre). Vogliamo minimizzare l’eccesso ([math]d_2^+[/math]).
[math]10A+5B+d_2^- – d_2^+ = 300[/math]
Se [math]10A+5B < 300[/math], allora [math]d_2^-[/math] sarà positivo (siamo al di sotto del limite, il che è buono per l’impatto), e [math]d_2^+[/math] sarà zero.
Se [math]10A+5B > 300[/math], allora [math]d_2^+[/math] sarà positivo (siamo al di sopra del limite, il che è cattivo per l’impatto), e [math]d_2^-[/math] sarà zero.

Funzione Obiettivo del GP

L’obiettivo del GP è minimizzare la somma ponderata delle deviazioni indesiderate. Queste deviazioni indesiderate sono quelle che ci allontanano dal raggiungimento del goal nella direzione sbagliata.
Nella nostra azienda, vogliamo minimizzare la carenza di profitto ([math]d_1^-[/math]) e l’eccesso di impatto ([math]d_2^+[/math]).

Minimizzare: [math]Z=P_1 \cdot d_1^- + P_2 \cdot d_2^+[/math]

Dove [math]P_1[/math] e [math]P_2[/math] sono i pesi di priorità (o “pesi di penalità”) assegnati dal decisore. Questi pesi riflettono l’importanza relativa del raggiungimento di ciascun obiettivo o della minimizzazione di una specifica deviazione.

Ad esempio, se [math]P_1=1[/math] e [math]P_2=5[/math], significa che contenere l’impatto ambientale ([math]d_2^+[/math]) è considerato 5 volte più importante che raggiungere esattamente il profitto target ([math]d_1^-[/math]). Il risolutore cercherà prima di tutto di ridurre [math]d_2^+[/math], e solo dopo, minimizzerà [math]d_1^-[/math].

Il problema di Goal Programming completo da risolvere diventa un problema di Programmazione Lineare standard:

Minimizzare: [math]Z=P_1 \cdot d_1^- + P_2 \cdot d_2^+[/math]

Soggetto a:

  • [math]4A+2B \le 100[/math] (Vincolo tempo macchina)
  • [math]A+B \le 40[/math] (Vincolo materiale disponibile)
  • [math]30A+20B+d_1^- – d_1^+ = 900[/math] (Equazione goal profitto)
  • [math]10A+5B+d_2^- – d_2^+ = 300[/math] (Equazione goal impatto)
  • [math]A,B,d_1^-,d_1^+,d_2^-,d_2^+ \ge 0[/math] (Variabili non negative)
  • [math]d_1^- \cdot d_1^+ = 0[/math] (Condizione implicita negli algoritmi di risoluzione LP)
  • [math]d_2^- \cdot d_2^+ = 0[/math] (Condizione implicita negli algoritmi di risoluzione LP)

Il GP fornisce una soluzione che bilancia gli obiettivi in base alle priorità stabilite, anche se nessuno degli obiettivi viene soddisfatto perfettamente. La soluzione ottima del problema di GP è quella che minimizza la somma ponderata delle deviazioni indesiderate.

Forse potrebbe interessarti anche:  Come Risolvere Problemi Multi-Obiettivo con il Metodo Goal Attainment: Esercizi Svolti in Logistica e Finanza

Esempio Pratico di Goal Programming (GP) con Funzione Obiettivo

Immagina di essere il manager di un’azienda che produce due tipi di prodotti: X e Y.

Hai due obiettivi:

  • Raggiungere almeno 100.000€ di profitto (se ne ottieni di più, va bene, ma non meno).
  • Non superare le 50 tonnellate di emissioni di CO₂ (meno è meglio, ma non di più).

Definizione delle Variabili e dei Goal

  • Profitto: Ogni unità di X dà 2.000€, ogni unità di Y dà 3.000€.Goal: [math]2.000X+3.000Y \ge 100.000€[/math][math]2.000X+3.000Y \ge 100.000€[/math].
  • Emissioni: Ogni unità di X emette 0.5 tonnellate di CO₂, ogni unità di Y emette 1 tonnellata.Goal: [math]0.5X+Y \le 50[/math][math]0.5X+Y \le 50[/math].

Variabili di Deviazione

  • Profitto:
    • [math]d_1^-[/math]: Carenza di profitto (quanto manca per arrivare a 100.000€).
    • [math]d_1^+[/math]: Eccesso di profitto (se superiamo 100.000€, non ci interessa).
  • Emissioni:
    • [math]d_2^-[/math]: Risparmio di emissioni (se siamo sotto 50 tonnellate, va bene).
    • [math]d_2^+[/math]: Eccesso di emissioni (quanto superiamo il limite di 50 tonnellate).

Funzione Obiettivo del GP

Vogliamo:

  • Minimizzare la carenza di profitto ([math]d_1^-[/math]
    [math]d_1^-[/math]) → Non vogliamo guadagnare meno di 100.000€.
  • Minimizzare l’eccesso di emissioni ([math]d_2^+[/math]
    [math]d_2^+[/math]) → Non vogliamo superare 50 tonnellate.

La funzione obiettivo diventa:
Minimizzare [math]Z=P_1 \cdot d_1^- + P_2 \cdot d_2^+[/math]
Minimizzare [math]Z=P_1 \cdot d_1^- + P_2 \cdot d_2^+[/math]

Dove:

  • [math]P_1[/math] = Priorità 1 (es. “Il profitto è più importante delle emissioni”).
  • [math]P_2[/math] = Priorità 2 (es. “Le emissioni sono importanti, ma meno del profitto”).

Caso Pratico

Supponiamo che:

  • [math]P_1=3[/math] (alta priorità: il profitto è fondamentale).
  • [math]P_2=1[/math] (bassa priorità: le emissioni sono meno critiche).
Scenario 1: Soluzione Non Ottimale

Produciamo [math]X=20[/math], [math]Y=15[/math]:

  • Profitto: [math]2.000 \cdot 20+3.000 \cdot 15=85.000€[/math] → Mancano 15.000€ ([math]d_1^-=15.000[/math]).
  • Emissioni: [math]0.5 \cdot 20+1 \cdot 15=25[/math] → Sotto il limite ([math]d_2^+=0[/math]).
  • Penalità totale: [math]Z=3 \cdot 15.000+1 \cdot 0=45.000[/math].
Scenario 2: Soluzione Migliore

Produciamo [math]X=30[/math], [math]Y=20[/math]:

  • Profitto: [math]2.000 \cdot 30+3.000 \cdot 20=120.000€[/math] → Superiamo il goal ([math]d_1^-=0[/math]).
  • Emissioni: [math]0.5 \cdot 30+1 \cdot 20=35[/math] → Sotto il limite ([math]d_2^+=0[/math]).
  • Penalità totale: [math]Z=3 \cdot 0+1 \cdot 0=0[/math] → Soluzione ideale!
Scenario 3: Trade-Off Necessario

Produciamo [math]X=40[/math], [math]Y=10[/math]:

  • Profitto: [math]2.000 \cdot 40+3.000 \cdot 10=110.000€[/math] → Superiamo il goal ([math]d_1^-=0[/math]).
  • Emissioni: [math]0.5 \cdot 40+1 \cdot 10=30[/math] → Sotto il limite ([math]d_2^+=0[/math]).

Ma se aumentiamo Y per più profitto:
[math]X=10[/math], [math]Y=30[/math]:

  • Profitto: [math]110.000€[/math] ([math]d_1^-=0[/math]).
  • Emissioni: [math]0.5 \cdot 10+1 \cdot 30=35[/math] ([math]d_2^+=0[/math]).

Conclusione

  • Se [math]d_1^-=0[/math] e [math]d_2^+=0[/math]: Soluzione perfetta (tutti i goal soddisfatti).
  • Se [math]d_1^- > 0[/math] o [math]d_2^+ > 0[/math]: Il GP “penalizza” queste deviazioni in base alle priorità [math]P_1, P_2[/math].

Regola pratica: Più alto è [math]P[/math], più è importante evitare quella deviazione!

Esempio numerico riassuntivo:

Scenario[math]d_1^-[/math] (mancanza profitto)[math]d_2^+[/math] (eccesso emissioni)[math]Z=3 \cdot d_1^- + 1 \cdot d_2^+[/math]
1 (No)15.000€045.000
2 (Sì!)000
3 (Sì)000

Conclusione: Il GP aiuta a trovare il miglior compromesso in base alle priorità aziendali!

 

Pubblicità

3. Metodo STEM (Step Method)

Il Metodo STEM (Step Method) è un approccio interattivo e iterativo per la PLM. A differenza del GP che richiede la definizione a priori di tutti i goal e pesi, lo STEM guida il decisore attraverso una sequenza di problemi a obiettivo singolo, permettendo un’esplorazione passo-passo della frontiera di Pareto e un’affinamento delle preferenze.

Come Funziona il Metodo STEM

Lo STEM coinvolge il decisore in un processo iterativo, che generalmente segue questi passaggi:

  1. Risolvi Ogni Obiettivo Separatamente (Punto Ideale/Utopico):
    Per prima cosa, si risolve ogni funzione obiettivo singolarmente, massimizzando (o minimizzando) una alla volta, ignorando le altre. Questo ci fornisce il valore ideale ([math]Z_k^{max}[/math]) per ogni obiettivo k, così come il valore peggiore ([math]Z_k^{min}[/math]) che l’obiettivo può assumere quando gli altri obiettivi sono ottimizzati. Questi valori formano il “punto ideale” o “punto utopico” (se si considerano i massimi per ogni obiettivo) e il “punto nadir” (se si considerano i minimi).
    Torniamo all’esempio dell’azienda:
  • Max [math]Z_1=30A+20B[/math]:
    Risolvendo questo problema di PL separatamente con i vincoli dati, il valore massimo [math]Z_1[/math] si ottiene nel vertice [math](10,30)[/math], dove [math]Z_1=30(10)+20(30)=900[/math].
    Quindi, [math]Z_1^{max}=900[/math].
    Il valore minimo di [math]Z_1[/math] nel poligono è 0 (al punto [math](0,0)[/math]).
  • Max [math]Z_2=−10A−5B[/math]:
    Risolvendo questo problema di PL separatamente con i vincoli dati, il valore massimo [math]Z_2[/math] si ottiene nel vertice [math](0,0)[/math], dove [math]Z_2=−10(0)−5(0)=0[/math].
    Quindi, [math]Z_2^{max}=0[/math].
    Il valore minimo di [math]Z_2[/math] nel poligono è -250 (ai punti [math](25,0)[/math] e [math](10,30)[/math]).

Questo ci dà un intervallo potenziale per ogni obiettivo.

  • Normalizza gli Obiettivi:
    Poiché gli obiettivi possono avere scale e unità di misura molto diverse, è fondamentale normalizzarli in modo da poterli confrontare equamente. Una normalizzazione comune è la seguente, che scala i valori tra 0 e 1, dove 1 è il migliore e 0 è il peggiore nel range fattibile per ogni obiettivo:

 

  • Per un obiettivo da massimizzare [math]Z_k[/math]: [math]\hat{Z}_k = \frac{Z_k – Z_k^{min}}{Z_k^{max} – Z_k^{min}}[/math]
  • Per un obiettivo da minimizzare [math]Z_k[/math]: [math]\hat{Z}_k = \frac{Z_k^{max} – Z_k}{Z_k^{max} – Z_k^{min}}[/math]

Dove [math]Z_k^{max}[/math] è il valore ideale (massimo) dell’obiettivo k e [math]Z_k^{min}[/math] è il valore peggiore (minimo) dell’obiettivo k all’interno del poligono delle soluzioni ammissibili.
Riprendiamo l’esempio con una soluzione attuale generica (A,B) che produce [math]Z_1[/math] e [math]Z_2[/math]. Supponiamo di voler valutare il punto [math](0,40)[/math], dove [math]Z_1=800[/math] e [math]Z_2=−200[/math].

  • Normalizzazione per [math]Z_1[/math]: [math]Z_1^{max}=900[/math], [math]Z_1^{min}=0[/math]. [math]\hat{Z}_1 = \frac{800-0}{900-0} = \frac{800}{900} \approx 0.889[/math]
  • Normalizzazione per [math]Z_2[/math]: [math]Z_2^{max}=0[/math], [math]Z_2^{min}=−250[/math]. [math]\hat{Z}_2 = \frac{-200-(-250)}{0-(-250)} = \frac{50}{250} = 0.2[/math]
Forse potrebbe interessarti anche:  Risolvere il Problema dello Zaino con la Programmazione Dinamica in Python

Questi valori normalizzati ci danno un’idea della “performance” relativa di ogni obiettivo.

  • Definisci una Funzione Aggregata (o Funzione di Compromesso):
    Il cuore dello STEM è trovare una soluzione che si avvicini il più possibile al punto ideale, tenendo conto delle “distanze” normalizzate. Si formula un problema di Programmazione Lineare aggiuntivo che minimizza la massima deviazione normalizzata dagli obiettivi ideali. Questo spesso si traduce in:

 

Minimizzare: [math]\lambda[/math]

Soggetto a:

  • [math]\hat{Z}_k \ge 1-\lambda[/math] per ogni obiettivo k (o equivalentemente, la deviazione normalizzata è [math]\le \lambda[/math])
  • Vincoli originali:
    • [math]4A+2B \le 100[/math]
    • [math]A+B \le 40[/math]
    • [math]A,B \ge 0[/math]

Questo problema cerca di trovare il punto nel poligono ammissibile che è “più vicino” al punto ideale in termini di prestazioni proporzionali su tutti gli obiettivi. La soluzione di questo problema fornisce il primo punto sulla frontiera di Pareto che è il “miglior compromesso” iniziale.

  • Itera con il Decisore:
    Questo è il passaggio distintivo dello STEM. La soluzione ottenuta al punto 3 viene presentata al decisore.

 

  • Se la soluzione è soddisfacente, il processo termina.
  • Se non è soddisfacente, il decisore deve indicare quali obiettivi sono soddisfacenti e quali non lo sono.
    • Per gli obiettivi soddisfacenti, il decisore può imporre un vincolo di soglia inferiore (o superiore) sul loro valore, ad esempio: “[math]Z_1[/math] deve essere almeno 850”.
    • Per gli obiettivi non soddisfacenti, il decisore può indicare quanto è disposto a rilassare gli obiettivi che sono già stati ben soddisfatti (o che non sono prioritari in quel momento) per migliorare quelli insoddisfatti.

Il problema di PL viene quindi riformulato con i nuovi vincoli e le priorità aggiornate, e il processo di risoluzione e presentazione iterativa continua fino a quando non si raggiunge una soluzione accettabile. Il metodo STEM permette quindi al decisore di esplorare la frontiera di Pareto in modo controllato, affinando le sue preferenze man mano che vede i compromessi.

Esempio Pratico

Problema: Un’azienda vuole:

  • Massimizzare il profitto ([math]f_1[/math]).
  • Minimizzare l’impatto ambientale ([math]f_2[/math]).

Step-by-Step con STEM

Calcolo delle soluzioni ideali:

  • Massimo profitto: [math]f_1^*=100€[/math], ma [math]f_2=50[/math] unità di inquinamento.
  • Minimo inquinamento: [math]f_2^*=10[/math], ma [math]f_1=60€[/math].

Prima iterazione:

Il decisore vede il trade-off e chiede: “Voglio almeno [math]80€[/math] di profitto, minimizzando [math]f_2[/math].”

Si risolve il problema vincolato:
[math]\text{Min } f_2 \text{ s.v. } f_1 \ge 80€[/math]
[math]\text{Min } f_2 \text{ s.v. } f_1 \ge 80€[/math]

Risultato: [math]f_1=80€[/math], [math]f_2=30[/math].

Seconda iterazione:

Il decisore vuole migliorare [math]f_2[/math]: “Accetto [math]75€[/math] di profitto per ridurre [math]f_2[/math] sotto 20.”

Nuovo vincolo:
[math]\text{Min } f_2 \text{ s.v. } f_1 \ge 75€, f_2 \le 20[/math]
[math]\text{Min } f_2 \text{ s.v. } f_1 \ge 75€, f_2 \le 20[/math]

Risultato: [math]f_1=75€[/math], [math]f_2=18[/math].

Soluzione finale:

Il decisore approva il compromesso [math](75€, 18)[/math].

Vantaggi rispetto al Goal Programming (GP)

  • Nessuna definizione a priori di pesi: Le preferenze emergono durante il processo.
  • Esplorazione attiva della frontiera di Pareto: Il decisore “impara” i trade-off.
  • Flessibilità: Si adatta a cambiamenti nelle preferenze.

Svantaggi

  • Richiede tempo e interazione continua con il decisore.
  • Non garantisce l’ottimalità globale, ma una soluzione “soddisfacente”.

Quando Usare STEM?

  • Quando i trade-off tra obiettivi non sono chiari all’inizio.
  • Per problemi con più stakeholder con preferenze dinamiche.
  • In contesti dove è più importante capire le possibilità che trovare una soluzione ottima in un solo passo.

Confronto tra Metodi

MetodoVantaggio PrincipaleLimite Principale
Risoluzione GraficaIntuitivo e visivamente immediato per la comprensione dei concetti di Pareto-efficienza e trade-off.

Ideale per l'apprendimento e per problemi semplici.
Limitato a 2 (o al massimo 3) variabili decisionali.

Non scalabile per problemi reali più grandi. La sua utilità è didattica e concettuale.
Goal Programming (GP)Flessibile e potente, permette di incorporare le priorità del decisore e i livelli di aspirazione (goal).

Trasforma il problema in un LP standard, facile da risolvere con software esistente.
Richiede la definizione a priori di goal e pesi di priorità, che a volte possono essere difficili da stabilire per il decisore senza una prima esplorazione della frontiera efficiente. La scelta dei pesi è cruciale e può influenzare la soluzione finale.
Metodo STEM (Step Method)Interattivo, guida il decisore attraverso un processo di esplorazione della frontiera efficiente, permettendo un'affinamento graduale delle preferenze. Trova soluzioni efficienti bilanciate attraverso il compromesso.Può richiedere molte iterazioni e un coinvolgimento significativo del decisore, rendendolo potenzialmente lento per problemi complessi o per decisori che non hanno un'idea chiara delle loro preferenze. La formulazione della funzione di compromesso può essere complessa.

La scelta del metodo dipende dalla natura del problema, dal numero di obiettivi e variabili, e dal grado di coinvolgimento e chiarezza delle preferenze del decisore.

 

Pubblicità