Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 4
Aula 4
Princpios scio-mtricos
A maioria das implementaes de enxame de partculas usam um desses dois princpios sciomtricos.
gbest: cada partcula influenciada pelo melhor desempenho de cada membro da populao inteira. lbest: cria uma vizinhana para cada indivduo contendo a si mesmo e os k vizinhos mais prximos na populao.
Exemplo: Se k = 2, ento cada indivduo i ser influenciado pelo melhor desempenho entre o grupo composto pelas partculas (i-1), i e (i+1). Dois o valor de k mais comum.
Gustavo S. Pavani
Exemplo - lbest
Gustavo S. Pavani
Exemplo - gbest
Gustavo S. Pavani
P(xid(t) = 1) a probabilidade que o indivduo i vai escolher 1 para o bit na posio d na string de bits. xid(t-1) o estado atual da string de bits na posio d do indivduo i. t significa o passo atual da iterao e t-1 o passo anterior. vid (t-1) uma medida da predisposio do indivduo ou a probabilidade atual de decidir por 1. pid o melhor estado descoberto at ento. Por exemplo, 1 se o melhor sucesso do indivduo aconteceu quando xid era 1 ou 0 se ele era 0. pgd o melhor estado da vizinhana. Novamente 1, se o melhor sucesso alcanado por qualquer indivduo da vizinhana aconteceu quando estava no estado 1 e 0, caso contrrio.
Gustavo S. Pavani
Predisposio individual
O parmetro vid(t) determina um limiar de probabilidade, que deve ficar entre 0,0 e 1,0.
Se alto, o indivduo mais propenso a escolher 1. Se baixo, a escolha de 0 favorecida. Limiar implementado com a funo sigmide:
1 s ( v ) id 1 exp( v ) id
Gustavo S. Pavani
representa um nmero aleatrio positivo tirado de uma distribuio uniforme. Normalmente, a soma do limite de dois igual a 4.
vid(t) = vid(t-1)+ 1 (pid - xid(t-1))+ 2 (pgd - xid(t-1)) Se id < s(vid(t)), ento xid(t) = 1. Caso contrrio, 0.
id um vetor de nmero aleatrios, retirados de uma distribuio uniforme entre 0,0 e 1,0.
Essas frmulas so repetidamente iteradas sobre cada dimenso do indivduo, testando toda vez para se ver se o valor atual de xid resulta em uma melhor avaliao de pid, que atualizado se isso acontece.
interessante limitar vid de forma que s(vid) no se aproxime muito de 0,0 e 1,0. Uma constante Vmax pode ser usada para limitar o intervalo de vid. Na prtica, se usa o valor de 4,0, de forma que existe uma pequena probabilidade de se mudar de estado, pois s(4.0) 0,018.
Gustavo S. Pavani
Os indivduos tomam suas decises em uma populao, onde so influenciados pelo sucesso dos seus vizinhos. Como cada deciso do indivduo afetada por (pgd xid(t-1)), que normalmente o sucesso de outro indivduo, a influncia de um sobre outro faz com haja uma tendncia de se moverem juntos para uma mesma posio. medida que um indivduo se aproxima de outro, ele pode ter um melhor desempenho que o vizinho, influenciando-o. Boas decises se espalham pela populao.
Gustavo S. Pavani
Mini-projetos Computacionais
Dado um conjunto de N ns e a distncia entre esses pares de ns, ache um caminho de tamanho mnimo onde cada cidade visitada exatamente uma vez. Grande interesse cientfico e prtico.
Particle Swarm Optimization (PSO). Ant Colony Optimization (ACO). Relatrio nos moldes de trabalho cientfico.
Gustavo S. Pavani
10
Verso Simtrica.
A distncia de um n para outro igual nas duas direes. http://www.iwr.uniheidelberg.de/groups/comopt/software/TSPLIB95/ Distncias so nmeros inteiros. Documentao do formato em: http://www.informatik.uniheidelberg.de/groups/comopt/software/TSPLIB95/DO C.PS
Gustavo S. Pavani
11
Parte especificao
NAME : <string> TYPE : <string>. No nosso caso, TSP COMMENT : <string>. Ex: nome do criador da instncia. DIMENSION : <string>. No nosso caso, nmero de ns. EDGE_WEIGTH_TYPE : <string>
EOF
Gustavo S. Pavani
12
Parte dados
NODE_COORD_SECTION
<inteiro> <real> <real> EDGE_LIST: <inteiro> <inteiro> ADJ_LIST: <inteiro> <inteiro> <inteiro> ... <inteiro> -1 TOUR_SECTION: lista de inteiros dando a sequncia em que cada n visitado. Terminado por 1. EDGE_WEIGTH_SECTION:
EDGE_DATA_SECTION
Gustavo S. Pavani
13
Clculo da Distncia
int xd = x[i] x[j]; int yd = y[i] y[j]; int dij = Math.round(Math.sqrt((double)(xd*xd + yd*yd))); static int PI = 3.141592; static int RRR = 6378.388; int degree = Math.round(x[i]); double min = x[i] degree; latitude[i] = PI * (degree + 5.0*min / 3.0) / 180.0; degree = Math.round(y[i]); min = y[i] degree; longitude[i] = PI * (degree + 5.0*min / 3.0) / 180.0; double q1 = Math.cos(longitude[i] - longitude[j]); double q2 = Math.cos(latitude[i] latitude[j]); double q3 = Math.cos(latitude[i] + latitude[j]); int dij = (int) (RRR* Math.acos(0.5*((1.0 + q1) * q2 (1.0 q1)* q3)) + 1.0);
Gustavo S. Pavani
14
Fazer as classes que so capazes de ler os seguintes arquivos, para montar uma matriz de distncias entre as cidades:
ulysses22.tsp tsp225.tsp
Crie a classe capaz de ler as voltas timas dessas duas instncias (extenso .opt.tour) para testar os mtodos dos clculos de distncias. (EUC_2D e GEO).
15
Gustavo S. Pavani
16