• Nenhum resultado encontrado

AULA 10 META-HEURÍSTICAS NO RV

N/A
N/A
Protected

Academic year: 2019

Share "AULA 10 META-HEURÍSTICAS NO RV"

Copied!
45
0
0

Texto

(1)

AULA 10

META-HEURÍSTICAS NO RV

Autor: Anibal Tavares de Azevedo

INTRODUÇÃO À META-HEURÍSTICAS

(2)

1 2

3 4 5

6 7

8 9

10

11 12

13 14

Roteamento de Veículos

0

1 2

3 4 5

6 7

8 9

10

11 12

13 14

Roteamento de Veículos

0

2 1

3 4 3

4 2

6

3

1

3 3

3 1

(3)

1 2

3 4 5

6 7

8 9

10

11 12

13 14

0

2 1

3 4 3

4 2

6

3

1

3 3

3 1

10

10

10 10

1 2

3 4 5

6 7

8 9

10

11 12

13 14

Roteamento de Veículos

0

(4)

1 2

3 4 5

6 7

8 9

10

11 12

13 14

Roteamento de Veículos

0

N = C

{0, n+1}

1 2

3 4 5

6 7

8 9

10

11 12

13 14

Roteamento de Veículos

0

(5)

1 2

3 4 5

6 7

8 9

10

11 12

13 14

n+1

E = {(i,j): i, j

N,

i

≠≠≠≠

j, i

≠≠≠≠

n+1, j

≠≠≠≠

0}

1 2

3 4 5

6 7

8 9

10

11 12

13 14

Roteamento de Veículos

n+1

(6)

i j xij

Variáveis de Decisão

Xijk= 1 se o veículo k vai do nó i para o nó j.

x

i jk

Origem

(Cidade i)

(Cidade j)

Destino

Veículo k

Roteamento de Veículos

1

5

2

3 x131

x121

Variáveis de Decisão

x151

4

Xijk= 1 se o veículo k vai do nó i para o nó j. x141

x411 x311

x211

x511

(7)

1

5

2

3 x131

x121

Dado o veículo 1 na cidade 1, qual será a próxima cidade?

x151

4 x141

x

121

+ x

131

+ x

141

+ x

151

Veículo 1

1

5

2

3 x132

x122

Dado o veículo 1 na cidade 1, qual será a próxima cidade?

x152

4 x142

x

122

+ x

132

+ x

142

+ x

152

Roteamento de Veículos

(8)

1

5

2

3 x133

x123

Dado o veículo 1 na cidade 1, qual será a próxima cidade?

x153

4 x143

x

123

+ x

133

+ x

143

+ x

153

Roteamento de Veículos

Veículo 3

1

5

2

3 x134

x124

Dado o veículo 1 na cidade 1, qual será a próxima cidade?

x154

4 x144

x

124

+ x

134

+ x

144

+ x

154

= 1

Roteamento de Veículos

(9)

i

5

2

3 xijk

4

Dado o veículo k na cidade i, qual será a próxima cidade j?

C

i

,

1

=

∑ ∑

K

k j N ij

x

MAS...

1

4

2

3

5

6 7

As restrições anteriores permitem a existência de sub-rotas !! 1

4

2

3

5

6 7

(10)

1

5

2

3 x211

Eliminação de sub-rotas com dois nós

4

x121

x

121

+ x

211

≤≤≤≤

1

Roteamento de Veículos

1 2

x211

Eliminação de sub-rotas com dois nós

x121

x

121

+ x

211

≤≤≤≤

1

(11)

1 2 x211

Eliminação de sub-rotas com dois nós

x121

x

121

+ x

211

≤≤≤≤

1

1 2

x211

x121

ou

1 2

x211

Eliminação de sub-rotas com dois nós

x121

x

121

+ x

211

≤≤≤≤

1

1 2

x211

x121

1 2

x211

x121

ou

ou

(12)

1

5

2

3 x211

Eliminação de sub-rotas com dois nós

4

x121

x131

x311 x141

x411 x511

x151

x

ijk

+ x

jik

≤≤≤≤

1

Roteamento de Veículos

1

5

2

3 Eliminação de sub-rotas com três nós

4

x121

x231

x311

x

121

+ x

231

+ x

311

≤≤≤≤

2

(13)

1

5

2

3 Eliminação de sub-rotas com três nós

4

x

ijk

+ x

jtk

+ x

tik

≤≤≤≤

2

1

5

2

3 Eliminação de sub-rotas com três nós

4

Roteamento de Veículos

K k S C S S x S j i

ijk  ∀ ∈

(14)

A demanda total da rota não excede a capacidade do veículo k

Roteamento de Veículos

1 2

3 4

0

2 1

3 4

10

x301

x041 x421 x211

x131

d

0

x

041

+ d

4

x

421

+ d

2

x

211

+ d

1

x

131

+ d

3

x

301

≤≤≤≤

10

Problema de Designação

1 2

3 4

0

2 1

3 4

10

K

,

∑ ∑

∈ ∈

k

Q

x

d

C

i j N

ijk i

(15)

5

2

3 x133

x123

x153

4 x143

x

023

+ x

033

+ x

043

+ x

053

= 1

Veículo 3

0

Restrição de Fluxo em Redes: Veículo sai do depósito 1 só vez

5

2

3 x133

x123

Restrição de Fluxo em Redes: Veículo sai do depósito 1 só vez

x153

4 x143

Roteamento de Veículos

Veículo 3

0

K

k

x

N j

jk

=

(16)

Problema de Designação

1

Restrição de Fluxo em Redes: Deixar o nó somente se entrou

x

213

+ x

313

+ x

413

+ x

513

= 0

x213 x313

x413 x513

Veículo 3

Problema de Designação

1

K

C,

,

0

=

∈ ∈

k

h

x

x

N

i j N

hjk ihk

(17)

5

2

3 x133

x123

x153

4 x143

X

2,n+1,3

+ x

3,n+1,3

+ x

4,n+1,3

+ x

5,n+1,3

= 1

Veículo 3

n+1

Restrição de Fluxo em Redes: Veículo sai do depósito 1 só vez

Restrição de Fluxo em Redes: Retornar ao nó n+1 somente 1 vez

5

2

3 x3,n+1,3

x2,n+1,3

x5,n+1,3

4 x4,n+1,3

Veículo 3

n+1

K

k

x

N i

k n

i

=

∈ +

,

1

, 1 ,

(18)

S.a.:

MODELO COMPLETO GERAL

Roteamento de Veículos

C

i

,

1

=

∑ ∑

K

k j N

ij

x

K k S C S S x S j i

ijk  ∀ ∈

   ≤ ≤ ⊂ − ≤

∈ ; 2 n 2 ; , 1 ,

K

,

∑ ∑

∈ ∈

k

Q

x

d

C i j N

ijk i

K C,

,

0 ∀ ∈ ∀ ∈ = −

∈ ∈ k h x x N

i j N hjk ihk

K

k

x

N j

jk

=

,

1

0 K k x N i k n

i = ∀ ∈

∈ + , 1 , 1 , E K ijk

B

x

Min

∑ ∑

= ∈

K

k i j E ijk ij

x

c

1(, )

custo para realizar percorrer a rota i-j

REPRESENTAÇÃO

(19)

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

SOLUÇÃO

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

(20)

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

META-HEURÍSTICA PARA O PRV

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

(21)

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

(22)

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

META-HEURÍSTICA PARA O PRV

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

5

1 4

2 3

1 2 4 1 3 5

(23)

Tarefa 1: Escrever função em Scilab que desenhasolução do PCV.

+

Cidade Coord. X Coord. Y

1 x1 y1 2 x2 y2 3 x3 y3 4 x4 y4 5 x5 y5

=

1 2 4 1 3 5

SOLUÇÃO

REPRESENTAÇÃO - VÉRTICES

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8

5

1 4

2 3

1 2 4 1 3 5

(24)

Vértice Coordenada X Coordenada Y

1 7 1

2 11 4

3 10 7

4 6 5

5 2 6

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8 5 1 4 2 3

META-HEURÍSTICA PARA O PRV

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8 Índice 1 2 4 1 3 5 5 1 4 2 3

(25)

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 Índice 1 2 3 1 4 5 5 1 4 2 3 function tspgraf(ind,x,y) clf(gcf(),'clear'); set(gca(),"auto_clear","off"); x = x(ind); // Reordenar usando ind. y = y(ind);

plot(x,y,'ob'); xi = [x x(1)]; yi = [y y(1)]; plot(xi,yi,'-r');

//obtendo manipulador dos eixos a=get("current_axes");

a.data_bounds=[min(x)-1,min(y)-1;max(x)+1,max(y)+1];

endfunction

Desenho 1: desenhar os pontos.

Permitir que 2 desenhos na mesma figura.

Desenho 2: desenhar cada caminho com as linhas.

Limites do gráfico para visualizar a rota ! FUNÇÃO VRPGRAF

(26)

function tspteste(ind)

ind = [1 2 4 1 3 5]; // Ordem.

x = [2 6 8 11 13]; y = [2 2 7 5 7];

vrpgraf(ind,x,y);

endfunction

Ordem para percorrer os clientes.

Coordenadas dos pontos

Chamada para desenhar a rota escolhida FUNÇÃO VRPTESTE

META-HEURÍSTICA PARA O PRV

Tarefa 2: Escrever função em Scilab que avaliasolução do PRV.

+

Cidade Coord. X Coord. Y

1 7 1

2 11 4

3 10 7

4 6 5

5 2 6

=

27.90 km

META-HEURÍSTICA PARA O PRV

(27)

function [dist] = vrpdist(ind,M)

ind = [ind; ind(1)];

n = length(ind);

dist = 0;

for i=1:(n-1)

dist = dist + M(ind(i),ind(i+1)); end

endfunction

Total de ligações entre os pontos

Índices da ordem das cidades p/ percorrer

Cálculo da distância total da rota, usando matriz de

distância M(cidade i, cidade j). FUNÇÃO VRPDIST

function [M]=vrpmatrix(x,y)

n = length(x);

for i=1:n

for j=1:n

d=(x(i)-x(j))^2+(y(i)-y(j))^2;

M(i,j) = sqrt(d);

end

end

endfunction

Calcular as distâncias de i para todas as j demais. Número de pontos: linhas

e colunas de M

Cálculo distância de i p/ j. FUNÇÃO VRPMATRIX

x xi

xj yj

yi xj - xi yj -yi d

(28)

Tarefa 3: Escrever função em Scilab que verificafactibilidade.

+

Cidade Demanda

1 0

2 4

3 4

4 4

5 4

=

OK

META-HEURÍSTICA PARA O PRV

1 2 4 1 3 5 CAP.

10

function [fact] = verifvrp(ind,dem,cap)

n = length(ind);

uso = 0; fact = 1;

for i=1:(n-1)

if (ind(i+1) ~= 1) then

uso = uso + dem(ind(i+1)); if (uso > cap) then

fact = 0; break; end else

uso = 0; end

end endfunction

Assume factibilidade e verifica uso cap nas rotas.

Índices da ordem dos pontos p/ percorrer

Verificação do uso da capacidade por rota. Enquanto não encontra 1

(depósito) acumula demandas dos clientes. FUNÇÃO VERIFVRP

(29)

HEURÍSTICA “VIZINHO MAIS PRÓXIMO” ADAPTADA

Tarefa 3: Escrever função em Scilab que aplica “vizinho + próximo”.

+

Cidade Coord. X Coord. Y

1 2 2

2 6 2

3 8 7

4 11 5 5 13 7

=

1 2

3

META-HEURÍSTICA PARA O PRV

(30)

function [sol]=nearestnprv(x,y,dem,cap)

// Cálculo da matriz de distâncias.

[M]=vrpmatrix(x,y); n = length(x);

// Conjunto de vertices candidatos.

V = 2:n;

// Escolhendo a 1a. Cidade aleatoriamente.

ind = 1; //round(rand()*(n-3))+2; // Depósito incluído na 1a. rota.

sol = [1; V(ind)]; len = length(V);

V = [V(1:ind-1) V(ind+1:len)];

// Laço para construir soluções factíveis. // vide código ao lado.

endfunction

FUNÇÃO NEARESTNPRV

META-HEURÍSTICA PARA O PRV

// Laço p/ incluir os n-1 ptos em rotas.

for i=1:(n-2)

menor = M(sol(i),V(1)); elem = V(1);

ind = 1;

for j=2:length(V)

if (menor > M(sol(i),V(j))) then menor = M(sol(i),V(j)); elem = V(j); ind = j; end end

// Atualizando V e sol.

cand = [sol; elem];

// Verificando fact. da rota.

[fact] = verifvrp(cand,dem,cap);

// Incluir pto.

if (fact == 1) then sol = [sol; elem];

// Incluir deposito: Nova rota.

else

sol = [sol; 1; elem]; end

len = length(V);

V = [V(1:ind-1) V(ind+1:len)]; end

function vrpteste2 // Vértices. x = [7 11 10 6 2]; y = [1 4 7 5 6]; d = [0 4 4 4 4]; cap = 10;

// Aplicando heuristica construtiva. [sol]=nearestnprv(x,y,d,cap);

// Gráfico da solução obtida. vrpgraf(sol,x,y);

// Distância total percorrida. [M]=vrpmatrix(x,y);

[dist] = vrpdist(sol,M); endfunction

FUNÇÃO VRPTESTE2

META-HEURÍSTICA PARA O PRV

(31)

ALGORITMO GULOSO PARA O PRV (VRP)

1

2

3

4

5

A SOLUÇÃO PODE SER MELHOR? COMO FAZER?

SELECIONAR 2 ARESTAS DE 2 ROTAS E RECONECTAR !

DESSA FORMA, “CRUZAMENTOS” ENTRE ROTAS SÃO ELIMINADOS

1

2

3

4

(32)

MINHA PRIMEIRA META-HEURÍSTICA

VIZINHANÇA - “2-OPT”

VIZINHANÇA - “2-OPT”

Todos os cruzamentos que dependem da escolha de dois vértices simultaneamente serão eliminados

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8

5

1 4

2 3

1 2 4 1 3 5 1 2 3 1 4 5

(33)

VIZINHANÇA - “2-OPT”

Todos os cruzamentos que dependem da escolha de dois vértices simultaneamente serão eliminados

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8

5

1 4

2 3

1 2 4 1 3 5 1 2 3 1 4 5

5 6

1 2

4

3

VIZINHANÇA - 2-OPT

1 2 3 6 5 4

“FLIP”

5 6

1 2

4

3

1 2 3 4 5 6 1 2 3 6 5 4

1 2 3 4 5 6

(34)

9

1 7 8

4

VIZINHANÇA - “2-OPT”

1 2 3 5 6 7 1 4 8 9 1 0

“FLIP”

1 0

5 3

2

9

1 7 8

4 1 2 3 4 1 6 7 5 8 9 1

0

1 0

5 3

2

META-HEURÍSTICA PARA O PRV

MINHA PRIMEIRA META-HEURÍSTICA

(35)

1 2 3 5 6 7 1 4 8 9 1 0

function [sol2]=flipvrp(sol, p1, p2 )

n = length(sol);

for i=1:(p1-1) sol2(i) = sol(i); end

for i=p1:p2

sol2(i) = sol(p2-(i-p1)); end

for i=(p2+1):n

sol2(i) = sol(i); end

endfunction

PONTOS DE “CORTE”

1 2 3 4 1 7 6 5 8 9 1 0

p1 p2

VIZINHANÇA - 3-OPT

Escolher simultaneamente 3 arcos para serem modificados: 3 arcos serão

eliminados e 3 novoscriados !

(36)

VIZINHANÇA - λ λ λ λ-OPT

META-HEURÍSTICA PARA O PCV

5

6

1 2

4

3

1 4 5 2 3 6

5

6

1 2

4

3

1 2 3 4 5 6 VIZINHANÇA - 2-OPT ××××3-OPT

(37)

VIZINHANÇA -2-OPT××××3-OPT

5

6

1 2

4

3

1 4 5 2 3 6

5

6

1 2

4

3

5

6

1 2

4

3

1 2 3 6 5 4

5

6

1 2

4

3

1 2 3 4 5 6 1 4 5 6 3 2

Tarefa 5: Escrever SA em Scilab resolve o PRV.

(38)

function [s, f] = saprv(x,y,dem,cap,Tmax,Tmin,Miter,alfa) T = Tmax; n = length(x);

[s] = nearestnprv(x,y,dem,cap);

[M] = vrpmatrix(x,y); f = vrpdist(s,M); delta = 0.0;

while (T > Tmin) iter = 0;

while (iter <= Miter)

p1=round(rand()*(n-2))+2; p2=round(rand()*(n-p1)); [si] = flipvrp(s,p1,p2);

delta=vrpdist(si,M)-vrpdist(s,M); if (delta <= 0) then

s = si;

f = vrpdist(si,M) else

aux = rand();

if (aux < exp(-delta/T)) then s = si;

f = vrpdist(si,M); end

end

iter = iter + 1; vrpgraf(s,x,y); end

T = T*alfa end

endfunction

FUNÇÃO SAPRV – VIZINHO ALEATÓRIO

Problema de Minimização

Desenho melhor solução

META-HEURÍSTICA PARA O PRV

FUNÇÃO SAPRV – VIZINHO ALEATÓRIO

function [s, f] = saprv(x,y,dem,cap,Tmax,Tmin,Miter,alfa) T = Tmax; n = length(x);

[s] = nearestnprv(x,y,dem,cap);

[M] = vrpmatrix(x,y); f = vrpdist(s,M); delta = 0.0;

while (T > Tmin) iter = 0;

while (iter <= Miter)

p1=round(rand()*(n-2))+2; p2=round(rand()*(n-p1)); [si] = flipvrp(s,p1,p2);

delta=vrpdist(si,M)-vrpdist(s,M); if (delta <= 0) then

s = si;

f = vrpdist(si,M) else

aux = rand();

if (aux < exp(-delta/T)) then s = si;

f = vrpdist(si,M); end

end

iter = iter + 1; vrpgraf(s,x,y); end

T = T*alfa end

endfunction

(39)

function testesaprv

x = [7 11 10 6 2]; y = [1 4 7 5 6]; d = [0 4 4 4 4]; cap = 10;

Tmax = 1000; Tmin = 100; Miter = 10; alfa = 0.95;

[s, f] =

saprv(x,y,d,cap,Tmax,Tmin,Miter,alfa)

endfunction

Cidade Coord. X

Coord. Y

1 2 2

2 6 2

3 8 7

4 11 5

5 13 7

Tarefa 6: Modificar o código do SA anterior p/ manter melhor sol.

(40)

VIZINHANÇA -INSERÇÃO DE PONTOS

Uma rota pode ser adicionar um vértice de outra rota desde que a rota resultante permaneça factível

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8

5

1 4

2 3

1 2 4 1 3 5 1 2 3 4 1 5

META-HEURÍSTICA PARA O PRV

2

1 3 4 5 6 7 8 9 10 11 12 13 14

1 2 3 4 5 6 7 8

5

1 4

2 3

META-HEURÍSTICA PARA O PRV

VIZINHANÇA -INSERÇÃO DE PONTOS

1 2 4 1 3 5 1 2 3 4 1 5

(41)

Tarefa 8: Escrever Tabu Search em Scilab resolve o PRV.

Tarefa 9: Usar os dados da biblioteca TSPLIB.

https://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/

(42)

Tarefa 8: Usar os dados da biblioteca TSPLIB.

META-HEURÍSTICA PARA O PRV

cap Pto x y

Pto dem

function [x, y, dem, cap] = leituraprv(fname,f) fid = mopen(fname, "r");

if (fid == -1)

error("cannot open file for reading"); end

// Leitura das primeiras 5 linhas. aux = mgetl(fid,3);

aux = mfscanf(fid,"%s"); aux = mfscanf(fid,"%s"); n = mfscanf(fid,"%d"); aux = mgetl(fid,1);

aux = mgetl(fid,1); // Leitura da linha 6. aux = mfscanf(fid,"%s"); aux = mfscanf(fid,"%s"); cap = mfscanf(fid,"%f"); aux = mgetl(fid,1);

aux = mgetl(fid,1); for i=1:n

ind = mfscanf(fid,"%d"); x(1,ind) = mfscanf(fid,"%f"); y(1,ind) = mfscanf(fid,"%f"); end

FUNÇÃO LEITURAPRV – DADOS DO PRV

Garantir abertura do arquivo

Número de dados

Dados p/ eliminar

Capacidade e dados (x,y).

(43)

aux = mgetl(fid,1); aux = mgetl(fid,1); for i=1:n

ind = mfscanf(fid,"%d"); dem(1,ind) = mfscanf(fid,"%f"); end

mclose(fid);

endfunction

FUNÇÃO LEITURAPRV – DADOS DO PRV (CONT.)

Dados dem

Novo código p/ leitura da demanda !

function prvteste3

[f,diret]=uigetfile(['*.*']);

fname = diret+'\'+f;

[x, y, dem, cap] = leituraprv(fname,f);

[sol]=nearestnprv(x,y,dem,cap);

vrpgraf(sol,x,y);

endfunction

FUNÇÃO PRVTESTE3 – PROGRAMA PRV

Menu para localizar arquivos

Nome arquivo

Leitura dados

Solução + gráfico associado

(44)

Tarefa 9: Considerar e resolver o PRV com instâncias da TSPLib.

META-HEURÍSTICA PARA O PRV

Tarefa 9: Implementar 2 heurísticas clássicas pelo menos.

(45)

Tarefa 9: Implementar 1 metaheurística além do SA.

Referências

Documentos relacionados

Uma vez apresentadas as perguntas de pesquisa, pode-se afirmar que objetivo principal foi identificar as impressões sobre o início da docência e contextos vivenciados por 10

Meta-aprendizagem aplicado para seleção de meta-heurísticas sintonizadas por método de corrida Framework Espaço das meta-caracteristicas Representação baseada em grafo

Fazendinha, i naquela época o Alceu, elis morava na Concórdia, a mãinha, o pai deli, na época elis era novo, né, elis morava lá, eli num lembra muito bem do primeiro anu Qui eu

Considerando que o experimento não alterou a área do citoplasma dos neurônios deste estudo, sugere-se que essa redução da área nuclear seja a principal responsável pela

Os principais aprimoramentos realizados neste diagnóstico foram: utilização de três espectrômetros para medidas simultâneas das emissões de hidrogênio,

consulta parecida com a nossa linguagem natural, o sistema inteligente tornará decisões , através de seu banco de regras, onde obterá infonnações acerca de quais

[r]

Por isso, este trabalho teve como objetivo apresentar parte da História da Matemática que envolveu um de seus grandes personagens, PITÁGORAS DE SAMOS, além da história do