Esiste un modo efficiente per gestire la divisione per zero?

Sep 06 2020

Sto cercando di risolvere un problema di ottimizzazione in cui esiste una funzione obiettivo nella forma seguente: \begin{equation}f(x, y)=x+\left(\frac{1}{y}\right)\end{ equazione} dove,$x,y$sono variabili positive con$LB=0$e un finito$UB$. Quando eseguo il modello ho un problema che division by zero. Un modo possibile per farlo è impostare un piccolo numero come a$LB$ma, non sono sicuro che questa sarebbe una buona idea.

Mi chiedevo se esiste un modo efficiente per risolvere questo problema?

Risposte

5 mtanneau Sep 07 2020 at 05:19

Supponendo che il problema sia un problema di minimizzazione, è possibile utilizzare una formulazione del cono ruotato del secondo ordine (RSOC). In particolare, scrivi l'obiettivo come$x + 2t$e aggiungi il vincolo$$ (t, y, 1) \in \mathcal{Q}^{1}_{r}, $$che equivale a$$ t \geq 0, y \geq 0, 2ty \geq 1, $$cioè, cede$2t \geq \frac{1}{y}$.

I vincoli RSOC sono supportati da solutori come CPLEX, Gurobi e Mosek. Se il resto del tuo problema non è lineare, credo che KNITRO supporti combinazioni di vincoli conici e non lineari.

Se l'obiettivo$x + \frac{1}{y}$deve essere massimizzato, allora la formulazione di cui sopra non funziona.

1 NikosKazazakis Sep 06 2020 at 20:43

Da$y$è positivo, la tua frazione non è solo convessa, ma è monotonicamente decrescente. Ciò significa che aggiungendo a$y \geq \epsilon$il vincolo non influirà sulla soluzione (globale) e preverrà anche i problemi numerici della divisione per zero.

Ciò significa che puoi aggiungere detto vincolo per ogni variabile frazionaria nel tuo obiettivo, supponendo che sia positivo, e qualsiasi risolutore di PNL lo risolverà senza problemi.

Una parola di cautela però se hai anche dei vincoli con questo: poiché stai minimizzando, tieni presente che questa forma funzionale è convessa solo per$\leq$vincoli. Se si presenta in qualsiasi altro tipo di vincolo, la procedura per gestirlo è diversa.