Sei sulla pagina 1di 26

Lezioni di Ricerca Operativa

Corso di Laurea in Informatica ed Informatica Applicata Università di Salerno

Lezione n°11

Algoritmo del Simplesso:

- Passi fondamentali - Esempio

R. Cerulli F. Carrabs

Calcolo della soluzione ottima di un problema di PL.

Consideriamo il problema (PL) in Forma Standard

min

z

=

T

c x

A x b

=

x 0

Data una base B ammissibile, riscriviamo il problema come:

min z = z 0

x B = b

x 0

j N

( z j c j ) x j

j N

y j x j

T

z 0 = c B z j = c B

T

A B 1 b

A B 1 a j

b

= A B 1 b

y j = A B 1 a j

5. Teorema (Condizione di ottimalità) Una soluzione di base non degenere di un problema di
5. Teorema (Condizione di ottimalità)
Una soluzione di base non degenere di un
problema di PL è ottima se e solo se:
1)
b
≥ 0
∀ ∈
i
B
i
2)
z
− c
0
∀ ∈
j
N
(ammissibile)
(non migliorabile)
j
j

Scelta della variabile entrante.

Quando le condizioni di ottimalità non sono verificate è sempre possibile scegliere una variabile fuori base x k da portare in base per migliorare lobiettivo.

Quando esistono più alternative la scelta non preclude il raggiungimento della soluzione ottima, ma può al peggio aumentare il tempo necessario per la sua ricerca.

Scelta della variabile entrante.

Il metodo del gradiente Sceglie la variabile fuori base x k che localmente fa aumentare più rapidamente lobiettivo:

z

k

c =

k

{

max z c

j N

j

j

}

Scelta della variabile uscente.

Determinata la variabile fuori base x k da portare in base, si deve scegliere la variabile uscente.

Esistono due situazioni alternative:

a) y ik 0 i=1,

m

La soluzione del problema è illimitata (non esiste un

punto di ottimo).

In questo caso facendo aumentare x k il valore di nessuna

variabile di base diminuisce:

z

=

z

0

( z

k

c ) x

k

k

z

0

b) y rk >0 per almeno un r

Per qualsiasi valore di x k

La soluzione di base non è ottima, bisogna quindi

passare alla base successiva.

Nota

Se una variabile di base x B i è nulla (soluzione degenere) e y ik >0, allora x k entra in base con valore nullo.

In questo caso la soluzione non cambia, ed in particolare rimane degenere.

Per questa ragione la ricerca della soluzione potrebbe rimanere bloccata generando sempre la medesima soluzione (cycling).

Il cycling è piuttosto raro e comunque esistono strategie per evitalo.

Lalgoritmo del Simplesso

INPUT:

Problema di PL (in forma standard) e una soluzione di base ammissibile.

1.Test di ottimalità:

Se z j -c j 0 j N allora la soluzione corrente è ottima e l’algoritmo termina.

Altrimenti andare al passo 2.

2.Scelta della variabile entrante in base:

Scegliere una variabile fuori base x k tale che z k -c k >0 ed andare al passo 3.

3.Test di illimitatezza:

Se y ik 0 i=1,

finito), e l’algoritmo termina. Altrimenti vai al Passo 4.

4.Scelta della variabile uscente dalla base: Test dei minimi rapporti

m,

allora la soluzione del problema è illimitata (non esiste ottimo

b

r

y rk

⎪ ⎧ b

⎪ ⎩ y

j

jk

:

min

j B

y jk

0

=

>

Scegliere la variabile x r tale che:

x r è la variabile uscente e la variabile entrante x k assume valore pari a

5.Aggiornamento della base:

b

r

y

rk

Aggiornare gli indici delle variabili in base (B) e quelli delle variabili fuori base (N). Tornare al passo 1.

Esempio: Applicazione del Simplesso

min

x

x

x 0

z

= − −

1

+

2

x

2

1

1

1

1

x

2

− ≥ − 2

x

1

1 x

+ 2

1 x

5

- 2

⎢ ⎣

-1

1

A =

2

x

1

2

0

0

0

1

0

5 ⎡ - 2 ⎢ ⎢ ⎢ ⎣ -1 1 A = 2 x 1 2

min

2

x

x

x

2

x

=

2

1

= 2

z

= − −

1

+

x

x

2

2

x

4

3

2

+

x

3

x

+

x

+

x

5

x

1

1

+

+

x

0

= 5

0,

x

4

1

0,

x

5

0

1

0

B = {3,4,5}

N = {1,2}

0

Esempio: Applicazione del Simplesso (Cont.)

A =

B

x

x

x

3

4

5

=

x x

3

4

1

0

0

0

1

0

A

-1

B

b

=

x

5

0

0

1

1

0

0

0

1

0

0

0

1

x

B

⎤ ⎡⎤

⎥ ⎢⎥

⎥ ⎢⎥

⎥ ⎢⎥

⎦ ⎣⎦

1

2

5

z =

0

T

1

c A b

B

B

=

1

A b

B

x

Ib

x

BB

=

=

b

= 0 T 1 c A b B − B = 1 A b − B
= 0 T 1 c A b B − B = 1 A b − B

x =

3

z =

0

1,

x =

4

[

0 0 0

]

2,

x

1

5 ⎥ ⎦

2

5

= 5

= 0

Esempio: Applicazione del Simplesso (Cont.)

Test di Ottimalità: calcolo di z j – c j per j N

z j

(

(

z

z

- c

j

= c

T

B

1

B

A

a

B = {3,4,5}

N = {1,2}

j

c

j

j

N

1

2

)

c =

1

[

0 0 0

]

I

c

2

)

=

[

]

0 0 0 I

⎡ − 2

1

1

(

− −

1)

1

1 1 ⎥ ⎦

⎢ ⎣

(

− −

2)

=

=

0

1

+ =

1

0

+

2

=

2

Esempio: Applicazione del Simplesso (Cont.)

( z

2

(

z

2

c

2

)

c

2

)

=

=

max

j N

{

z

j

c

j

max {1, 2} 2

=

}

⇔ max j ∈ 1, 2 { }
max
j
∈ 1, 2
{
}

{(

z

1

c

1

), (

z

2

c

2

)}

x 2 entra in base

Quale variabile esce dalla base? Regola del minimo rapporto:

b

r

y rk

=

min

j B

b

j

y

jk

:

y

jk

>

0

y =

j

b

=

1

A a

B

1

A b

B

j

Esempio: Applicazione del Simplesso (Cont.)

y =

2

x =

2

A

-1

B

a

b

1

y

12

2

=

1

⎡⎤ == ⎢⎥ ⎢⎥ 1

I

1

⎣⎦

⎢⎥

⎡⎤ 1

⎢⎥

1

⎢⎥

1

⎣⎦

⎢⎥

min

j B

b

j

y

jk

:

y

jk

>

x

x

3

x

4

5

0 x

2


⎣ ⎢ ⎦

b

1 1

3 5 ⎥ ⎦

= b

b

2

= 2

1 min

= =

1 2

5

1

,

1

,

1

x 3 esce dalla base; x 2 entra in base con valore 1

Nuova base:

B = {2,4,5}

N = {1,3}

Esempio: Applicazione del Simplesso (Cont.)

A =

B

x x

2

4

1

1

1

0

1

0

Calcoliamo

1

A =

B

-1

-1

1

0

1

0

x

5

0

0

1

A

1

B

0

0

1

Esempio: Applicazione del Simplesso (Cont.)

x =

B

1 Ab − B
1
Ab −
B

x

x

x

2

4

5

=

1

A b

B

=

-1 0

1 0 0 ⎤ ⎡ 1 ⎤ ⎥

⎥ ⎦

⎦ ⎥ ⎢ ⎣ 5

-1 1 0

1

2 =

z =

0

[

- 2 0 0

]

z =

0

T − 1 c A b B B
T
1
c A b
B
B

1

-1 0 1

-1 1 0

0 0

⎦ ⎣

1 ⎤ ⎢ ⎢

2

5 ⎥ ⎦

=

[

- 2 0 0

]

1

5 ⎥ ⎦

2

= 2

1 ⎤ ⎢

4 ⎥ ⎦

1

Esempio: Applicazione del Simplesso (Cont.)

Test di Ottimalità: calcolo di z j – c j per j N

z

(

z

j

1

- c

j

=

)

c =

1

c

T

B

1

B

A

a

j

B = {2,4,5}

c

j

∀ ∈

j

N = {1,3}

N

[

- 2 0 0

]

1

-1

0 0 ⎤ ⎡ − 2

0

-1 1 0

1

1

1

⎦ ⎥ ⎣ ⎢

(

− −

1)

=

[

- 2 0 0

]

(

z

3

)

c =

3

[

-2 0 0

]

-1 0 1

-1 1 0

1

0 0 ⎤ ⎡ 1

⎦ ⎢ ⎣ 0 ⎥ ⎦

0

0

=

[

- 2 0 0

]

1 ⎤ ⎥ ⎥ 0 ⎥ ⎦

0

⎡ − 2

1

1

1

+ =

0

=

2

5

Esempio: Applicazione del Simplesso (Cont.)

z j – c j > 0 per j=1

del Simplesso (Cont.) z j – c j > 0 per j=1 x 1 entra in

x 1 entra in base

Quale variabile esce dalla base?

Regola del minimo rapporto:

x =

k

b

r

y rk

=

min

j B

b

j

y

jk

:

y

jk

>

0

y

j

b

1

= A a

B

=

1

A b

B

j

Esempio: Applicazione del Simplesso (Cont.)

A

-1

y ==

1

B

1

a

x =

1

b

2

y

21

1

⎢ ⎣

-1

-1

=

0

1

0

min

j B

0

0

1

⎤⎡ -2

⎦⎣ ⎦

⎥⎢

⎥⎢

⎥⎢

-1

1

b

j

y

jk

:

y

=

jk

⎣ ⎢

-2

1

3

⎦ ⎥

>

0

x

1

x

x

x

2

4

5

b

= b

b

1

2

3

1 = ⎢ ⎢ 1

4 ⎥ ⎦

1 min

= =

1 4

1

,

3

x 4 esce dalla base; x 1 entra in base con valore 1

Nuova base:

B = {2,1,5}

N = {4,3}

Esempio: Applicazione del Simplesso (Cont.)

A B

=

x

1

2

1

1

x x

1

5

2 0

1

-

-

1 0

1

Calcoliamo

A

B

1

A =

B

-1

2

-1

2

1

- 3

0

0

1

1

Esempio: Applicazione del Simplesso (Cont.)

x =

B

⎡ x ⎤ 2 1 Ab − ⎢ ⎥ − 1 B x = A
⎡ x ⎤
2
1
Ab −
− 1
B
x
=
A b
1
B
⎢ x
5
T
1
z
=
c A b
0
B
B

=

z =

0

[

- 2 -1 0

]

-1

-1

2

2

1

- 3

0 ⎤ ⎡ 1

0

⎦ ⎥

⎥ ⎢

⎥ ⎢

2

1 ⎥ ⎦ ⎣ ⎢ 5

=

[

3

-1

-1

2

1

2 - 3

- 5 0

]

1

⎥ ⎥ 5 ⎥ ⎦

2

0 ⎤ ⎡ 1

⎦ ⎥

0

2

1 ⎦ ⎥ ⎣ ⎢ 5

= 7

=

⎣ ⎢

3

1

⎦ ⎥

1

Esempio: Applicazione del Simplesso (Cont.)

Test di Ottimalità: calcolo di z j – c j per j N

z

j

(

z

(

z

- c

j

=

c

T

B

1

B

A

a

j

3

)

c =

3

[

- 2 -1 0

B = {2,1,5}

]

c

j

-1

-1

2

2

1

- 3

∀ ∈

j

N

0 ⎤ ⎡ 1

0

1 ⎦ ⎥ ⎢ ⎣ 0 ⎥ ⎦

0

N = {4,3}

0

=

[

3 - 5 0

]

4

)

c =

4

[

- 2 -1 0

]

2

-1 1

-1

2

- 3

0 ⎤ ⎡ 0

1 ⎦ ⎥ ⎢ ⎣ 0 ⎥ ⎦

0

1

0

=

[

3 - 5 0

]

1 ⎤ ⎥ ⎥ 0 ⎥ ⎦

0

0

=

3

0

1

0 ⎦ ⎥

0

=

5

Esempio: Applicazione del Simplesso (Cont.)

z j – c j > 0 per j=3

del Simplesso (Cont.) z j – c j > 0 per j=3 x 3 entra in

x 3 entra in base

Quale variabile esce dalla base?

Regola del minimo rapporto:

x =

k

b

r

y rk

=

min

j B

b

j

y

jk

:

y

jk

>

0

y

j

b

1

= A a

B

=

1

A b

B

j

Esempio: Applicazione del Simplesso (Cont.)

y =

3

A

x

3

-1

B

a 3

=

-1 1 0 ⎤ ⎡ 1

2

1 ⎦ ⎥ ⎢ ⎣ 0 ⎥ ⎦

⎥ ⎢

-1 2 0

- 3

0

b

3

==

y

33

min

j B

⎪ ⎧ b

j

⎪ ⎩

y

jk

=

:

-1

-1

⎣ ⎢

2 ⎥ ⎦

x

x

x

2

1

5

⎥ ⎥

=

⎫ ⎪

⎪ ⎭

0

yx

jk

3

>


b

= b

b

1

2

=

1

2

3

1

⎦ ⎥

⎣ ⎢

= 3

1

min

1

2

x 5 esce dalla base; x 3 entra in base con valore 1/2

Nuova base:

B = {2,1,3}

N = {4,5}

Esempio: Applicazione del Simplesso (Cont.)

A =

B

x

2

x x

1

3

1 - 2

1

1 -1

1

1

0

0

Calcoliamo

A

1

B

1

A =

B


⎢ ⎣

0

⎦ ⎥ Calcoliamo A − 1 B 1 A = − B ⎡ ⎢ ⎢ ⎢

1 2

1 2


1 2

⎦ ⎥ Calcoliamo A − 1 B 1 A = − B ⎡ ⎢ ⎢ ⎢
⎦ ⎥ Calcoliamo A − 1 B 1 A = − B ⎡ ⎢ ⎢ ⎢
⎦ ⎥ Calcoliamo A − 1 B 1 A = − B ⎡ ⎢ ⎢ ⎢

0 -1 2 1 2

⎦ ⎥ Calcoliamo A − 1 B 1 A = − B ⎡ ⎢ ⎢ ⎢

1 - 3 2

⎦ ⎥ Calcoliamo A − 1 B 1 A = − B ⎡ ⎢ ⎢ ⎢

Esempio: Applicazione del Simplesso (Cont.)

x =

B

⎡ x ⎤ 2 1 Ab − ⎢ ⎥ − 1 x = A b
⎡ x ⎤
2
1
Ab −
− 1
x
=
A b
=
B
1
B
⎢ x
3
T
1
z
=
c A b
0
B
B
B ⎢ x ⎥ ⎣ ⎦ 3 T − 1 z = c A b 0

z =

0

[

- 2 -1 0

]

0

1 2 1 2
1 2 1 2


⎦ ⎢ ⎣ 5

1

⎥ ⎦

2

⎥ ⎥ ⎦ ⎢ ⎣ 5 ⎢ ⎢ ⎡ 1 ⎤ ⎥ ⎥ ⎥ ⎦ 2
⎥ ⎥ ⎦ ⎢ ⎣ 5 ⎢ ⎢ ⎡ 1 ⎤ ⎥ ⎥ ⎥ ⎦ 2

0 -1 2 1 2

1 - 3 2 1
1
- 3 2
1

2

= [

0


⎢ ⎢ ⎣

0

0 -1 2 1 2 1 - 3 2 1 2 ⎥ = [ 0 ⎡

1 2

1 2 ⎤ ⎡ 1

⎦ ⎥

⎢ ⎢ ⎢ ⎣ 0 1 2 1 2 ⎤ ⎡ 1 ⎤ ⎥ ⎥ ⎦


0 1 2 1 2 ⎤ ⎡ 1 ⎤ ⎥ ⎥ ⎦ ⎥ ⎥ ⎥ ⎢
0 1 2 1 2 ⎤ ⎡ 1 ⎤ ⎥ ⎥ ⎦ ⎥ ⎥ ⎥ ⎢

0 -1 2 1 2

1 - 3 2 1
1
- 3 2
1

2

2 ⎦ ⎥ ⎣ ⎢ 5

=

7 2

⎢ ⎢ 1

2


3 2

= ⎡ 7 2 ⎤ ⎢ ⎢ ⎢ 1 ⎣ ⎦ 2 ⎥ ⎥ ⎥ 3
= ⎡ 7 2 ⎤ ⎢ ⎢ ⎢ 1 ⎣ ⎦ 2 ⎥ ⎥ ⎥ 3
= ⎡ 7 2 ⎤ ⎢ ⎢ ⎢ 1 ⎣ ⎦ 2 ⎥ ⎥ ⎥ 3
= ⎡ 7 2 ⎤ ⎢ ⎢ ⎢ 1 ⎣ ⎦ 2 ⎥ ⎥ ⎥ 3
= ⎡ 7 2 ⎤ ⎢ ⎢ ⎢ 1 ⎣ ⎦ 2 ⎥ ⎥ ⎥ 3

-1 2 - 3 2

]

1

2

⎣ ⎢

5 ⎥ ⎦

=

17

2

Esempio: Applicazione del Simplesso (Cont.)

Test di Ottimalità: calcolo di z j – c j per j N

z

j

(

z 4

(

z 5

- c

j

=

)

c =

4

c

T

B

1

B

A

a

[

- 2 -1 0

j

]

B = {2,1,3}

N = {4,5}

c

j

j

N

] B = { 2,1,3 } N = { 4,5 } − c j ∀ j

0 =

[

{ 2,1,3 } N = { 4,5 } − c j ∀ j ∈ N −
{ 2,1,3 } N = { 4,5 } − c j ∀ j ∈ N −

0 -1 2 - 3 2

= { 4,5 } − c j ∀ j ∈ N − 0 = [ 0

0 =

[

} − c j ∀ j ∈ N − 0 = [ 0 -1 2 -
} − c j ∀ j ∈ N − 0 = [ 0 -1 2 -

0 -1 2 - 3 2

]

]

0 ⎤ ⎥ ⎥ 0 ⎥ ⎦

1

0

1 ⎥ ⎦

0

⎣ ⎢

0

0 =

=

3

2

1

2