Sunteți pe pagina 1din 5

PESQUISA OPERACIONAL

TRABALHO PROBLEMA DE TRANSPORTE


OBJETIVO
Implementao de uma heurstica utilizando Algoritmo Gentico para
resolver um problema de transporte e comparar com a busca aleatria
utilizando como parmetros estatsticos a mdia, desvio e teste t.

DESCRIO
O trabalho envolve a resoluo por meio de um Algoritmo Gentico e
atravs de busca aleatria. O problema de transporte corresponde a um
problema de programao linear que trata do envio de produtos das fbricas
(centros produtores) para depsitos (centros consumidores). O objetivo desta
programao linear minimizar o custo total do caminho percorrido e
satisfazer as restries de fornecimento e demanda. As restries importantes
a serem obedecidas so que as fbricas no podem produzir mais do que suas
capacidades instaladas e os centros consumidores no desejam receber
produtos acima de suas demandas.
O processo utilizado foi o caminho de execuo tradicional de um
Algoritmo Gentico:
(1) gera um populao inicial;
(2) avalia cada indivduo da populao;
(3) enquanto critrio de parada no for satisfeito:
(3.1) selecionar os indivduos mais aptos
(3.2) criar novos indivduos aplicando os operadores crossover e mutao
(3.3) armazenar os novos indivduos em uma nova populao
(3.4) avaliar cada indivduo da nova populao.
Foi utilizado o Algoritmo Gentico para minimizao do problema de
transporte, pois este tem a capacidade de manter uma populao de indivduos
que podem ser possveis solues para o problema de transporte. O algoritmo
busca as solues atravs de mecanismos da seleo natural e gentica
(cruzamento e mutao) onde os indivduos (solues) que no minimizarem
o custo do problema tendero aos poucos a desaparecer.

O problema hipottico a ser resolvido pelo Algoritmo Gentico e pela


busca aleatria foi o seguinte:
A EMATT uma empresa responsvel pelo transporte terrestre de cargas de soja do
Estado do Maranho que possu cinco polos produtores localizados em Carolina, Balsas,
Colinas, Mates e Tutia. A produo da empresa deve ser entregue em So Lus,
Imperatriz, Pinheiro, Caxias e Chapadinha. Considerando os custos de transporte
unitrios, a capacidade de produo dos polos (em toneladas) e a demanda dos centros
consumidores ilustrados na tabela abaixo, determine quanto deve ser produzido e entregue
por polo em cada centro consumidor, de forma a minimizar os custos de transporte.
Polo /
Centro Consumidor
Carolina
Balsas
Colinas
Demanda

So Lus

Imperatriz

Pinheiro

Capacidade

50
40
25
2500

10
20
25
2000

40
40
25
1500

3000
2500
1500

ESTRUTURAS DO PROBLEMA
Min Z = 50X11 + 10X12 + 40X13 + 40X21 + 20X22 + 40X23 + 25X31 + 25X32+ 25X33
Restries de Oferta (as fbricas no podem
produzir mais do que suas capacidades)

Restries de Demanda (os centros


consumidores no desejam receber
volumes acima de suas demandas)

X11 + X12 + X13 <= 3000

X11 + X21 + X31 = 2500

X21 + X22 + X23 <= 2500

X12 + X22 + X32 = 2000

X31 + X32+ X33 <=1500

X13 + X23 + X33 = 1500

Restries de No-negatividade
Xij >= 0, para i=1,2,3 e j=1,2,3

PARTES DO PROJETO
A codificao do projeto foi realizada com a linguagem de programao
Java utilizando a IDE Eclipse. O projeto foi desenvolvido a partir de dois
pacotes: alg_genetico e busca_aleatoria.

No pacote alg_genetico h quatro classes onde ocorre todo o


processamento do algoritmo gentico: Principal, Indivduo, Populao e
Algoritmo.
No pacote busca_aleatoria h uma classe onde ocorre o processamento
da busca aleatria.

PROCESSO
A classe Principal inicia toda a execuo e so definidos o tamanho da
populao, a quantidade de genes, a taxa de cruzamento, a taxa de mutao, a
quantidade da gerao e a escolha do elitismo.
A classe Individuo uma das classes principais do programa. Ela que
representa o conjunto de valores que sero ou no a soluo para o problema.
Neste trabalho, a representao do indivduo dado atravs de um vetor de
inteiros com 9 (nove) posies. A classe consta de dois construtores:
Individuo(int) para gerar com indivduos aleatrios que comporo a populao
inicial e Indivduos(int []) para gerar indivduos com genes definidos para as
demais populaes. Neste ltimo construtor que acontece o processo mutao.
Vale ressaltar que quando os indivduos so criados a partir do primeiro
construtor, os valores que faro parte dos genes obedecem as restries de
demanda de forma que qualquer indivduo seja sempre vlido. O segundo
construtor auxilia a classe Algoritmo no processo de mutao gerando
indivduos a partir de genes predefinidos e que obedeam as tambm as
restries de demanda a partir do mtodo balanceamento().A importncia
deste mtodo no programa possibilitar que a mutao gere um indivduo
diferente mas que no infrinja as restries de demanda embora sua aptido
seja maior ou menor do que o indivduo de origem.
Na classe Individuo h tambm o mtodo geraAptidao() que gera um
valor a partir da funo objetivo com base nos genes do individuo. Esse
mtodo auxilia a classe Populacao quando esta precisa ser ordenada de forma
crescente ao resultado da funo objetivo.
A classe Populacao tem a funo de representar o conjunto de
indivduos que podem ser a soluo do problema. Tem dois atributos
principais: tamPopulacao, o tamanho da populao, e indivduos, que so os
conjuntos de vetores que armazenam os valores de uma possvel soluo. Esta
classe tem dois contrutores: Populacao(int numGenes, int tamPop), que cria
uma populao com indivduos aleatrios,e Populacao(int tamPop), que cria
uma populao com indivduos sem nenhum valor armazenado. Este segundo

construtor utilizado quando se quer criar uma nova gerao onde primeiro
cria-se os indivduos sem valor algum e depois que estes recebem valores a
partir da populao anterior. Esta classe tem os mtodos ordenaPopulacao(),
que ordena a populao levando em considerao a aptido,
getNumIndividuos(), que retorna a quantidade de indivduos que armazenam
algum valor e verrestricao(), que verifica se um indivduo ao ser criado
obedece as restries do problema de transporte.
A classe Algoritmo tem a funo de realizar o processo de criar uma
nova gerao, efetuar a operao de crossover, mutao e seleo
respectivamente representados pelos mtodos novaGeracao(Populacao
populacao, boolean elitismo), selecaoTorneio(Populacao populacao) e
crossover(Individuo individuo1, Individuo individuo2). No mtodo
novaGeracao() acontece o processo de evoluo onde a nova populao
construda atravs da populao anterior depois de realizada as operaes de
seleo, cruzamento e mutao.No mtodo selecaoTorneio() acontece a
operao seleo e neste trabalho o tipo escolhido foi o de torneio, neste caso,
so escolhidos trs indivduos da populao aleatoriamente e selecionado o
que tiver o menor valor de aptido. No mtodo crossover() acontece a
operao de cruzamento e para realizao deste trabalho o tipo de crossover
utilizado foi o n-pontos. A taxa de cruzamento neste trabalho foi de 60% (0.6)
e a taxa de mutao foi de 3% (0.03).
Vale ressaltar que o cruzamento no programa realizado de forma a
garantir que os indivduos resultantes embora diferentes sempre sejam
vlidos, ou seja, obedeam s restries de demanda.
No pacote busca_aleatoria, a classe Buscaalet faz processo da busca
aleatria. Nesta classe estabelecido um mnimo como critrio de parada e
toma-se como base o mesmo formato de dados utilizado em indivduo do
Algoritmo Gentico para compor valores, um vetor de 9 posies
representado as variveis. Nesta classe, para formao dos valores tambm
so usadas as restries de demanda.

DADOS ESTATSTICOS
Foi calculado o tempo de 30 execues. Esses dados serviro para calcular
a mdia, o desvio e o teste t. Nesta parte do trabalho foi utilizada a linguagem R
para calcular os parmetros estatsticos.

O vetor a no programa acima representa os tempos de execuo em


milissegundos da busca aleatria e o vetor b representa os tempos do algoritmo
gentico.
A mdia, a varincia e o desvio padro pode ser visualizado atravs dos
comando mean(), var() e sd(). Por fim o teste t pode ser visto atravs do comando
t.teste(a, b, var.equal=FALSE). O critrio FALSE adotado devido as varincias
serem diferentes.