Spazio dedicato a problemi che vanno al di là dei semplici temi d'esame o degli esercizi standard.

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Come passare da un problema if-else a un vincolo lineare

01/11/2022, 21:57

Buonasera a tutti, avrei bisogno di un aiuto: Sto facendo la tesi di laurea magistrale su un problema di ottimizzazione tramite la programmazione lineare.
Nello specifico, per la risoluzione con il metodo MIX INTEGER LINEAR PROGRAMMING, mi hanno detto che non è possibile avere un problema if-else.
Ho appunto questa funzione if-else e dovrei trovare il modo di trascriverla attraverso una funzione matematica in cui β dipenda dalle grandezze x1 e x2 (mettendo tutto in un'unica funzione).

β = 1 se k1x1 - k2x2 >= C
β = 0 altrimenti

k1,k2,C sono costanti, x1,x2 sono le variabili.
Tale termine β compare nella funzione obiettivo (da minimizzare) sotto forma di β*C

La mia relatrice mi ha detto che l'idea deve essere quella di avere un parametro che si comporta come in questo modo, ovvero che verifica alternativamente queste due disequazioni

x3 > C*y
x4 <= C(1-y)

Con y binario [0;1]

Non riesco proprio a capire come si può impostare il problema.
Ringrazio tutti quelli che proveranno ad aiutarmi.

Re: Come passare da un problema if-else a un vincolo lineare

14/11/2022, 15:40

Credo che una buona soluzione possa essere l'uso della funzione SIGN (segno) che fornisce +1 se l'argomento è >0 e -1 se l'argomento è <0 e zero per argomento zero. Quindi potresti scrivere:

$beta =(1+SIGN(K1*X1 -K2*X2))/2$

L'unico difetto è che per K1*X1 -K2*X2 =0 otterresti 1/2, ma a questo si rimedia facilmente aggiungendo all'argomento un piccolissimo valore positivo (tipo 1E-10 o simile).

In ultimo, se per caso la funzione a gradino così ottenuta fosse "indigesta" per l'algoritmo di ottimizzazione (ovviamente potrebbe dare problemi ad uno Jacobiano), potresti anche usare una qualche funzione sigmoide molto pendente.
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.