Skip to content

Commit

Permalink
PLI Metodo dei tagli, gomory, schemi, inizio b&b
Browse files Browse the repository at this point in the history
  • Loading branch information
Darakuu committed Feb 13, 2024
1 parent fe18fc8 commit 0f10d12
Show file tree
Hide file tree
Showing 8 changed files with 189 additions and 3 deletions.
Binary file added content/Attachments/09-pligraf.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/Attachments/10-taglio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 48 additions & 3 deletions content/Metodo dei Tagli di Gomory.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,52 @@
---
tags:
- Ottimizzazione/FirstItinere
- Ottimizzazione
- Ottimizzazione/PLI
aliases:
- Metodo dei Tagli
- Gomory
- Metodo di Gomory
---
![[Metodo dei piani di taglio#Schema Generale]]


# Metodo di Gomory

Genera il taglio sfruttando la tabella finale del [[Metodo del Simplesso|Simplesso]] del [[Problemi di Ottimizzazione Lineare Intera#Rilassamento Lineare|Rilassamento Lineare]] (RL).

In particolare, usa la riga della tabella associata ad una componente frazionaria della soluzione ottima del (RL).

Sia data la tabella finale della risoluzione del RL:

-- WIP

- $\beta_{r}$ è frazionario.
- $x^{OTT}_{RL}=(\beta_{1},\dots,\beta_{r},\dots,\beta m)$

$x^{OTT}_{RL}$ non è intero, supponiamo che $\beta_{r}$ non sia intero.

## Procedimento

Scriviamo la riga $r-$esima:

$\Large x_{r}+\alpha_{rm+1}x_{m+1}+\dots+\alpha_{rn}x_{n}=\beta_{r}$

e consideriamo i floor dei coefficienti:

$\Large x_{r}+\left\lfloor {\alpha_{rm+1}} \right\rfloor x_{m+1}+\dots+ \left\lfloor {\alpha_{rn}} \right\rfloor x_{n}= \left\lfloor {\beta_{r}} \right\rfloor$

Questo è il taglio di Gomory in forma intera.

Il taglio va aggiunto al rilassamento lineare dopo averlo reso standard. Si aggiunge il vincolo standard:


$\Large x_{r}+\left\lfloor {\alpha_{rm+1}} \right\rfloor x_{m+1}+\dots+ \left\lfloor {\alpha_{rn}} \right\rfloor x_{n}+x_{n+1}= \left\lfloor {\beta_{r}} \right\rfloor$

Come precedentemente detto, la convergenza è lenta. I primi tagli risultano più efficaci, ma lo sono meno continuando ad iterare l'algoritmo.

Se si opera un taglio alla volta e ci sono più valori frazionari si sceglie sempre la riga con indice minore, **oppure** quella con termine noto che ha la parte frazionaria maggiore.


> [!success]- Esempio (Grafico, lungo)
> EH, VOLEVI!
> wip.

40 changes: 40 additions & 0 deletions content/Metodo dei piani di taglio.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,43 @@ tags:
- Ottimizzazione
- Ottimizzazione/PLI
---
Consideriamo il problema intero di prima:

$$
\begin{align}
& minC^Tx \\
& \begin{rcases}
& Ax = b\\
& x\geq 0 \\
& x \text{ intero} \\
\end{rcases} \ X
\end{align}
$$


> [!def] Taglio
> Sia $a^Tx\leq \alpha_{0}$ una disuguaglianza verificata $\forall\ x \in X$, essa si chiama **Taglio** se non è verificata dalla soluzione ottima del (RL)
![[10-taglio.png|512]]

Gli algoritmi dei piani di taglio risolvono una successione di problemi continui, ottenuti aggiungendo ogni volta un taglio, fino ad ottenre una soluzione intera.

## Schema Generale:

1. Si risolve il (RL), se $x_{RL}^{OTT}$ è intera $\implies STOP$
2. Si genera un taglio (**nuovo vincolo!**) $a^Tx\leq \alpha_{0}$
- Tale che $a^Tx^{OTT}_{T}>a_{0}$
- Significa: Il taglio è verificato da tutti i punti interi, ma non è soddisfatto dall'ottimo del rilassamento continuo.
3. Si risolve il nuovo problema continuo con l'aggiunta del nuovo vincolo

## Procedimento ed Efficienza

È un processo molto lungo ed estenuante da fare a mano, per questo in teoria esistono i computer, che possono operare più tagli contemporaneamente per migliorare l'efficienza, ma noi siamo studenti universitari e quindi abbiamo meno diritti delle macchine.

A seconda della scelta del taglio si hanno diversi algoritmi, ma resta comunque l'idea comune di fondo di approssimare l'involucro convesso mediante l'inserimento dei tagli.

## Implementazioni:

Una implementazione è il [[Metodo dei Tagli di Gomory]].
4 changes: 4 additions & 0 deletions content/Metodo del Branch and Bound.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@ tags:
- Ottimizzazione
- Ottimizzazione/PLI
---
# Metodo Branch and Bound

È un metodo molto utilizzato per risolvere problemi PLI.

97 changes: 97 additions & 0 deletions content/Problemi di Ottimizzazione Lineare Intera.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,100 @@ tags:
- Ottimizzazione
- Ottimizzazione/PLI
---
# Programmazione Lineare Intera

Consideriamo problemi del tipo:

$$
\begin{align} \\
& minC^Tx \\
& Ax \leq b\\
& x\geq 0 \\
& \boxed{x \text{ intero}}
\end{align}
$$


> [!info] Osservazione
> La regione ammissibile di un problema intero **non è** convessa.
> In generale possono esservi alcune variabili continue e alcune intere. Si parla in tal caso di PLI mista (che non trattiamo)

> [!success]- Esempio Grafico PLI
> ![[09-pligraf.png]]
Se risolviamo il problema senza vincolo di interezza, l'ottimo sarebbe $(2.7\ ;\ 2.2)$.

Altrimenti:

- Soluzione ottima intera: $(2;3)\quad f.o.=7$
- Soluzione arrotondata: $(2;2)\quad f.o.=6$

Come è ovvio vedere, non è possibile risolvere il problema intero eliminando il vincolo di interezza e risolvendo il problema continuo approssimando la soluzione.

Bisogna necessariamente risolvere il problema intero.

## Relazioni problemi lineari < - > interi

### Rilassamento Lineare

Dato un problema PLI (definito sopra), è possibile ottenere un **Rilassamento Lineare** (RL), o **continuo**:

$$
\begin{align}
& minC^Tx \\
& \begin{rcases}
& Ax = b\\
& x\geq 0 \\
\end{rcases} \ P
\end{align}
$$

- Risulta che $X=P\bigcap \mathbb{Z}^n$, cioè la regione ammissibile del problema di PLI è data dalla soluzione intera del poliedro P.

- Inoltre $X\subseteq P$, cioè la reigone ammissibile del problema PLI è sempre contenuta nel poliedro P.


Si ha che il valore ottimo di (RL) è sempre $\leq$ del valore ottimo di (PLI):

- $z_{RL}\leq z_{PLI}$

Infine:

Se la soluzione ottima di (RL) è intera $\implies$ è soluzione del problema (PLI).

## Involucro Convesso

Dato un insieme discreto, esistono diversi poliedro che lo contengono. Il poliedro più interessante è l'**Involucro Convesso** (Convex Hull), e cioè il più piccolo insieme convesso che contiene i punti discreti.

L'involucro convesso ha solo vertici interi, si potrebbe quindi risolvere il problema continuo usando l'involucro convesso come insieme dei vincoli:

$$
\begin{align}
& minC^Tx & & min\ C^Tx \\
& \begin{rcases}
& Ax = b\\
& x\geq 0 \\
& x \text{ intero} \\
\end{rcases} \ \overset{ \text{risolviamo} }{ \longrightarrow } & & x \in conv(X)
\end{align}
$$

Il problema da risolvere è detto **Rilassamento Convessificato** e si ottiene la soluzione intera cercata.

In generale però, non è facile costruire $conv(X)$. Servono dei metodi per costruirlo.


> [!todo]- Metodo dei piani di taglio (Generico)
> ![[Metodo dei piani di taglio]]

> [!application]- Metodo di Gomory (Implementazione piani di taglio)
> ![[Metodo dei Tagli di Gomory]]

0 comments on commit 0f10d12

Please sign in to comment.