• Nenhum resultado encontrado

4.2 Arquitetura da solu¸c˜ao de planeamento

4.2.1 Algoritmos

O algoritmo de Heap (1963) gera todas as permuta¸c˜oes de n objetos, escolhendo de forma sistem´atica, em cada itera¸c˜ao, um par de elementos que troca para produzir, exatamente uma vez, todas as permuta¸c˜oes poss´ıveis dos elementos. Gera cada permuta¸c˜ao da permuta¸c˜ao anterior, n˜ao redistribuindo os restantes N −2 elementos. Foi escolhido inicialmente para gerar as permuta¸c˜oes de um conjunto de patamares selecionados para cobertura, determinando as sequˆencias poss´ıveis de rotas para a navega¸c˜ao. Contudo, uma vez que os patamares podem ser percorridos nos dois sen- tidos procedeu-se `a sua duplica¸c˜ao. Garantida aos referidos patamares uma diferente designa¸c˜ao, a eles foi aplicado o algoritmo Heap.

Analisada a solu¸c˜ao encontrada, verificou-se em algumas sequˆencias a existˆencia de elementos que correspondiam a movimentos em sentidos distintos num mesmo pata- mar. Assim, foi necess´ario depurar a solu¸c˜ao encontrada, eliminando da sequˆencia as repeti¸c˜oes de movimentos em cada patamar. S´o ent˜ao foi considerada a nova solu¸c˜ao para fazer parte da ´arvore de decis˜ao.

Uma vez que navega¸c˜ao para cobertura da uma zona da vinha pode iniciar-se e terminar num ponto exterior a essa zona, na ´arvore de decis˜ao s˜ao inclu´ıdos como v´ertices o ponto de partida e o ponto de chegada.

No topo da ´arvore (no v´ertice raiz) ´e colocado o ponto de partida. Cada permuta¸c˜ao ´e inserida como ramo e ligada ao v´ertice de partida. No final de cada ramo ´e

4.2. ARQUITETURA DA SOLUC¸ ˜AO DE PLANEAMENTO 125

ligado o v´ertice terminal correspondendo este ao ponto de chegada. Deste modo a ´arvore completa ter´a de conter tantos pontos de chegada quantas as permuta¸c˜oes depuradas.

Apresenta-se de seguida o algoritmo 1 adotado. Algoritmo 1: GeradorHeap

Entrada: n: inteiro, lElem: lista, LP ermut: lista de listas Sa´ıda: LP ermut: lista de listas

in´ıcio se n=1 ent˜ao novaLista←− CriaNovaLista() novaLista= lElem AdicionaListaElem(novaLista, LP ermut) sen˜ao para i = 0; i < n − 1; i + + fa¸ca

GeradorHeap(n − 1,lElem,LP ermut) se n ´e impar ent˜ao

Troca(lElem[i],lElem[i − 1]) sen˜ao Troca(lElem[0],lElem[n − 1]) fim fim fim fim

A procura do caminho ´otimo na ´arvore de decis˜ao faz-se atrav´es do algoritmo Dijks- tra, recorrendo `a fun¸c˜ao de custo adotada, garantindo uma solu¸c˜ao ´otima sem nece- ssidade de varrer todos os ramos da ´arvore, a n˜ao ser que a solu¸c˜ao s´o seja encontrada no final da procura.

A determina¸c˜ao do caminho ´otimo entre o ponto de partida e o extremo do primeiro elemento de cada sequˆencia de permuta¸c˜oes, ´e efetuada por recurso ao algoritmo A∗ aplicado ao grafo do mapa da vinha. O mesmo procedimento ´e adotado para a

126 CAP´ITULO 4. PLANEAMENTO DE TRAJET ´ORIAS EM VINHA DE MONTANHA

e o ponto de chegada; como, ali´as, foi referido atr´as, na subsec¸c˜ao4.1.2. A travessia de uma transi¸c˜ao entre patamares vizinhos na permuta¸c˜ao envolve, do mesmo modo, a procura no grafo do mapa da vinha.

Admitindo que o grafo do mapa da vinha, constitu´ıdo por v´ertices e arestas de estrutura adiante definida (na subsec¸c˜ao 4.2.2), foi preenchido automaticamente, encontrando-se o grafo pesado, para a implementa¸c˜ao do algoritmo A∗ foram utili-

zadas as seguinte estruturas de dados adicionais: uma lista aberta O, para conter o conjunto de v´ertices do grafo a explorar. ´E uma lista ordenada priorit´aria, onde os v´ertices s˜ao colocados de forma a que o primeiro a ser analisado seja o priorit´ario, i.e., o de menor custo acumulado; e uma lista fechada C, para conter os v´ertices do grafo previamente explorados, que j´a estiveram em O.

O algoritmo faz referˆencia a outras vari´aveis cujo significado se resume na Tabela4.1;

Tabela 4.1– Algumas vari´aveis utilizadas pelo algoritmo A∗.

Designa¸c˜ao Implementa¸c˜ao Significado

adj(v) Adjacente(G,v) Conjunto de v´ertices adjacentes ao v´ertice v ci,j CustoGrafV(i,i) Custo da aresta que une os v´ertices vie vj

g(v) Newcost Custo total associado ao percurso de retorno do v´ertice atual, vact, ao v´ertice inicial, vini, soma dos custos acumulados pelas arestas percorridas h(v) Heuristica Fun¸c˜ao heur´ıstica que determina os custos estimados do percurso ´otimo,

do v´ertice atual, vact, ao v´ertice final, vf im

f(v) Priority Custo estimado para o percurso ´otimo entre os v´ertices inicial, vini, e o v´ertice final, vf im, que passa por vact; f (v) = g(v) + h(v),

O algoritmo Dijkstra tem uma estrutura semelhante ao A∗, apenas variando a fun¸c˜ao

de procura que n˜ao contempla h(v) no c´alculo de f (v) em cada itera¸c˜ao, motivo pelo qual n˜ao ser´a apresentado neste documento de tese. Uma vez que o algoritmo Dijks- tra funciona sobre uma ´arvore de v´ertices com tipos distintos (pontos e tro¸cos dos esqueletos) ´e necess´ario, antes de proceder `a recolha do valor dos seus parˆametros,

4.2. ARQUITETURA DA SOLUC¸ ˜AO DE PLANEAMENTO 127

identificar o seu tipo. Este aspeto n˜ao ´e tido em conta na implementa¸c˜ao do algo- ritmo 2.

Algoritmo 2: A∗

Entrada: ini: inteiro, f im: inteiro, G: GraphV Sa´ıda: S: ListaVertices in´ıcio vini←− VerticeGrafo(ini) vf im←− VerticeGrafo(f im) O ←− CriaPriorityQueue() C ←− {(vini, vini)} costSoF ar ←− {(vini, 0)}

O.PUSH(vini, GetNodeCost())

enquantoContaElem(O) > 0 fa¸ca vact ←− O.POP()

seIdent(vact)=vf iment˜ao

BREAK fim

para cadaprox ∈ Adjacente(G, vact) fa¸ca

a ←− Custo(costSoF ar [vact])

b ←− CustoGrafV(vact,prox)

N ewcost ←− a + b

se((prox /∈ Vertice(costSoF ar)) ∨ (N ewcost < Custo(costSoF ar[prox]))) ent˜ao

costSoF ar = costSoF ar ∪ {(prox, N ewcost)} P riority ←− N ewcost+ Heuristic(vact, vf im) O.PUSH(prox, P riority) C ←− C ∪ {(prox, vact)} fim fim fim vC ←− vf im S ←− {vC} termina ←− false

enquanto!termina fa¸ca vC ←− C[vC]

S.PUSH-FRONT(vC) termina ←− (vC==vini)

fim fim

128 CAP´ITULO 4. PLANEAMENTO DE TRAJET ´ORIAS EM VINHA DE MONTANHA

No documento Navegação autónoma em terreno vinhateiro (páginas 156-160)