120 likes | 239 Views
Planejar uma Rota enunciado do exercício mapa (um caso de teste) características do programa. Planejar Rotas.
E N D
Planejar uma Rota • enunciado do exercício • mapa (um caso de teste) • características do programa
Planejar Rotas Escrever programa que planeja uma rota entre duas cidades fornecendo horários de duração de viagem. O mapa deve incluir quilômetro, condições de estrada e disponibilidade de postos de combustível.
Ribeirão Preto 99km 50min 325km 180min São Carlos Araçatuba 150km 90min 140km 70min Bauru 200km 120min 170km 120min Presidente Prudente 120km 60min Assis Dados não-reais Rota no Mapa
Este exercício é um exemplo de aplicação no PROLOG onde o usuário terá as informações sobre o horário de duração de viagem de uma cidade Origem (Ribeirão Preto) para uma cidade Destino (Assis). A informação sobre a distância, condições de estrada e disponibilidade de posto de combustível também podem ser obtidas como informações extras. Podendo mais tarde, a pesquisa ser incrementado a partir de critérios analisados sobre a disponibilidade de posto de gazolina e as condições da estrada obter o melhor caminho.
A operação abaixo indica que existe um caminho único partindo de 'Origem’ até 'Destino', o qual leva 'Tempo' minutos para ser percorrido numa distância de 'Dist'. 'CondicaoDaEstrada' assumirá os valores mostrados acima conforme as condicões da estrada, e 'DisponibilidadeDePosto' assumira 0 (zero) caso existam postos de combustivel nesse trajeto, ou 1 (hum) caso contrário. estrada(X) - informa as condicões da estrada de acordo com o valor passado para X, onde X = 1...3. X = 1 - será mostrado na tela que a estrada é boa X = 2 - será mostrado na tela que a estrada é media X = 3 - será mostrado na tela que a estrada é ruim arco(Origem,Destino,Tempo,Dist,CondicaoDaEstrada,DisponibilidadeDePosto)
not( member(CidadeX,Historia)), member( ) - verifica se determinada cidade já faz parte da lista de cidades que compõem a rota até a cidade destino. not( ) - nega a existencia de uma cidade na lista de rota, caso a cidade jah tenha sido incluida, isto eh, as cidades jah adicionadas nao serao repetidas na rota.
Foi utilizado o operador matematico de adicao (+) para calcular a distancia total entre a cidade de origem e o destino. Analogamente, esse operador foi empregado para calcular o tempo total de viagem entre a cidade de origem e o destino. Tempo is Tempo1 + T, Distancia is Distancia1 + Dist. Nota-se que a sintaxe nesse caso deve ser, por exemplo, para o tempo : Tempo is Temp1 + T Onde a variavel Tempo recebera o conteudo da variavel Temp1 mais o conteudo de T. Uma sintaxe do tipo:Tempo = Temp1 + T causaria um erro, pois o PROLOG tentaria unificar Tempo com Temp1 + T, que visivelmente sao coisas distintas.
Utiliza-se o operador write( ) para produzir a saída dos resultados na tela, de forma que o usuário possa visualizá-los. Ao final da execucão, o programa mostra a distância total e o tempo total para percorrer de Origem até o Destino. escreve(Rota,CondcaoEstrada,Tempo,Distancia,Origem,Destino):- write('Para ir da cidade '),write(Origem),write(' ate a cidade '), write(Destino), nl, write('O tempo gasto eh '),write(Tempo), nl, write('A distancia total eh '), write(Distancia),nl, escreve(Rota,CE).
Para a resolucão deste problema, foi imprescíndivel o uso de listas para montar a rota das cidades que ligam a Origem ate o Destino. Isso foi feito devido a facilidade de expansão, pois a Base de Conhecimento dos arcos que ligam as cidades pode aumentar. As listas são uma ótima abordagem para o tratamento desse tipo de problema, podendo ser facilmente extraída da lista o primeiro elemento, ou mesmo verificar se determinada cidade já faz parte da lista de rotas.
A utilizacão das estrutura de arcos é importante como forma de diminuir o espaço ocupado pela Base de Conhecimento e diminuir a quantidade de interacões, favorecendo assim a rapidez na resposta. arco(ribeirãoPreto,Araçatuba,180,325,3,1). arco(ribeirãoPreto,sãoCarlos,50,99,1,0). arco(araçatuba,presidentePrudente,120,200,2,0). arco(araçatuba,bauru,90,150,2,1). arco(presidentePrudente,assis,60,120, 1,1). arco(assis,bauru,110,170,3,0).
Poderiamos ter representada a base de conhecimento da seguinte maneira : • dist(cidadeA, cidadeB, Km) • informaria a distancia da cidadeA ateh a cidadeB em Km • duracao(cidadeA, cidadeB, Tempo) • informaria a duracao da viagem da cidadeA ateh a cidadeB em minutos
posto(cidadeA, cidadeB, S) • informaria a disponibilidade de postos de combustivel • entre a cidadeA e a cidadeB, onde S poderia se 1 caso houvessem • postos, ou S seria 0 caso contrario • estrada(cidadeA, cidadeB, Cond) • informaria as condicoes da estrada entre a cidadeA e a cidadeB, onde: • Cond = boa • Cond = media • Cond = ruim