Skip to content

Commit

Permalink
Problema zaino, inizio problema assegnamento
Browse files Browse the repository at this point in the history
  • Loading branch information
Darakuu committed Feb 14, 2024
1 parent 4e67fab commit 099f853
Show file tree
Hide file tree
Showing 5 changed files with 188 additions and 0 deletions.
5 changes: 5 additions & 0 deletions content/Algoritmo Ungherese.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
tags:
- Ottimizzazione
- Ottimizzazione/PLI
---
4 changes: 4 additions & 0 deletions content/Condizioni KKT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
tags:
- Ottimizzazione/PNL
---
45 changes: 45 additions & 0 deletions content/Problema dell'assegnamento.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,48 @@ tags:
- Ottimizzazione
- Ottimizzazione/PLI
---
Siano A e B due insiemi tali che $A\bigcap B=\emptyset$ e $|A|=|B|$.

Sono dati dei costi agli abbinamenti tra gli elementi di $A$ e $B$.

Il problema degli assegnamenti consiste nell'assegnare ad ogni elemento di A un solo elemento di $B$ in modo che non ci siano elementi non accoppiati e il costo totale sia minimo.

Se $|A|\neq |B|$ si aggiungono elementi fittizi e costi nulli degli abbinamenti con elementi fittizi.

## Formulazione Matematica

$x_{j}, \quad j=1,\dots,$

$$
xj=
\begin{cases}
\ 1 \qquad\quad \text{se l'oggetto }i \in A \text{ è assegnato all'oggetto} j \in B \\
\ 0 \qquad\quad \text{altrimenti}
\end{cases}
$$

$$
\begin{align}
min \displaystyle& \sum^n_{j_{=1}}c_{j},x_{j} \\
& \displaystyle\sum^n_{i=1}x_{ij}=1 \\
& \sum^n_{j=1}x_{ij}=1 \\
& x_{ij} \in \{ 0,1 \} \\ \\
& \forall i,j = 1,\dots,n
\end{align}
$$

È un particolare problema del trasporto con domanda e offerta = 1.

La matrice dei coefficienti è **Totalmente Unimodulare**

## Matrice Unimodulare


> [!def] Matrice Unimodulare
> Una matrice $A \in \mathbb{R}^{m\times x}$ si dice totalmente unimodulare quando ogni sottomatrice di ordine $P(p=1,\dots,m)$ ha determinante $\in \{ -1,0,1 \}$

> [!tldr] Proposizione
> Dato il poliedro
132 changes: 132 additions & 0 deletions content/Problema dello Zaino.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,135 @@ tags:
- Ottimizzazione
- Ottimizzazione/PLI
---
Sia $E=\{ 1,\dots,n \}$ un insieme di $n$ oggetti.

Ad ogni oggetto $j$ si associano un profitto $P_{j}$ e un peso $w_{j}$, entrambi interi positivi.

Sia $W$ la capacità.


> [!def] Problema dello Zaino
> Consiste nello scegliere quali oggetti inserire nello zaino in modo da massimizzare il profitto, rispettando il vincolo sulla capacità.

## Definizione Formale

$x_{j}, \quad j=1,\dots,$

$$
xj=
\begin{cases}
\ 1 \qquad\quad \text{se l'oggetto }j \text{ è inserito} \\
\ 0 \qquad\quad \text{altrimenti}
\end{cases}
$$

$$
\begin{align}
max \displaystyle& \sum^n_{j_{=1}}p_{j},x_{j} \\
& \displaystyle\sum^n_{j=1}w_{j}x_{j}\leq W \\
& x_{j} \in \{ 0,1 \}
\end{align}
$$

Il problema fa parte dei problemi di riempimento.

## Problema di Riempimento

Siano $S_{1},\dots,S_{k}$ sottoinsiemi di $E$ e sia $c_{j}$ il profitto associato ad ogni $S_{j}$.

Il problema di riempimento consiste nel determinare la sottofamiglia $\mathcal{F}$ degli insiemi $S_{1},\dots,S_{k}$ che sia di profitto massimo e tale che ogni elemento di $E$ appartenga al più ad un solo sottoinsieme di $\mathcal{F}$.

$$
\begin{align}
Siano:& \\
&a_{ij}=\begin{cases}
\ 1 & & \text{se l'oggetto }i\in S_{j} \\
\ 0 & & \text{altrimenti}
\end{cases} \\
&x_{j}= \begin{cases}
\ 1 & & \text{se } S_{j} \in \mathcal{F} \\
\ 0 & & \text{altrimenti}
\end{cases} \\ \\
max \displaystyle& \sum^k_{j_{=1}}c_{j},x_{j} \\
& \displaystyle\sum^k_{j=1}a_{ij}x_{j}\leq 1 \qquad \forall\ i=1,..,n\\
& x_{j} \in \{ 0,1 \}
\end{align}
$$

## Approccio Euristico

Si costruisce una soluzione inserendo nello zaino per primi gli elementi migliori secondo un certo criterio.

Ci sono tre criteri:

1. Peso non decrescente (inseriamo molti oggetti)
2. Profitto non decrescente (inseriamo oggetti di maggior valore)
3. Rapporto profitto/peso decrescente (più efficace)

Comunque con questo approccio non si arriva all'ottimo

## Metodo (esatto) Branch and Bound per lo zaino

Per applicare il [[Metodo del Branch and Bound]] dobbiamo specificare:

- Come ottenere l'upper bound
- Come fare branching
- Come ottenere un lower bound

Per l'operazione di bounding adottiamo l'eliminazione del vincolo di interezza ([[Problemi di Ottimizzazione Lineare Intera#Rilassamento Lineare|RL]]|), perciò risolviamo il problema di PL:

$$
\begin{align}
max \displaystyle& \sum^n_{j_{=1}}p_{j},x_{j} \\
& \displaystyle\sum^n_{j=1}w_{j}x_{j}\leq W \\
& x_{j} \in [ 0,1 ]
\end{align}
$$

Si potrebbe usare il simplesso ma è più efficace un altro metodo.

Si sceglie il criterio di ordinamento $\dfrac{\text{profitto}}{\text{peso}}$ decrescente.


Si ordinano gli oggetti secondo questo criterio e si inizia l'inserimento. Supponiamo che si possano inserire i primi $h$ oggetti, ma non l'oggetto $h+1$

$\displaystyle\sum^h_{j=1}w_{j}x_{j}\leq W$

e

$\displaystyle\sum^h+1_{j=1}w_{j}x_{j}> W$

Inseriamo per intero i primi $h$ oggetti: $x_{1}=x_{2}=\dots =x_{h}=1$

Mentre l'oggetto $h+1$ sarà inserito frazionalmente (in parte):

$\large x_{h+1}=\dfrac{W-\text{spazio occupato}/}{P_{h+1}}=\dfrac{W-\displaystyle\sum^h_{j-1}w_{j}}{P_{h+1}}$

Lo zaino è pieno $x_{h+2}=\dots=x_{n}=0$

Il valore ottimo è $\displaystyle\sum^h_{j=1}P_{j}+P_{h+1} \dfrac{W-\displaystyle\sum^h_{j=1}w_{j}}{P_{h+1}}$

$x_{h+1}$ infatti è detta variabile critica ed è la variabile di branch, che effettua la partizione.

Un Lower Bound si ottiene considerando come Soluzione Intera Ammissibile l'arrotondamento per difetto della soluzione del $I$ rilassamento lineare $P_{0}$.


- Soluzione $P_{0}: x_{1}=\dots=x_{h}=1\qquad,\qquad x_{h+1=}\dfrac{W-\displaystyle\sum^h_{j-1}w_{j}}{P_{h+1}} \qquad,\qquad x_{h+2}=\dots=x_{n}=0$

- L'arrotondamento è: $x_{1}=\dots=x_{h}=1 \qquad,\qquad x_{h+1}=\dots=x_{n}=0$


- e il lower bound: $\displaystyle\sum^h_{j=1}P_{j}$


Come strategia si usa in genere il best bound.


> [!success] Esempio (WIP)
>



2 changes: 2 additions & 0 deletions content/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ Questa pagina funge da indice.
- [[Metodo dei Tagli di Gomory]]
- [[Metodo del Branch and Bound]]
- [[Problema dello Zaino]]
- [[Problema dell'assegnamento]]
- [[Algoritmo Ungherese]]
- [[Problema del Commesso viaggiatore]]

## Programmazione Non Lineare
Expand Down

0 comments on commit 099f853

Please sign in to comment.