Come usare Programmazione Lineare

February 21

Come usare Programmazione Lineare


programmazione lineare intera è la scienza di modellare un problema che sia minimizza o massimizza una funzione obiettivo lineare, nell'ambito di una serie di vincoli espressi come le disuguaglianze lineari. Quando completamente risolto, la soluzione al programma lineare intera garantisce la soluzione ottimale al problema. Tuttavia, la complessità del problema scale esponenzialmente con dimensione del problema. Pertanto, si può richiedere molto tempo per arrivare alla soluzione finale. In alternativa, il problema può essere risolto parzialmente e differenti euristiche può essere esplorata per ottenere una soluzione sub-ottimale in un tempo più breve.

istruzione

Formulazione e risoluzione dei programmi lineari

1 Decidere se il problema è un problema di "massimizzazione" o un problema "minimizzazione". Un problema di massimizzazione cerca di trovare una soluzione così dove è massima la funzione obiettivo. Un problema di minimizzazione cerca di trovare una soluzione in cui viene minimizzata la funzione obiettivo. Ad esempio, il problema di trovare il percorso più breve tra due punti è un problema di minimizzazione. D'altra parte, il problema di confezionare il numero massimo ciottoli diverse dimensioni in una bottiglia è un problema di massimizzazione.

2 Decidere le variabili richieste per la formulazione. Scegliendo il giusto insieme di variabili è necessario ridurre al minimo la complessità del problema, e corrispondentemente arrivare alla soluzione più veloce. Tipicamente, ogni entità cui valore influenza la soluzione finale è una variabile.

3 Modellare la funzione obiettivo. La funzione obiettivo è modellato come una somma di prodotti di variabili e il loro impatto sulla soluzione finale. Ad esempio, se il problema è quello di minimizzare la distanza tra due nodi di un grafo, ogni connessione tra due nodi sarà una variabile che assume un valore di 0 o 1, e il suo contributo alla funzione obiettivo sarà la distanza tra i nodi . In questo caso, la variabile può essere chiamato "X (i, j)," dove "i" e "j" sono dei due nodi del grafo, e la distanza tra i due nodi possono essere "V (i, j) ". X (i, j) sarà 1 se la connessione è parte del percorso finale tra i due nodi. Quindi, la funzione obiettivo sarà minimizzare la somma V (i, j) * X (i, j), dove la sommatoria è su tutte le connessioni.

4 Impostare i vincoli. I vincoli devono cogliere tutte le restrizioni imposte dal problema. Per l'esempio percorso più breve, vi sono le seguenti limitazioni:

X (i, j) può essere sia 0 o 1. Quindi, X (i, j) deve essere maggiore o uguale a 0, e X (i, j) deve essere inferiore o uguale a 1.

Se viene scelto il collegamento X (i, j), esattamente un collegamento dal nodo "j" ad un altro nodo diverso "i" deve essere scelto. Quindi, X (i, j) deve essere maggiore o uguale alla somma di tutte le variabili di tipo X (j, k), dove "k" non è uguale a "i".

Una connessione dal nodo di partenza deve essere selezionato. Quindi, somma di X (n, k) dovrebbe essere 1, dove "n" è il nodo di partenza. Analogamente, somma di X (k, m) dovrebbe essere 1, dove "m" è il nodo finale.

5 Modellare il problema in formato sia Mathematical Programming System (MPS), o il formato Linear Programming (LP).

6 O acquistare un risolutore commerciale come FICO o CLPEX, o scaricare un risolutore gratuito come GLPK. Nota i solutori liberi sono molto più lento rispetto ai solutori commerciali e non possono essere adatti per risolvere i grandi problemi.

7 Se il solutore non converge alla soluzione definitiva in tempi ragionevoli, provare euristica. Una soluzione potrebbe essere quella di rimuovere i vincoli interi sulle variabili, e ravvicinare le variabili all'intero più vicino ad ottenere una soluzione sub-ottimale.

Consigli e avvertenze

  • Se il formato problema è grande, assicurarsi che il computer ha un sacco di potenza di elaborazione e un sacco di memoria. risolutori di programmazione lineare prendere un sacco di risorse di memoria e di elaborazione.