<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos João Ataíde - Estatidados</title>
	<atom:link href="http://estatidados.com.br/category/professores-colaboradores/joao-ataide/feed/" rel="self" type="application/rss+xml" />
	<link>http://estatidados.com.br</link>
	<description>Comunidade de Estatística</description>
	<lastBuildDate>Thu, 09 Jun 2022 20:09:25 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.5</generator>
	<item>
		<title>Otimização de cargas com algoritmo genético</title>
		<link>http://estatidados.com.br/otimizacao-de-cargas-com-algoritmo-genetico/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=otimizacao-de-cargas-com-algoritmo-genetico</link>
					<comments>http://estatidados.com.br/otimizacao-de-cargas-com-algoritmo-genetico/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 11 Feb 2021 14:41:11 +0000</pubDate>
				<category><![CDATA[ciencia de dados]]></category>
		<category><![CDATA[Inteligência de negócios]]></category>
		<category><![CDATA[João Ataíde]]></category>
		<category><![CDATA[Pesquisa Operacional]]></category>
		<guid isPermaLink="false">http://estatidados.com.br/?p=548</guid>

					<description><![CDATA[<p>Me deparei a alguns dias com uma problema de uma área a qual ainda não havia estudado, quando um amigo, dono de uma frota de caminhões me pediu para realizar uma distribuição de encomendas em uma região, no entanto, ele<a class="leiamais" href="http://estatidados.com.br/otimizacao-de-cargas-com-algoritmo-genetico/" title="Otimização de cargas com algoritmo genético">...[Continuar lendo]</a></p>
<p>O post <a rel="nofollow" href="http://estatidados.com.br/otimizacao-de-cargas-com-algoritmo-genetico/">Otimização de cargas com algoritmo genético</a> apareceu primeiro em <a rel="nofollow" href="http://estatidados.com.br">Estatidados</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img width="1024" height="605" src="http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-1024x605.jpg" alt="" class="wp-image-549" srcset="http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-1024x605.jpg 1024w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-300x177.jpg 300w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-768x454.jpg 768w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-1536x908.jpg 1536w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-2048x1211.jpg 2048w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-200x118.jpg 200w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-400x236.jpg 400w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-1000x591.jpg 1000w, http://estatidados.com.br/wp-content/uploads/2021/02/68747470733a2f2f7374617469632e7769787374617469632e636f6d2f6d656469612f6264643763625f66373735373265623835643034393638383938376339363764393033383130347e6d76322e6a7067-803x475.jpg 803w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Me deparei a alguns dias com uma problema de uma área a qual ainda não havia estudado, quando um amigo, dono de uma frota de caminhões me pediu para realizar uma distribuição de encomendas em uma região, no entanto, ele queria utilizar o máximo de espaço de seus caminhões, usar o máximo de peso suportado e maximizar o seu lucro na entrega das encomendas, levando em consideração que para quanto maior o valor da carga geral maior será lucro nas entregas.</p>



<p>Então &#8230; pesquisando como iria resolver esse problema, achei uma área na qual hoje dedico boa parte do meu tempo para estuda-la, chamado de <strong>Algoritmos Genéticos</strong>. Esse tipo de algoritmo de inteligência computacional funciona como um processo de evolução de espécies (esse mesmo que você está pensando), a famosa teoria da evolução de Darwin, mas não muito como essa imagem que vemos aqui em baixo, a qual só leva em consideração meio que um &#8220;salto evolutivo&#8221;.</p>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_bf1cd23378f841a38136a04ac2cf73dd~mv2.png/v1/fit/w_300,h_300,al_c,q_5/file.png" alt=""/></figure>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_bf1cd23378f841a38136a04ac2cf73dd~mv2.png/v1/fill/w_422,h_281,al_c,q_90,usm_0.66_1.00_0.01/bdd7cb_bf1cd23378f841a38136a04ac2cf73dd~mv2.webp" alt=""/></figure>



<p>Mas, mais como uma explicação genética em especial o processo reprodutivo das espécies, nas quais sofrem um fenômeno chamado de <em>crossover, </em>que &#8220;mistura&#8221; parte do DNA de um pai e de uma mãe, além dos efeitos ambientais que podem causar a famosa mutação (mas não essa do X-men), esses dois fenômenos modificam a genética com o tempo ou gerações, adaptando as espécies ao ambiente devido a &#8220;sobrevivência das espécies&#8221;, onde estas que sobreviverem tem mais facilidade de reproduzir.</p>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_d97d40292f8040e49c1c690777dea206~mv2.png/v1/fit/w_300,h_300,al_c,q_5/file.png" alt=""/></figure>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_d97d40292f8040e49c1c690777dea206~mv2.png/v1/fill/w_457,h_259,al_c,q_90,usm_0.66_1.00_0.01/bdd7cb_d97d40292f8040e49c1c690777dea206~mv2.webp" alt=""/></figure>



<p>É exatamente esse processo que simulamos quando estamos fazendo um algoritmo genético, e como fazemos isso? Posso dizer a você que é muito simples. Só é preciso criar uma polução de indivíduos, os quais possuíram em seu gene valores binários que indicarão se o caminhão levará ou não os produtos.</p>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_b3d88c3982274794b7edb10d03bb7575~mv2.png/v1/fit/w_300,h_300,al_c,q_5/file.png" alt=""/></figure>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_b3d88c3982274794b7edb10d03bb7575~mv2.png/v1/fill/w_502,h_178,al_c,q_90,usm_0.66_1.00_0.01/bdd7cb_b3d88c3982274794b7edb10d03bb7575~mv2.webp" alt=""/></figure>



<p>Todo o processo básico de um algoritmo genético se define basicamente a partir desse fluxograma abaixo, desde a criação da população, fitness, selection até a otimização.</p>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_8ea7e47f5711471a93105f2fd5404851~mv2.png/v1/fit/w_300,h_300,al_c,q_5/file.png" alt=""/></figure>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_8ea7e47f5711471a93105f2fd5404851~mv2.png/v1/fill/w_568,h_232,al_c,q_90,usm_0.66_1.00_0.01/bdd7cb_8ea7e47f5711471a93105f2fd5404851~mv2.webp" alt=""/></figure>



<p>Adaptado de Eyal Wirsansky, 2020</p>



<p>Os produtos usados no caminhão foram retirados de uma competição do Kaggle de nome brazilian-ecommerce, o qual possuem vários <em>datasets </em>separados, sendo necessário realizar um <em>join</em> entre os produtos, para que todos as variáveis necessárias para a otimização da carga fosse disponibilizada, assim como vemos na tabela abaixo.</p>



<figure><iframe></iframe></figure>



<p>Outra coisa necessária para simular, são a nossas <em>constraints, </em>sendo o volume máximo do caminhão VUC que é de 5.544,00 cm³ e carga de peso máximo de 4.000.000,00 gramas. Então, o passo agora é criar a classe produto no python e transformar o <em>dataset</em> em lista, com o seguinte código.</p>



<pre class="wp-block-preformatted"><em>#Criar Classe </em><em>do</em><em> Produto</em>
<strong>class</strong> <strong>Produto</strong>():
    <strong>def</strong> __init__(self, nome, pesos, volume, valores):
        self.nome = nome
        self.pesos = pesos
        self.volume = volume
        self.valor = valor

<em>#Transformar em lista</em>
espacos = list(produtos.volume)
valores = list(produtos.preco)
nome = list(produtos.product_id)
pesos = list(produtos.product_weight_g)</pre>



<p>Com isso entramos em uma das partes mais chatinha do algoritmo, que a parte da função de avaliação, onde avaliar qual a melhor população e dar um nota (assim como na evolução lá), dando assim, prioridade para esse se reproduzir na próxima geração. Neste caso, usei a função de avaliação da &#8220;roleta viciada&#8221;, levando em consideração a restrição de peso e espaço do caminhão.</p>



<pre class="wp-block-preformatted"><em>#Criar a função de avaliação</em>
<strong>def </strong>avaliacao(individual):
    nota=0
    soma_espacos=0
    soma_pesos=0

    <strong>for</strong>i <strong>in</strong><strong> </strong>range(len(individual)):
        <strong>if</strong>individual[i]==1:
            nota+=valores[i]
            soma_espacos+=espacos[i]
            soma_pesos+=pesos[i]
            
           <strong>if</strong>soma_espacos &gt; limtie_espacos <strong>and </strong>soma_pesos&gt;limtie_peso:
            nota=1
<strong>return</strong>nota/100000,</pre>



<p>Com tudo isso feito, agora é só a gente chamar o framework de algoritmos evolucionário <a href="https://deap.readthedocs.io/en/master/" target="_blank" rel="noreferrer noopener"><u>DEAP</u></a> , criando oque o frame work chama de <em>Toolbox. </em>Colocando e registrando tudo nessa caixa de ferramenta, a qual será chamada depois para executar a otimização.</p>



<pre class="wp-block-preformatted"><em>#Criar a toolbox</em>
toolbox=base.Toolbox()

<em>#Criando parâmetros na toolbox</em>
creator.create("FitnessMax",base.Fitness,weights=(1.0,))creator.create("Individual",list,fitness=creator.FitnessMax)

<em>#Registrando na toolbox</em>
toolbox.register("attr_bool",random.randint,0,1)
toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_bool,n=len(espacos))
toolbox.register("population",tools.initRepeat,list,toolbox.individual)toolbox.register("evaluate",avaliacao)
toolbox.register("mate",tools.cxOnePoint)
toolbox.register("mutate",tools.mutFlipBit,indpb=0.05)
toolbox.register("select",tools.selRoulette)</pre>



<p>Todo esse processo feito agora é somente executar o algoritmo, colocando usas estatísticas que serão avaliadas, além do número de indivíduos de cada geração (população), a portabilidade de <em>crossover </em>e mutação e o número de gerações.</p>



<pre class="wp-block-preformatted"><em>#Iniciando a toolbox</em>
<strong>if</strong>__name__=="__main__":
    population=toolbox.population(n=24)
    probabilidade_crossover=5.0
    probabilidade_mutação=0.03
    numero_gerações=250
    
    
    estatisticas = tools.Statistics(key=<strong>lambda</strong>individuo:
            individuo.fitness.values)
            
    estatisticas.register("max",np.max)
    estatisticas.register("min",np.min)
    estatisticas.register("med",np.mean)
    estatisticas.register("std",np.std)
    
    populacao,info=algorithms.eaSimple(population,toolbox,
                                         probabilidade_crossover,
                                        probabilidade_mutação,
                                        numero_gerações, estatisticas)</pre>



<p>Chegando então no melhor indivíduo após as 250 gerações, o qual ficou com um valor de R$ 7968387.8, somando 56604 equipamentos, algum desses você pode ver nos cinco primeiros produtos.</p>



<figure><iframe></iframe></figure>



<p>Além disso, podemos também ver como foi o aprendizado do algoritmo em cada época, plotando o valor máximo do melhor do indivíduo das gerações.</p>



<pre class="wp-block-preformatted"><em>#Plotando o aprendizado</em>
valores_pop = info.select("max")
plt.figure(figsize = (12,6))
plt.plot(valores_pop)
plt.show()</pre>



<p>O qual podemos ver, que o melhor indivíduo já foi encontrado logo no começo do algoritmo, mais especificamente na geração 23.</p>



<figure class="wp-block-image"><img src="https://static.wixstatic.com/media/bdd7cb_481f93356a08473996c463e1e5149024~mv2.png/v1/fill/w_637,h_316,al_c,q_90,usm_0.66_1.00_0.01/bdd7cb_481f93356a08473996c463e1e5149024~mv2.webp" alt=""/></figure>



<p>Então é isso, foi um exemplo simples de uso de algoritmo genético, mas que mostrou que com um programação simples é possível gerar a maximização do lucro da empresa, podendo ser melhorado e aplicado para vários problemas de negocio, lá no meu GitHub você pode ver o <a href="https://github.com/jvataidee/PesquisaOperacional/blob/master/otimiza%C3%A7%C3%A3o_caraga_caminh%C3%A3o.ipynb" target="_blank" rel="noreferrer noopener"><u>notebook completo</u></a>.</p>



<p>Espero que tenha gostado do artigo, compartilha se gostou <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>LinkedIn do autor: </p>



<p><a href="https://www.linkedin.com/in/joaoataidee/">https://www.linkedin.com/in/joaoataidee/</a></p>



<p>Post original:</p>



<p><a href="https://github.com/jvataidee/PesquisaOperacional/blob/master/otimiza%C3%A7%C3%A3o_caraga_caminh%C3%A3o.ipynb">https://github.com/jvataidee/PesquisaOperacional/blob/master/otimiza%C3%A7%C3%A3o_caraga_caminh%C3%A3o.ipynb</a></p>



<p>#Otimização #algoritmo #genético</p>
<p>O post <a rel="nofollow" href="http://estatidados.com.br/otimizacao-de-cargas-com-algoritmo-genetico/">Otimização de cargas com algoritmo genético</a> apareceu primeiro em <a rel="nofollow" href="http://estatidados.com.br">Estatidados</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://estatidados.com.br/otimizacao-de-cargas-com-algoritmo-genetico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
