School Work

Análise de Soluções para o Problema dos Postos de Combustível através de Programação Dinâmica e Algoritmos Gulosos

Description
Este artigo apresenta soluções através de programação dinâmica e algoritmos gulosos para o problema dos postos de combustível. Tal problema consiste em obter o menor número de paradas para abastecimento em um trajeto, onde se conhece a autonomia do veículo e as distâncias entre cada posto de combustível. As soluções obtidas são analisadas e comparadas.
Categories
Published
of 5
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Transcript
  Análise de Soluções para o Problema dos Postos deCombustível através de Programação Dinâmica e AlgoritmosGulosos Marcos Roberto Ribeiro, Stéfano Schwenck Borges Vale Vita Programa de Pós-Graduação em Ciência da Computação – Universidade Federal deUberlândia (UFU)Uberlândia – MG - Brasil {mribeiro,stefano}@pos.facom.ufu.br  Abstract. This paper present solutions across dynamic programing and greedyalgorithms to the problem of gas station. Such problem is made up of get thelow number of stops for supply in a course, where are known the vehicleautonomy and the distance between each gas station. The solve solutions areanalyzed and compared.  Resumo. Este artigo apresenta soluções através de programação dinâmica ealgoritmos gulosos para o problema dos postos de combustível. Tal problemaconsiste em obter o menor número de paradas para abastecimento em umtrajeto, onde se conhece a autonomia do veículo e as distâncias entre cada posto de combustível. As soluções obtidas são analisadas e comparadas. 1.Introdução O problema dos postos de combustível consiste em obter o menor número de paradaspara abastecimento em um trajeto, onde se conhece a autonomia do veículo e asdistâncias entre os postos de combustível existentes no trajeto. A autonomia do veículorefere-se a distância percorrida pelo mesmo após ser abastecido por completo. Deve serconsiderado que as distâncias entre os postos devem ser menores ou iguais a autonomiado veículo, além disso, no ponto inicial o veículo encontra-se totalmente abastecido[Cormen 2002].O problema dos postos de combustível tem diversas aplicações reais, como emprogramas que traçam rotas entre cidades e consideram as paradas para abastecimento.Neste artigo são apresentadas possíveis soluções para o problema descrito, bemcomo as análises de desempenho das mesmas. Os algoritmos presentes neste artigofazem uso de um pseudo-código semelhante a linguagem Pascal.A seção 2 apresenta uma solução com o uso de programação dinâmica sendoconstituída de três subseções. A primeira subseção mostra a subestrutura ótima para oproblema, a segunda obtém a expressão de cálculo e a terceira exibe o algoritmo e aanálise do mesmo.A seção 3 descreve uma solução através do uso de algoritmos gulosos. Estaseção possui duas subseções. Uma subseção contendo o algoritmo com sua análise.Outra contendo a prova de que o algoritmo é correto e a subestrutura ótima.  2.Solução através da Programação Dinâmica A programação dinâmica é uma técnica utilizada na solução de problemas que possuemsubproblemas relacionados, ou seja, os subproblemas compartilham subproblemas. Umasolução convencional trabalharia mais que o necessário, pois resolveria o mesmoproblema mais de uma vez. No caso da programação dinâmica utiliza-se como artifícioo armazenamento das soluções dos subproblemas, assim se o mesmo subproblema forencontrado, não será necessário resolvê-lo novamente [Knuth, 1998]. 2.1.Subestrutura Ótima Uma característica marcante em um problema solucionável através da programaçãodinâmica é a subestrutura ótima. Esta subestrutura representa as soluções ótimas para ossubproblemas e que são necessárias para se chegar a solução ótima do problemaprincipal. No caso do problema dos postos de combustível pode-se considerar que, paraqualquer parada presente na solução ótima, há uma subestrutura ótima antes da parada.Isto é, se tomarmos uma parada qualquer em uma solução ótima, deve existir umnúmero mínimo de paradas para o subpercurso anterior [Brassard and Bratley 1998]. 2.2.Expressão de Cálculo Inicialmente pode-se imaginar uma matriz para armazenar todas as possíveis paradas deum ponto a outro. No entanto, no problema em questão, o trajeto é feito em um únicosentido, assim é necessário armazenar somente as paradas do início até cada posto decombustível.Para resolver o problema dos postos de combustível considera-se a autonomia doveículo; um vetor D, que contem as distâncias entre os postos; um vetor P, paraarmazenar os números de paradas e um vetor DPUP, para armazenar a distânciapercorrida desde a última parada até cada posto de combustível. Considera-se tambémque um ponto no percurso pode ser qualquer posto ou o ponto de chegada. Destamaneira, para determinar o número de paradas até o ponto i tem-se a expressão decálculo exibida na Figura 1. 0, se i 1 ≤ P i P i - 1 + 1, se DPUP i - 1 + D i - 1 > autonomiaP i - 1 0, se i 1 ≤ DPUP i D i - 1 , se DPUP i - 1 + D i - 1 > autonomiaDPUP i – 1 + D i - 1 Figura 1: Expressão de cálculo para obter algoritmo de programação dinâmica 2.3.Algoritmo e Análise Através da expressão de cálculo da Figura 1 é possível obter o algoritmo listado naFigura 2. Pode-se verificar que, para o vetor P a primeira posição é preenchida com  zero, pois não há paradas do ponto inicial até ele mesmo, no vetor DPUP acontece omesmo, pois não há distância restante até o primeiro ponto. As demais posições destesvetores são preenchidas de acordo com os valores já calculados e armazenados nasposições anteriores. algorithm paradas_dinamico(D, n, autonomia) 1. P 1 0 ← 2. DPUP 1 0 ← 3.for i 1 to n + 1 ← 4.do if ( DPUP i - 1 + D i - 1 ) > autonomia5. then P i P ← i – 1 + 16. DPUP i D ← i – 1 7. else P i P ← i – 1 8. DPUP i D ← i - 1 + D i – 1 9.return P n + 1 Figura 2: Algoritmo para solucionar o problema dos postos de combustívelatravés de programação dinâmica Os parâmetros de entrada do algoritmo paradas_dinamico descrito na Figura 2são o vetor “D”, contendo as distâncias entre os postos de combustível; “n” que é onúmero de postos existentes e “autonomia”, que é a distância máxima percorrida peloveículo após um abastecimento[Cormem, 2002].Na análise do algoritmo da paradas_dinamico, constata-se a existência de umlaço que é executado n vezes. Logo, o tempo do algoritmo é O(n). Também deve-seconsiderar o espaço ocupado para armazenar as respostas dos subproblemas, como sãoutilizados dois vetores de tamanho n + 1 , o espaço ocupado será da ordem de O(n).A solução retornada pelo algoritmo será o valor armazenado na posição n + 1 dovetor P, que será a última posição a ser calculada pelo algoritmo. 3.Solução através de Algoritmos Gulosos Os algoritmos gulosos resolvem problemas através de uma escolha gulosa, ou seja, érealizada uma escolha interessante para o momento atual, na expectativa de que talescolha leve a uma solução ótima. A solução ótima pode não acontecer e o algoritmonão funcionar, mas para muitos problemas há uma solução ótima por meio dealgoritmos gulosos trazendo uma enorme vantagem em relação a um algoritmo queutiliza a força bruta [Cormem, 2002]. 3.1.Algoritmo e análise No problema dos postos de combustível a escolha gulosa de uma parada faz com que nopercurso restante haja o mínimo possível de paradas. Desta forma, tem-se o algoritmoparadas_guloso, listado na Figura 3, para solucionar este problema.  algorithm paradas_guloso(D, n, autonomia)1.p 0 ← 2.ultima 0 ← 3.for i ← 1 to n4. do if (D i + ultima) > autonomia5. then p p + 1 ← 6. ultima D ← i 7. else ultima ultima + D ← i 8.return p Figura 3: Algoritmo para solucionar o problema dos postos de combustívelatravés de algoritmos gulosos Os parâmetros de entrada fornecidos para o algoritmo paradas_guloso são osmesmos do algoritmo paradas_dinamico. E o seu tempo é O(n), pois há um laço na linha3 que é executado n vezes. 3.2.Prova e subestrutura ótima Como os algoritmos gulosos podem não funcionar, deve-se provar que o algoritmoparadas_guloso funciona.Teorema: O algoritmo paradas_guloso sempre encontra soluções de tamanhomínimo para o problema dos postos de combustível.Prova: Seja S={s 1 ,s 2 ,...s  j } uma solução ótima qualquer e seja S' uma soluçãoencontrada pelo algoritmo paradas_guloso, cuja primeira parada de acordo com aescolha gulosa é g 1 . Deve-se provar que S' é uma solução ótima de tamanho igual a S.Se s 1 = g 1 então a solução S' é uma solução ótima. Se s 1   ≠ g 1 , de acordo com aescolha gulosa, tem-se que g 1 está após s 1. Assim, se S'={g 1 ,s 2 ,...s k  }, chega-se a umasolução de mesmo tamanho de S. A distância entre g 1 e s 2 não é maior que a distânciaentre s 1 e s 2 e portanto o combustível será suficiente. Como o restante de S' é igual a S,conclui-se que S' é uma solução ótima.No problema dos postos de combustível é possível identificarmos a subestruturaótima, visto que a cada escolha gulosa resta um subproblema equivalente ao srcinal,mas com um número menor de paradas. Ou seja, em um problema P com solução S,após uma parada em “g”, resta um subproblema P' com srcem em “g”, cuja solução éS'. Logo o a solução S do problema P é igual a solução S' do subproblema P' mais um. 4.Conclusão Na análise dos algoritmos paradas_dinamico e paradas_guloso pode-se constatar quepossuem o mesmo tempo. O algoritmo paradas_guloso pode ser considerado melhor,visto que no algoritmo paradas_dinamico é ocupado um espaço O(n). No entanto, semodificarmos o algoritmo paradas_dinamico para retornar o vetor P como resposta,consegue-se um resultado mais completo, já que o vetor P contém o número de paradaspara todos os percursos a partir do ponto inicial.Os algoritmos apresentados através de programação dinâmica e da técnica gulosa
Search
Similar documents
View more...
Tags
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks