View
218
Download
0
Category
Preview:
Citation preview
UMA HEURÍSTICA PARA O PROBLEMA DE LOCALIZAÇÃO MULTIOBJETIVO DE PLATAFORMA DE PRODUÇÃO DE
PETRÓLEO MULTICAPACITADA
DIEGO DA SILVA SALES
UNIVERSIDADE ESTADUAL DO NORTE FLUMINENSE – UENF
CAMPOS DOS GOYTACAZES – RJ AGOSTO – 2010
ii
UMA HEURÍSTICA PARA O PROBLEMA DE LOCALIZAÇÃO MULTIOBJETIVO DE PLATAFORMA DE PRODUÇÃO DE
PETRÓLEO MULTICAPACITADA
DIEGO DA SILVA SALES
“Dissertação apresentada ao Centro de Ciência e Tecnologia da Universidade Estadual do Norte Fluminense, como parte das exigências para obtenção do título de Mestre em Engenharia de Produção.”
Orientadora: JACQUELINE MAGALHÃES RANGEL CORTES, D. Sc.
CAMPOS DOS GOYTACAZES – RJ AGOSTO – 2010
iii
UMA HEURÍSTICA PARA O PROBLEMA DE LOCALIZAÇÃO MULTIOBJETIVO DE PLATAFORMA DE PRODUÇÃO DE
PETRÓLEO MULTICAPACITADA
DIEGO DA SILVA SALES “Dissertação apresentada ao Centro de Ciência e Tecnologia da Universidade Estadual do Norte Fluminense, como parte das exigências para obtenção do título de Mestre em Engenharia de Produção.”
Aprovada em 27 de Agosto de 2010.
Comissão Examinadora:
__________________________________________________________________
Prof. Dalessandro Soares Vianna, D.Sc., UFF
__________________________________________________________________
Prof. Carlos Leonardo Ramos Póvoa, D.Sc., UENF
__________________________________________________________________
Prof. Rodrigo Tavares Nogueira, D.Sc., UENF
__________________________________________________________________
Prof.ª Jacqueline Magalhães Rangel Cortes, D.Sc. - UENF (Orientadora)
iv
DEDICATÓRIA
Dedico esse trabalho a minha avó Sirley (in memoriam) que desde o meu primeiro dia de vida lutou incondicionalmente pela minha felicidade e com certeza está bem próxima de Deus ajudando a guiar meus passos, ao meu filho Afrânio que chegará ao mundo em Março de 2011 e a minha esposa Camila está esperando.
v
AGRADECIMENTOS
A Deus, pela vida, força e sabedoria para enfrentar todos os obstáculos na minha
vida e pelas pessoas iluminadas que coloca em meu caminho.
A minha mãe Cláudia Márcia pelo amor, carinho, conselhos, dedicação, educação,
por sua batalha incansável em sempre dar o melhor aos seus filhos e por me fazer
sentir orgulho de ser seu filho.
A meu pai José Paulo pelo amor, carinho, educação e conselhos sempre que
precisei.
A meus irmãos Douglas e Davi, pessoas extraordinárias que tenho o prazer de
conviver e aprender lições de vida a cada dia, pela alegria constante, o orgulho e
principalmente por toda união nos momentos mais difíceis de nossas vidas.
A meus irmãos José Paulo Júnior, Marcele e Natália pelo amor, carinho e
compreensão. A minha esposa Camila futura mãe do meu bebê, por todo apoio,
carinho, compreensão e principalmente pelo amor que nos faz feliz desde que nos
conhecemos.
A minha orientadora Jacqueline Magalhães, uma profissional de caráter
incalculável. Uma pessoa que desde o começo acreditou no meu potencial e me
incentivou em todos os momentos.
Ao professor Rogério Atem, um profissional diferenciado. Agradeço muito pelas
oportunidades e pelos ensinamentos.
A Kátia Rosane, uma pessoa dedicada e batalhadora, pelos conselhos e o carinho
que sempre teve comigo.
Aos meus grandes amigos Jeanderson Azeredo, Juliana Santos e Rafael Brito por
toda ajuda e paciência durante todo esse curso, pelo incentivo e principalmente
pelo carinho que sempre dedicaram a mim.
A Universidade Estadual do Norte Fluminense / Laboratório de Engenharia de
Produção pela oportunidade de realizar mais um grande sonho.
A todos que ajudaram direta e indiretamente na conclusão desse trabalho.
vi
RESUMO
_________________________________________________________________________
Este trabalho apresenta uma nova heurística, que possui características da
heurística GRASP (Greedy Randomized Adaptive Search Procedure), para
resolver o problema de localização multiobjetivo de plataforma de produção de
petróleo multicapacitada. Este problema consiste em escolher os locais para
instalar as plataformas, determinar a capacidade para cada plataforma instalada e
determinar a conexão poço-plataforma. O problema é modelado de forma a
minimizar custos de investimento (construção e instalação das plataformas);
maximizar a produção de petróleo; minimizar danos ambientais nas fases de
perfuração do poço e implantação da plataforma.
A proposta abordada é relevante devido à importância das decisões de localização
de plataformas de produção de petróleo que é proveniente de altos investimentos
e pelo elevado grau de impacto que essas decisões têm sobre os custos. Um
ponto a ser destacado é que existem poucos trabalhos referentes à resolução de
problemas complexos como este.
No final do trabalho é apresentado um software que utiliza a nova heurística para
resolver o modelo abordado. Inicialmente foram geradas amostras de dados
através deste software, variando o número de poços, plataformas, capacidades e
iterações. Posteriormente foi feito uma ánalise das amostras obtidas de modo a
auxiliar a tomada de decisão na localização de plataformas de produção de
petróleo. Cabe ressaltar que o principal objetivo deste software é tornar-se base
para futuras comparações computacionais com outras heurísticas, tendo em vista
que não foram encontrados softwares relacionados a este conteúdo na literatura.
Palavras-chave: Plataformas de Produção de Petróleo; Problema Multiobjetivo;
Heurística.
vii
ABSTRACT
_________________________________________________________________________
This paper presents a new heuristic, which has characteristics of heuristic GRASP
(Greedy Randomized Adaptive Search Procedure), to solve the problem of
multiobjective location of oil production platform multicapable. This problem
consists in choosing the locations for installing platforms, to determine the capacity
for each platform installed and determine the pit-connection platform. The problem
is modeled in order to minimize investment costs (construction and installation of
platforms); maximize oil production, minimize environmental damage in the stages
of well drilling and deployment platform.
The proposal addressed is relevant because of the importance of location
decisions of platforms for oil production comes from large investments and the high
degree of impact that these decisions have on costs. A point to note is that there
are few studies regarding the resolution of complex problems like this.
At the end of the paper presents a software that uses the new heuristic to solve the
model addressed. Initially samples were generated data using this software,
varying the number of wells, platforms, capabilities and iterations. Subsequently an
analysis was made of the samples in order to assist decision making on the
location of oil production platforms. It is noteworthy that the main goal of this
software is to become the basis for future comparisons with other computational
heuristics, in order that we can not find software related to the contents in the
literature.
Keywords: Oil Production Platforms; Multiobjective Problem, Heuristic.
viii
LISTA DE FIGURAS
Figura 1: Mapa da Bacia de Campos. ..............................................................................2 Figura 2: Mapa com data das descobertas dos campos de petróleo na Bacia de Campos. ...........................................................................................................................2 Figura 3: Problema de otimização multiobjetivo. ............................................................21 Figura 4: Fronteira de Pareto. ........................................................................................23 Figura 5: Formulação do problema. ...............................................................................28 Figura 6: Exemplo de representação do problema.........................................................30 Figura 7: Exemplo de representação da solução do problema. .....................................31 Figura 8: Pseudocódigo do GRASP. ..............................................................................32 Figura 9: Pseudocódigo da etapa de construção. ..........................................................33 Figura 10: Pseudocódigo da etapa de busca local.........................................................33 Figura 11: Pseudocódigo da nova heurística. ................................................................36 Figura 12: Pseudocódigo da primeira etapa da nova heurística.....................................37 Figura 13: Pseudocódigo da segunda etapa da nova heurística....................................38 Figura 14: Primeira guia do software..............................................................................39 Figura 15: Segunda guia do software.............................................................................40 Figura 16: Terceira guia do software ..............................................................................41 Figura 17: Quarta guia do software ................................................................................42 Figura 18: Quinta guia do software ................................................................................43 Figura 19: Sexta guia do software..................................................................................44 Figura 20: Representação da solução do software ........................................................45
ix
LISTA DE TABELAS
Tabela 1: Tamanho dos problemas i×j e i×k...................................................................47 Tabela 2: Amostra de dados 1. ......................................................................................48 Tabela 3: Amostra de dados 2. ......................................................................................49 Tabela 4: Amostra de dados 3. ......................................................................................49 Tabela 5: Amostra de dados 4. ......................................................................................50 Tabela 6: Amostra de dados 5. ......................................................................................50 Tabela 7: Amostra de dados 6. ......................................................................................51 Tabela 8: Amostra de dados 7. ......................................................................................51 Tabela 9: Amostra de dados 8. ......................................................................................52 Tabela 10: Média das amostras com 100 iterações. ......................................................52 Tabela 11: Média das amostras com 200 iterações. ......................................................53
x
LISTA DE ANEXOS
Anexo 1 – Código fonte da unidade principal do software .............................................64 Anexo 2 – Código fonte da unidade data module do software .......................................72 Anexo 3 – Código fonte da unidade dados do software .................................................74
xi
SUMÁRIO
RESUMO.................................................................................................................vi ABSTRACT ............................................................................................................vii LISTA DE FIGURAS ............................................................................................. viii LISTA DE TABELAS ...............................................................................................ix LISTA DE ANEXOS ................................................................................................ x Capítulo 1 – Introdução ........................................................................................... 1
1.1 Objetivo.......................................................................................................... 5 1.2 Justificativa e relevância ................................................................................ 5 1.3 Estrutura da dissertação ................................................................................ 5
Capítulo 2 – O Problema de Localização de Facilidades ........................................ 7 2.1 Modelos para localização de instalações..................................................... 10 2.2 Problemas de localização de facilidades ..................................................... 13
2.2.1 Problemas estáticos e determinísticos .................................................. 15 2.2.2 Problemas de medianas........................................................................ 15 2.2.3 Problemas de cobertura ........................................................................ 15 2.2.4 Problemas de p-centros ........................................................................ 15 2.2.5 Problemas de p-dispersão .................................................................... 16 2.2.6 Problemas de p-medianas e p-centros com capacidade limitada ......... 16 2.2.7 Problema de localização de facilidades sem restrições de capacidade 16 2.2.8 Problemas dinâmicos e probabilísticos ................................................. 16
2.3 Modelos de localização dinâmicos .............................................................. 17 2.4 Modelos de localização probabilísticos........................................................ 17 2.5 Modelos de localização-roteamento ............................................................ 18 2.6 Modelos de projetos de redes...................................................................... 19
Capítulo 3 – O Problema de Localização Multiobjetivo de Plataforma de Produção de Petróleo Multicapacitada .................................................................................. 21
3.1 O problema de otimização multiobjetivo ...................................................... 21 3.1.1 Conjunto Pareto-ótimo .......................................................................... 22 3.1.2 Soluções não-dominadas...................................................................... 23 3.1.3 Método ponderado para o problema de otimização multiobjetivo ......... 24
3.2 Problema de localização multiobjetivo de plataforma de produção de petróleo multicapacitada.................................................................................... 24
Capítulo 4 – O Modelo de Localização Multiobjetivo de Plataforma de Produção de Petróleo Multicapacitada ....................................................................................... 27
4.1 Modelagem do problema ............................................................................. 27 4.2 Formulação do problema............................................................................. 27 4.3 Variáveis e constantes................................................................................. 28
4.3.1 Funções objetivos ................................................................................. 29 4.3.2 Restrições ............................................................................................. 30
Capítulo 5 – Heurística GRASP ............................................................................ 32 5.1 Heurística GRASP ....................................................................................... 32
5.1.1 Etapa de construção ............................................................................. 32 5.1.2 Etapa de busca local ............................................................................. 33
Capítulo 6 – Heurística Proposta........................................................................... 36
6.1 Heurística proposta...................................................................................... 36 6.2 Software proposto........................................................................................ 38
6.2.1 Primeira guia do software...................................................................... 38 6.2.2 Segunda guia do software..................................................................... 39 6.2.3 Terceira guia do software...................................................................... 40 6.2.4 Quarta guia do software ........................................................................ 41 6.2.5 Quinta guia do software ........................................................................ 42 6.2.6 Sexta guia do software.......................................................................... 43
Capítulo 7 – Testes Computacionais..................................................................... 46 7.1 Geração dos problemas testes .................................................................... 46 7.2 Amostra de dados........................................................................................ 48 7.3 Considerações sobre as amostras de dados............................................... 52
7.3.1 Médias das amostras com 100 iterações .............................................. 53 7.3.2 Médias das amostras com 200 iterações .............................................. 54
Capítulo 8 – Conclusão ......................................................................................... 56 REFERÊNCIAS BIBLIOGRÁFICAS ...................................................................... 58 Anexo 1 – Código fonte da unidade principal do software .................................... 64 Anexo 2 – Código fonte da unidade data module do software .............................. 72 Anexo 3 – Código fonte da unidade dados do software ........................................ 74
1
Capítulo 1 – Introdução
“Neste capítulo será apresentada uma visão geral deste trabalho, seus objetivos, sua justificativa e
sua relevância.”
_________________________________________________________________________
Com uma população de aproximadamente 160 milhões de habitantes e
constituindo uma das maiores economias do mundo, o Brasil apresenta-se como
um dos maiores mercados consumidores de recursos energéticos, sendo que
cerca de 40% da energia consumida é proveniente do petróleo e seus derivados
(BRASIL, 2007) mostrando a importância desse recurso no país.
O Brasil possui uma área sedimentar de 6.436.000 km2, sendo 4.880.000
km2 de área terrestre e o restante distribuído ao longo da plataforma continental.
Dentre as bacias que compõem a plataforma continental, a Bacia de Campos, que
se estende do estado do Espírito Santo nas imediações da cidade de Vitória, até
Arraial do Cabo, no litoral norte do Estado do Rio de Janeiro, conforme ilustrado
na figura 1, destaca-se por ter a maior reserva de petróleo e gás natural nacional,
representando mais de 80% das reservas de todo país (PETROBRAS, 2010).
Segundo Piquet (2003), o acúmulo de grandes quantidades de petróleo e
gás natural na Bacia de Campos, da-se devido a condições geológicas da região.
Desde a descoberta de petróleo na Bacia de Campos, a região se tornou alvo de
intensas pesquisas na área de exploração de petróleo e gás natural,
principalmente pela empresa Petrobras conforme esquematizado em maior
detalhe na Figura 2.
2
Figura 1: Mapa da Bacia de Campos.
Fonte: Adaptada de Petrobras (2010).
Figura 2: Mapa com data das descobertas dos campos de petróleo na Bacia de Campos.
Fonte: Petrobras (2010).
3
De acordo com Petrobras (2010), a Bacia de Campos é a principal área de
produção de petróleo e gás natural do país, sendo responsável por
aproximadamente 84% da produção nacional. No ano de 2010, a Petrobras prevê
extrair diariamente cerca de 1.800.000 barris de óleo e 34.600.000 m3 de gás
natural na Bacia de Campos.
Com a constante descoberta de poços de petróleo e a construção e
implantação de novas plataformas de produção de petróleo, faz-se necessário um
estudo que auxilie a tomada de decisão locacional destas plataformas.
Um clássico problema logístico de tomada de decisão é o Problema de
Localização de Facilidades (PLF). Este problema diz respeito a determinar o
melhor local para instalar uma facilidade visando servir a um ou mais clientes. De
acordo com Prado (2007) e Arakaki (2002), as facilidades podem representar
fábricas, postos de atendimento, concentradores de rede, depósitos, escolas, etc.
Enquanto que os clientes podem representar lojas atendidas pelas fábricas,
usuários do serviço público, alunos, computadores instalados na rede, etc. Em
particular para o setor de petróleo, as facilidades podem representar refinarias,
depósitos, sondas de perfuração, plataformas de produção de petróleo, etc. Por
outro lado, os clientes podem representar postos de gasolina, poços de petróleo,
etc.
Segundo Owen e Daskin (1998), a localização de facilidade é uma decisão
estratégica primordial tanto para empresas públicas quanto para as privadas. Uma
facilidade quando instalada corretamente pode proporcionar consideráveis
vantagens competitivas. Pode-se também citar como fatores relevantes na
instalação de facilidade os altos investimentos envolvidos e o grau elevado de
impacto que essas decisões têm sobre os custos.
As decisões locacionais freqüentemente estão relacionadas a um conjunto
de critérios, problemas com esta característica podem ser chamados de Problema
de Localização Multiobjetivo de Facilidade (PLMF). Outra classe de problemas de
localização é aquela que considera a decisão da capacidade da facilidade
instalada, problemas como estes podem ser chamados de Problema de
Localização Multiobjetivo de Facilidade Multicapacitada (PLMFM). O PLMFM
4
consiste em escolher os locais para instalar facilidades, determinar a capacidade
para cada facilidade instalada e determinar a conexão cliente-facilidade, de forma
a atender as demandas e otimizar objetivos como: minimizar custos de
investimentos, maximizar produção, minimizar impactos ambientais, entre outros.
Neste trabalho as facilidades são representadas por plataforma de produção de
petróleo e os clientes são representados por poços de petróleo.
Tradicionalmente, os estudos de localização de facilidades envolvem um
alto nível e complexidade. Papadimitriou e Yannakakis (1991) ratificam que o PLF
é considerado do tipo NP - difícil, ou seja, a nível computacional são de extrema
complexidade, nestes casos os métodos heurísticos são mais indicados
(LORENZONI et al. 2006; DOMINGOS, 2005), dentre eles pode-se citar: Rede
Neural, Busca de Tabu, Algoritmo Genético, VNS (Variable Neighbourhood
Search) e GRASP (Greedy Randomized Adaptive Search Procedure). Estes são
considerados métodos mais rápidos e que fornecerem soluções mais próximas do
ótimo tornando-se menos complexo computacionalmente (DOMINGOS, 2005).
Dentre os algoritmos heurísticos já utilizados para resolver o problema de
localização monobjetivo de facilidades, o GRASP, apesar de bem recente, vem
recebendo atenção especial dos pesquisadores, por ser de fácil implementação e
por obter bons resultados em baixo tempo computacional (CRAVO et al., 2009;
FILHO et al., 2005; NEGREIROS et al., 2005; RESENDE e WERNECK, 2004;
SANTOS et al., 2009; SILVA et al., 2000), entretanto, poucos trabalhos foram
encontrados para resolver o problema de localização multiobjetivo de facilidades,
dentre eles pode-se citar o trabalho de Ribeiro e Arroyo (2008).
O foco deste trabalho é auxiliar a tomada de decisão locacional de
plataforma de produção de petróleo, para essa difícil tarefa dada sua
complexidade, foi desenvolvido um software implementando a nova heurística,
baseada na heurística GRASP, para resolver esta problemática. Cabe ressaltar
que apesar da GRASP está sendo bem explorada recentemente por
pesquisadores, poucos trabalhos são encontrados na literatura para o problema
de localização multiobjetivo de facilidades, o que reveste este trabalho de
relevância.
5
1.1 Objetivo
O objetivo principal desse trabalho é desenvolver um método de resolução
utilizando uma nova heurística para o problema de localização multiobjetivo de
plataforma de produção de petróleo multicapacitada, de modo a auxiliar o
processo de tomada de decisão locacional.
1.2 Justificativa e relevância
A logística das plataformas de petróleo tem-se mostrado cada vez mais
como uma preocupação no setor, sendo uma das decisões mais importantes do
processo produtivo. Neste setor qualquer falha pode significar prejuízos e riscos
incalculáveis.
E se tratando da localização de plataformas na região sudeste do Brasil,
principalmente na Bacia de Campos, o estudo reveste-se de considerável
relevância, visto ser a produção de petróleo uma das principais fontes de renda.
Pode-se citar também, que o Brasil possui um elevado investimento em
desenvolvimento de tecnologias e aprimoramentos no setor petroquímico.
A relevância deste assunto se dá ao fato dos altos investimos que são feitos
para a implantação de uma plataforma de produção de petróleo e também a este
fator ter influência direta nos custos.
1.3 Estrutura da dissertação
O trabalho está estruturado da seguinte forma:
Capítulo 1 – Introdução: Apresenta uma visão geral deste trabalho, seus
objetivos, sua justificativa e sua relevância.
Capítulo 2 – O Problema de Localização de Facilidades: Apresenta uma
descrição sucinta dos diferentes problemas de localização.
Capítulo 3 – O Problema de Localização Multiobjetivo de Plataforma de
Produção de Petróleo Multicapacitada: Apresenta o problema abordado, sua
formulação, estrutura e uma breve revisão bibliográfica.
6
Capítulo 4 – O Modelo de Localização Multiobjetivo de Plataforma de
Produção de Petróleo Multicapacitada: Apresenta o modelo abordado
explicando-o detalhandamente.
Capítulo 5 – Heurística GRASP: Apresenta uma visão geral sobre a heurística
GRASP.
Capítulo 6 – Heurística Proposta: Apresenta a heurística proposta para a
solução do problema abordado.
Capítulo 7 – Testes computacionais: Apresenta os testes computacionais
realizados sobre a heurística proposta.
Capítulo 8 – Conclusão: Apresenta as conclusões e as sugestões de melhorias
futuras, seguidas pelas referências bibliográficas e os anexos.
7
Capítulo 2 – O Problema de Localização de
Facilidades
“Neste capítulo será apresentada uma descrição sucinta dos diferentes problemas de localização.”
_________________________________________________________________________
De acordo com Novaes (1989), o problema da localização de instalações
tem sido tratado na literatura, englobando desde simples problemas de localização
de uma única instalação, até problemas bastante complexos, englobando diversas
instalações, em diversos níveis de uma cadeia produtiva, com fluxos de natureza
diversa, etc.
Estas instalações podem ser fábricas, portos, pontos de venda, armazéns,
lojas de varejo e centros de serviço (BALLOU, 1999); como também instalações
de serviço urbano, incluindo serviços de rotina e emergência, como postos de
correio, pontos de incineração de lixo e serviços de emergência médica, dentre
outros (LARSON e ODONI, 1981).
As decisões de localização, no contexto do planejamento logístico,
correspondem à determinação do número, localização e tamanho das instalações
usadas (BALLOU, 1999).
Conforme Current, Daskin e Schilling (2002), os seres humanos têm
analisado a efetividade das suas decisões de localização desde que eles
habitaram a primeira caverna. Segundo eles, a longa e volumosa história da
pesquisa sobre localização é resultante de alguns fatores:
As decisões de localização são freqüentemente tomadas em todos os
níveis das organizações humanas, desde indivíduos e famílias, até
empresas, agências governamentais e ainda agências internacionais;
As decisões de localização são muitas vezes estratégicas por natureza, isto
é, envolvem um elevado montante de recursos de capital, e seus efeitos
econômicos acarretam resultados no longo prazo. No setor privado, tais
decisões tem uma influência maior na capacidade de uma empresa de
competir no seu mercado. No setor público, elas influenciam na eficiência
8
pelo qual instituições do poder público provêem serviços públicos e a
habilidade destas instituições de atrair / agrupar famílias e outras atividades
econômicas;
As decisões de localização freqüentemente impõem exterioridades
econômicas, tanto positivas como negativas. Tais exterioridades incluem
desenvolvimento econômico, geração de empregos e de renda, poluição,
congestionamento, entre outros;
Modelos matemáticos de localização são, muitas vezes, extremamente
difíceis de resolver, pelo menos até a sua otimalidade. Igualmente, mesmo
os modelos mais simples são geralmente computacionalmente intratáveis
para instâncias de maior porte;
Modelos de localização correspondem a aplicações específicas, isto é, sua
forma estrutural (a função objetivo, restrições e variáveis) é determinada de
acordo com o problema particular em estudo. Conseqüentemente, não
existe um único modelo geral de localização que seja apropriado para todas
as aplicações potenciais ou existentes.
Current, Daskin e Schilling (2002) relacionam ainda sobre o assunto,
envolvendo diversas aplicações e destacando o aspecto multidisciplinar desse
assunto. De acordo com Gualda (1995), o problema de localização pode ser
definido como um problema de alocação espacial de recursos. A hipótese básica
da teoria da localização é a de que cada empresa procura escolher a localização
que leve à maximização dos lucros da sua atividade.
Silva Leme (1965) apud Gualda (1995) aponta que os fatores locacionais
podem ser classificados em fatores aglomerativos, fatores desaglomerativos, e o
fator transporte. Os fatores aglomerativos são os que contribuem para agrupar as
atividades produtivas em um determinado ponto ou local, sendo que os
desaglomerativos agem no sentido de desagrupar essas atividades, levando à
localização das mesmas em mais de um ponto. O fator transporte pode agir tanto
num sentido como no outro, dependendo do caso.
Nos problemas em que o fator transporte é predominante, isto é, tem
grande peso nas decisões, a resolução de problemas de localização pode ser
9
simplificada através da sua modelagem centrada no fator transporte, e as
soluções assim obtidas analisadas com vistas aos demais fatores.
Ainda segundo Gualda (1995), os problemas de localização podem ser
classificados em dois grupos, a saber:
Métodos Indutivos, que se baseiam na análise de dados e informações
estatísticos, históricos e provenientes de pesquisas de campo
(questionários), através do que se busca razões ou indicações quanto à
melhor localização para uma dada indústria (ou terminal, no nosso caso);
Métodos Dedutivos, que consistem no estabelecimento de um modelo
representativo da realidade, passível de tratamento matemático, para
resolver o problema da localização; dados históricos ou estatísticos são
usados para testar os resultados produzidos por esses modelos.
É necessário que se distinga a macro-localização da micro-localização. A
primeira precede a segunda, referindo-se à escolha de uma região para
localização da instalação pretendida, e a segunda está associada à escolha de um
sítio específico para implantação da instalação.
Problemas de macro-localização são mais adequados à aplicação de
métodos do tipo dedutivo; já os problemas de micro-localização envolvem um
número muito grande de variáveis, e até mesmo fatores pessoais e políticos na
tomada de decisões, o que passa a limitar, em muitos casos, à adoção de
modelos matemáticos para a sua solução.
Os modelos matemáticos para solução do problema de localização estão,
em geral, baseados na minimização dos custos envolvidos, admitindo-se, dessa
forma, que não há variação significativa nas receitas associadas às possíveis
soluções locacionais e que, portanto, a solução obtida satisfaz o objetivo de
maximização de lucros. Essa é uma simplificação que pode não ser verdadeira em
casos em que, por exemplo, a demanda pode apresentar variação importante com
a localização escolhida. De qualquer maneira, o problema, mesmo com essa
simplificação, tem natureza complexa.
10
2.1 Modelos para localização de instalações
Aspectos básicos sobre a modelagem matemática dos problemas de
localização de instalações são apresentados por Silva Leme (1965) apud Gualda
(1995), Magee (1977), Ballou (1985), Novaes (1989), entre outros.
Gualda (1995), em seu abrangente trabalho sobre terminais de transportes,
descreve uma aplicação que culminou num estudo da viabilidade econômico-
operacional de utilização da hidrovia Tietê-Paraná como alternativa de transporte
de calcário agrícola. O modelo desenvolvido em seu trabalho procurou indicar a
macro-localização e o porte dos terminais hidroviários associados à solução de
mínimo custo obtida para uma rede capacitada. O problema foi modelado como
um problema de fluxo em rede capacitada e solucionado através do algoritmo Out-
of-Kilter.
Brandeau e Chiu (1989), em sua resenha inclui, uma definição abrangente
do problema de localização e uma classificação dos diferentes tipos de problemas
de localização considerados. Segundo esses autores, o problema de localização é
um problema de alocação de recursos. No paradigma geral da localização, uma
ou mais instalações servem um conjunto de consumidores espacialmente
distribuídos. A topologia espacial sendo modelada pode ser uma rede geral ou
uma rede especial (por exemplo, uma árvore). O objetivo foi localizar instalações
de forma a otimizar um objetivo espacialmente dependente (implícita ou
explicitamente dependente). Critérios típicos utilizados para tal incluem:
Minimização do tempo médio da viagem ou da distância entre os pontos de
demanda e os pontos de suprimento;
Minimização do tempo médio de resposta (tempo de viagem mais eventuais
esperas para atendimento);
Minimização de uma função de custo da viagem ou do tempo de resposta;
Minimização do máximo tempo de viagem;
Maximização do mínimo tempo de viagem.
A função objetivo consiste, em geral, de termos proporcionais às distâncias
(ou tempos) de viagem entre instalações e/ou entre instalações e clientes.
11
De maneira geral, pode-se dizer que os modelos matemáticos para localização de
instalações podem ser classificados em duas categorias: modelos para localização
de uma única instalação e modelos para localização de múltiplas instalações
(MAGEE, 1977; BALLOU, 1985; NOVAES, 1989; GUALDA, 1995).
O problema de localização de uma única instalação pode ocorrer quando se
pretende que haja apenas uma instalação ou quando uma possível instalação
estará tão isolada das demais que a demanda a ser atendida por ela pode ser
considerada independente da demanda que necessita ser atendida pelas demais
instalações, permitindo assim a decomposição do problema de localização de n
instalações em n problemas independentes de localização de uma instalação.
Essa hipótese simplifica o problema a ser resolvido, que passa a se basear na
busca do local que permite a otimização de uma função objetivo, sendo voltada
tanto para a maximização dos lucros da empresa, quanto para a minimização dos
custos, para minimização das distâncias ou dos tempos de transporte que estão
associados ao atendimento das demandas consideradas.
A modelagem do problema de localização para mais de uma instalação é
mais complexa, envolvendo considerações sobre a parcela da demanda a ser
atendida por cada instalação. Isso significa que se deve buscar respostas para
questões que são relacionadas ao número de instalações a implantar, onde
implantá-las, o porte de cada uma, a área de influência e os modos de transporte
a serem utilizados para suprimento das mesmas e distribuição a partir de cada
uma delas.
A função objetivo está associada à minimização dos custos ligados a cada
uma das instalações, sujeita a restrições quanto ao porte, seja mínimo ou máximo
de cada instalação, distância entre elas, distâncias máximas de cada plataforma
aos pontos de demanda.
Os modelos de localização podem se diferenciar quanto à representação
espacial da região considerada e da malha de transportes envolvida, podendo ser
classificados, nesse sentido, em dois tipos (CRAINIC, 1998):
Um tipo trata a localização no plano, o que, teoricamente, implica a
existência de infinitos pontos alternativos para a pretendida localização e a
12
existência de uma malha de transportes bastante densa, cobrindo
praticamente toda a região considerada. As distâncias, neste caso, são
obtidas com base em métricas euclidianas ou retangulares;
O outro tipo trata a localização num grafo ou numa rede, o que implica a
representação matemática da malha de transportes e a consideração de
um número finito de pontos alternativos para a pretendida localização,
situados nos nós da rede. Métodos de pesquisa operacional, diretamente
relacionados à programação linear, inteira e mista, assim como à teoria de
grafos e de fluxos em redes, formam a base dos modelos matemáticos
utilizados neste segundo tipo de abordagem.
Em termos gerais, os modelos relacionados a esta problemática envolvem a
otimização de uma função objetivo, sendo que as técnicas de otimização e os
critérios adotados podem ser diversos, variando de acordo com a função da
instalação, as variáveis, o tratamento matemático e a representação espacial do
problema.
Ainda em Crainic (1998), os principais modelos de localização são
classificados como segue:
Modelos de Cobertura de Conjuntos
Consiste em localizar instalações nos vértices de uma rede, tal que os
vértices de demanda são cobertos por uma instalação, isto é, encontram-se dentro
de uma dada distância da instalação. A distância de cobertura, geralmente
relacionada ao caminho mais curto entre a instalação e cada um dos nós de
demanda, pode ser o mesmo para todos os vértices, ou pode depender de uma
instalação específica e pontos de demanda. O problema corresponde a minimizar
o custo de localização de instalações, sujeito a uma restrição determinando que
todos os vértices sejam cobertos. Caso se considere a situação de um orçamento
fixo, então o objetivo pode ser maximização da demanda coberta pelas
instalações.
Modelos de Centro
13
Sendo que se deve localizar p instalações nos vértices de uma rede, de tal
forma a minimizar a distância máxima entre um ponto de demanda e uma
instalação.
Modelos de Mediana
Localizar p instalações nos vértices de uma rede e alocar demanda a estas
instalações de tal forma a minimizar a distância ponderada entre instalações e
pontos de demanda. Se as instalações são não capacitadas e p é fixo, obtendo o
problema das p medianas.
Tondo (1992) abordou a modelagem da localização de um conjunto de
contêineres no Estado de São Paulo, culminando com a utilização de um modelo
baseado no problema das p-medianas.
Gualda (1995) destaca a importância da determinação da melhor
localização para um terminal de transportes, sendo uma tarefa fundamental para
se atingir os objetivos de eficiência e eficácia.
A modelagem do problema de localização de plataforma pode redundar em
tarefa bastante complexa, principalmente quando se tratar da escolha da
localização de um sistema de plataformas, pois isso leva à necessidade de
determinação concomitante do número e do porte de cada uma das plataformas
consideradas, e da área de influência de cada uma. O correto para a tomada de
decisão é levar-se em conta não somente os custos, mas também as receitas, e
todo o esquema logístico do sistema são dependentes dessa decisão.
Decisões equivocadas quanto à melhor localização de uma plataforma
podem gerar, por exemplo, custos elevados, transtornos operacionais, perda de
receitas e acréscimo de custos indesejáveis.
2.2 Problemas de localização de facilidades
A decisão de localização trata a forma como determinar os melhores locais
para instalar uma facilidade visando servir a um conjunto de clientes. Tais
problemas originam-se em muitos contextos. Podendo estar relacionados à
localização de aeroportos, locais de distribuição, facilidades de revenda de carros,
entre outros. Em uma escala menos abrangente, podem envolver a localização de
14
máquinas ou equipamentos. Em particular para o setor de petróleo, as facilidades
podem representar refinarias, depósitos, sondas de perfuração, plataformas de
produção de petróleo, prestadoras de serviços, etc. que quando corretamente
instaladas podem proporcionar consideráveis vantagens competitivas às
empresas, sejam estatais ou privadas.
O estudo da teoria de localização iniciou-se com o trabalho de Weber em
1909, que aborda o problema de localizar um armazém de forma a minimizar a
distância total entre ele e os clientes. O interesse pela teoria de localização
aumentou com os trabalhos de Hakimi (1964, 1965) sobre a localização de um
centro de comutação em uma rede de comunicações, minimizando a distância
total entre o centro e os clientes; e a localização de uma estação de polícia para
comunidades interligadas por um sistema de rodovias, que visava minimizar a
distância máxima das comunidades à estação de polícia.
Hakimi (1964, 1965) considerou o problema de localizar uma ou mais
facilidades numa rede, minimizando a soma total das distâncias dos clientes às
facilidades mais próximas ou minimizando a máxima dessas distâncias.
Uma ampla literatura foi desenvolvida para abordar esses problemas,
muitos deles formulados como modelos de programação inteira mista. De modo
geral, eles pertencem à categoria de problemas NP-difíceis e, usualmente, a
obtenção da solução ótima de problemas práticos de médio e grande porte pode
requerer um tempo computacional maior inviável.
Uma grande variedade de problemas de localização foram surgindo a partir
da década de 1960, diante de sua importância estratégica. De modo geral,
problemas dinâmicos envolvem decisões do número de facilidades a serem
abertas e onde localizá-las em um horizonte de planejamento, em resposta à
variação da demanda ao longo do tempo.
Klose e Drexl (2004) desenvolveram uma extensa revisão sobre modelos
de localização para o projeto de sistemas de distribuição, envolvendo o problema
de localização de facilidades e designação de clientes a facilidades.
15
Recentemente, problemas de localização têm sido integrados com outros
problemas de logística. Estudos sobre os problemas de localização encontram-se
nos artigos de Owen e Daskin (1998) e Current et al. (2002).
2.2.1 Problemas estáticos e determinísticos
Entre os problemas de localização de facilidades estáticos e
determinísticos, podem ser destacados os problemas de p-medianas, cobertura, p-
centros, p-dispersão e problemas de localização de facilidades com designação de
clientes, envolvendo custo fixo e custo de atendimento da demanda dos clientes,
tais como problemas de localização de facilidades sem e com restrições de
capacidade, capacidade limitada e fonte única.
2.2.2 Problemas de medianas
A distância para atingir uma facilidade, em muitos casos, é o fator
preponderante na definição de sua localização. A proximidade é desejável para a
localização de facilidades. O problema de p-medianas, introduzido por Hakimi
(1964), tem essa característica e envolve a localização de p facilidades e
designação de clientes a elas, de modo a minimizar a soma das distâncias entre
clientes e facilidades.
2.2.3 Problemas de cobertura
A cobertura dos clientes torna-se o foco principal de problema de
localização, na qual a demanda de um cliente é dita coberta quando pode ser
atendida em um dado tempo ou distância máxima. Pode ser considerados nos
estudos: problemas em que a cobertura dos clientes a custo mínimo é requerida e
problemas em que a cobertura dos clientes é maximizada devido à limitação de
recursos.
2.2.4 Problemas de p-centros
Este problema de p-centros envolve a localização de p-centros e
designação de clientes, de forma a minimizar a máxima distância de qualquer
cliente à facilidade mais próxima.
Admitindo-se algumas variações ao problema: quando as facilidades só
podem ser abertas em nós de clientes, tem-se o problema de p-centros nós; e
16
quando as mesmas podem ser localizadas em qualquer ponto da rede, tem-se o
problema de p-centros-absolutos.
2.2.5 Problemas de p-dispersão
Os problemas anteriormente descritos são adequados em situações na qual
se valoriza a proximidade das facilidades a serem instaladas. Existem também
aplicações em que o objetivo torna-se a maximização da distância mínima entre
qualquer par de facilidades. Também no estabelecimento de instalações militares,
deseja-se o distanciamento entre elas, para dificultar ataques.
O problema de p-dispersão estabelece facilidades que maximizam a
distância entre qualquer par de facilidades.
2.2.6 Problemas de p-medianas e p-centros com capacidade limitada
Em diversas situações, como por exemplo, a localização de escolas para
atender a demanda de alunos ou a determinação de locais para a realização de
concursos vestibulares, a capacidade i Q da facilidade no local i, em problemas de
p-medianas e p-centros, deve ser explicitada.
2.2.7 Problema de localização de facilidades sem restrições de capacidade
Refere-se à localização de facilidades com capacidade ilimitada e
designação de clientes às mesmas, tendo como objetivo a minimização do custo
fixo de instalação de facilidades e do custo variável de atendimento das
demandas.
2.2.8 Problemas dinâmicos e probabilísticos
Modelos dinâmicos de localização levam em consideração a variação de
parâmetros ao longo do tempo, enquanto modelos probabilísticos tratam de
parâmetros aleatórios. A maioria das pesquisas relacionadas a estes problemas
foram publicadas recentemente, mesmo tendo pesquisadores que se dedica pelo
estudo probabilístico e de aspectos dinâmicos da localização de facilidade há
alguns anos.
Brotcorne et al. (2003), fazem uma revisão de modelos estáticos,
probabilísticos e dinâmicos utilizados no problema de localização. Enquanto os
modelos estáticos focam na questão da cobertura, modelos probabilísticos
assumem, por exemplo, que há uma probabilidade de ocupação dos veículos num
17
dado sistema, e os modelos dinâmicos criam estratégias para evitar falta de
atendimentos, adotando repetidamente remanejamentos de veículos ao longo do
dia.
2.3 Modelos de localização dinâmicos
Dois tipos de problemas dinâmicos são citados em Current et al. (2002): os
implicitamente dinâmicos e os explicitamente dinâmicos.
Nos problemas implicitamente dinâmicos, facilidades abertas num dado
instante são consideradas abertas durante todo o horizonte de planejamento. No
entanto, apesar dessa característica permanecer estática, parâmetros do
problema, assim como demandas e tempo de viagem, podem variar ao longo do
tempo.
Os modelos explícitos adotam as possibilidades de abertura e fechamento
das facilidades ao longo do tempo. Aspectos temporais são adicionados ao
modelo estático usual e as decisões de abrir e/ou fechar facilidades consideram
alterações dos parâmetros de entrada, tais como demanda; tempo e custo de
transporte; disponibilidade de facilidades; custos fixos e variáveis; número de
facilidades a serem estabelecidas e lucro.
2.4 Modelos de localização probabilísticos
Os modelos que foram citados anteriormente admitem que os parâmetros
dos problemas são conhecidos, mesmo variando com o tempo. Aspectos incertos
que afetam demandas, tempo de transporte, custos, distância aos centros
consumidores e números de facilidades a serem abertas são desprezados, apesar
de ser bastante freqüente a falta de conhecimento sobre o comportamento futuro
de parâmetros quando os modelos são planejados. Duas vertentes principais
podem ser destacadas nos problemas de localização envolvendo parâmetros
incertos: os modelos probabilísticos e os de planejamento de cenários. Tendo
como objetivo as soluções para a localização de facilidades para qualquer
parâmetro aleatório.
18
Um dos exemplos de incorporação de distribuições em programação
matemática é o programa estocástico de dois estágios para o problema de
localização de facilidades sem restrições de capacidade e o problema de p-
medianas, proposto em (LOUVEAUX, 1986). No primeiro estágio determinam-se a
localização e o tamanho das facilidades que devem ser construídas, e no segundo
estágio especifica-se a alocação de recursos produtivos para atingir as demandas
mais lucrativas. Incertezas são consideradas nas demandas, custos de produção
e de transporte, bem como nos preços de venda. A relação entre os dois tipos de
problemas estudados é explorada.
Um tipo de problema estocástico estudado envolve a disponibilidade das
facilidades. Em grande parte da literatura, são empregadas distribuições
probabilísticas com teorias de filas.
2.5 Modelos de localização-roteamento
Nagy e Salhi (2007) apresentam uma revisão do problema integrado de
localização-roteamento, que é definido como planejamento de localização com
consideração de aspectos de planejamento de rotas. A definição provém de um
enfoque hierárquico, em que o objetivo é resolver o problema de localização
(problema chave) e, para tal, é necessário resolver simultaneamente o problema
de roteamento de veículos (subproblema).
Os autores ressaltam a crítica de alguns pesquisadores a tal abordagem
integrada que mistura o problema estratégico de localização com o problema
tático de planejamento de rotas, e argumentam que o enfoque integrado leva à
redução de custos em um planejamento de longo prazo. Aplicações práticas de
localização-roteamento envolvem distribuição de alimentos e bebidas; localização
de bancos de sangue; distribuição de jornais e revistas; localização para plantio;
coleta de lixo; localização de equipamentos militares, determinação de rotas de
emergência; entrega de dinheiro; distribuição de remédios; projeto de redes de
telecomunicações e redes ópticas.
A maioria dos problemas de localização-roteamento consiste em facilidades
servindo clientes conectados a depósitos por rotas. Não há rotas ligando as
19
facilidades entre si. Os dados de entrada são tratados como determinísticos, no
entanto existem trabalhos com demandas estocásticas. Quanto ao horizonte de
planejamento, existem modelos com um único período e modelos com múltiplos
períodos, sendo poucos os trabalhos publicados para o último caso. Em termos
de soluções propostas, métodos heurísticos são mais freqüentes, porém há
também o uso de métodos exatos. A função objetivo mais freqüente envolve a
minimização do custo total, que inclui custos de estocagem e de transporte.
A estrutura das rotas é dada dessa forma: um veículo inicia suas rotas a
partir de um depósito, atende os clientes e retorna ao depósito inicial. Variações
como viagens de ida e volta, veículos que fazem entrega e coleta também pode
ser encontrados na literatura.
2.6 Modelos de projetos de redes
Problemas que combinam localização de facilidades e projeto de redes são
utilizados em situações em que há um compromisso entre custos de facilidades,
custos de projeto de rede e custos de operação. Contextos estes, que se tornam
mais econômico reestruturar a rede do que iniciar novas facilidades, facilmente
encontrados em redes de telecomunicações; planejamentos regionais; redes de
companhias aéreas; redes de transmissão, entre outras. Devido à sua
complexidade e à diversidade de cenários, diversos são os enfoques dos
trabalhos já publicados.
Em Cordeau et al. (2007), uma nova formulação estática é fornecida ao
projeto de uma cadeia de suprimentos e rede logística de uma fábrica operando
em um único país. O objetivo do problema de projeto de redes, no trabalho
mencionado, é a minimização dos custos fixos e variáveis, relacionados à matéria-
prima, produção, armazenagem e transporte de produtos, atendendo as
demandas dos clientes. As decisões relacionadas ao projeto de redes são
classificadas em três grupos, de acordo com sua importância e horizonte de
tempo:
Decisões Estratégicas: relacionadas à localização, capacidade e tecnologia
empregada em fábricas, com horizonte de tempo de vários anos;
20
Decisões Táticas: seleção de fornecedores, definição de produtos
designados a cada fábrica e armazém, bem como definição de canal de
distribuição e meio de transporte, cuja revisão pode ser intercalada por
poucos meses;
Decisões de Operações: referem-se aos fluxos de materiais, produtos semi-
acabados e produtos acabados, que podem ser modificados em curto
prazo.
O tratamento isolado de tais decisões diminui a complexidade do problema,
porém a sua integração como uma rede traz benefícios. Dois métodos de
resolução são apresentados: branch-and-bound com cálculo de limitantes
inferiores via simplex e decomposição de Benders.
Melkote e Daskin (2001) também combinam o problema de localização de
facilidades e projeto de redes, considerando o modelo clássico de Problema de
Localização de Facilidades com Restrições de Capacidade a partir do qual é
determinada a topologia de rede. No modelo sugerido, são consideradas as
seguintes hipóteses: cada nó da rede representa um ponto de demanda;
facilidades podem ser situadas apenas em nós; apenas uma facilidade pode ser
estabelecida em cada nó; os clientes devem se deslocar até as facilidades para
serem servidos.
O objetivo é minimizar os custos relacionados ao transporte de fluxo entre
dois nós, os custos de construção de ligações entre nós e os custos fixos de
construção de facilidades nos nós. O artigo descreve várias desigualdades válidas
derivadas do modelo, utilizadas para apertar os limitantes do problema relaxado.
21
[ 1( ), 2( ),..., ( ),]
. .
( ) 0, 1,...,
( ) 0, 1,...,
, 1,...,
(.) : , (.) : (.) : .
n
j
k
L Ui i i
n n ni j k
Min f x f x fm x
x R
s a
g x j J
h x k K
x x x i n
com
f R R g R R e f R R
Capítulo 3 – O Problema de Localização
Multiobjetivo de Plataforma de Produção de
Petróleo Multicapacitada
“Neste capítulo será apresentado uma breve revisão bibliográfica do problema de otimização
multiobjetivo e ao final o problema de localização multiobjetivo de plataforma de produção de
petróleo multicapacitada é apresentado.”
_________________________________________________________________________
3.1 O problema de otimização multiobjetivo
Em problemas de otimização multiobjetivo deseja-se otimizar (minimizar ou
maximizar) um conjunto de objetivos simultaneamente. Estes objetivos muitas
vezes são conflitantes entre si, ou seja, quando um objetivo é melhorado outro
pode ser piorado.
De forma geral, os problemas de otimização multiobjetivo podem ser
representados através formula demonstrada na figura 3.
Figura 3: Problema de otimização multiobjetivo.
Fonte: Adapatada de Castro (2001).
22
Onde: n é o número de variáveis de decisão, M é o número de objetivos,
J é o número de restrições de desigualdade, K é o número de restrições de
igualdade e nx R é o vetor de variáveis de decisão.
Um exemplo de problema com objetivos conflitantes seria a compra de um
carro. A aquisição ótima é aquela que fornece o custo mínimo enquanto maximiza
o desempenho e o conforto do carro. Estes objetivos são conflitantes entre si, uma
vez que existirão desde carros com elevado custo, desempenho e conforto até
aqueles com baixo custo, desempenho e conforto. Um carro com o mais alto
desempenho e conforto pelo menor custo, embora ideal, não existe no mundo
real.
Porém, nenhuma solução que tenha menor custo, desempenho e conforto
pode ser considerada como superior a outra com maior custo, desempenho e
conforto. Dentre os tipos de carros, existem alguns que são superiores a outros,
isto é, apresentam desempenho e conforto maior ou equivalente por um custo
menor ou igual. Estes tipos (soluções) que superam outros são chamados de
soluções não-dominadas, enquanto que os tipos que são superados por pelo
menos um outro são chamados de soluções dominadas.
3.1.1 Conjunto Pareto-ótimo
Korhonen (1998) ratifica que em problemas multiobjetivo muitas vezes os
objetivos envolvidos são conflitantes, ou seja, quando um objetivo é otimizado
outro pode ser penalizado. Dessa forma, tem-se um conjunto de soluções
efecientes em que nenhuma solução é melhor em relação a todos os objetivos.
De acordo com Ticona (2003), tomar decisões implica em um processo de
vários fatores, tendo como objetivo encontrar uma solução ótima. Mas tratando-se
de problemas multiobjetivos várias soluções são encontradas, sendo que
nenhuma é satisfatoriamente superior a outra. Em problemas como estes, busca-
se um conjunto de soluções que se aproximam da perfeição, chamado de conjunto
Pareto-ótimo e seus pontos correspondentes no espaço dos objetivos, chamados
de fronteira de Pareto, conforme ilustrado na figura 4.
23
Figura 4: Fronteira de Pareto.
Fonte: Ticona (2003).
3.1.2 Soluções não-dominadas
As soluções eficientes são encontradas buscando-se por soluções não
dominadas do problema, que são aquelas que não são piores que nenhuma outra
solução. No trabalho de Arroyo et al. (2010) as soluções de um problema de
otimização multiobjetivo são caracterizadas por duas definições, sendo elas:
Definição 1 (Soluções não-dominadas):
Uma solução 1s domina a solução 2s se as três condições seguintes forem
satisfeitas:
i. 1( 1) 1( 2)f s f s ;
ii. 2( 1) 2( 2)f s f s ;
iii. 1( 1) 1( 2)f s f s ou 2( 1) 2( 2)f s f s .
Definição 2 (Soluções Pareto-ótimas):
Uma solução é Pareto-ótima se ela não é dominada por nenhuma solução
do espaço de objetivos.
Machado (2005) ratifica que existe diferença entre as soluções não-
dominadas e as soluções Pareto-ótimas. Quando se faz referência ao conjunto de
24
soluções não-dominadas, trata-se apenas de uma amostra do espaço de
objetivos. Enquanto que tratando-se do conjunto de soluções Pareto-ótimas se
referencia todo o espaço de objetivos. Conclui-se que o conjunto de soluções não-
dominadas é um subconjunto de soluções Pareto-ótimas.
3.1.3 Método ponderado para o problema de otimização multiobjetivo
Os problemas de otimização multiobjetivo podem ser resolvidos através de
diversas metodologias, dentre eles pode-se citar o método ponderado e o restrito,
neste trabalho foi utilizado o método ponderado. Este método pode ser entendido
como uma determinação de pesos definidos para os objetivos, a fim de aplicar
uma alta relevância para as funções que têm valor mais desejado, e penalizar
aquelas que podem ser consideradas de baixa relevância. Neste caso, o problema
abordado passa a ser considerado monobjetivo, isto é, as funções objetivo do
problema formam apenas uma nova função, que é elaborada pelas diversas
funções do problema, só que cada qual com seu peso agregado.
3.2 Problema de localização multiobjetivo de plataforma de produção de
petróleo multicapacitada
A importância da decisão locacional é proveniente dos altos investimentos
envolvidos e pelo grau elevado de impacto que essas decisões têm sobre os
custos, o que faz com que a decisão relativa à localização seja tomada
seriamente.
Anteriormente o problema de localização de facilidades recebia uma
abordagem monobjetivo (HAKIMI, 1964; HAKIMI, 1965; DEVINE e LESSO, 1972),
entretanto, de acordo com Francato (2002), os problemas monobjetivos na maioria
dos casos não condizem com a realidade. Recentemente, nos trabalhos de Rosing
(1994), Cortes (1999) e Cortes e Paula Júnior (2005), o problema de localização
de facilidade recebeu uma abordagem multiobjetivo com intuito de modelá-lo de
forma mais real.
Os problemas de localização de facilidades, frequentemente estão
relacionadas a um conjunto de objetivos. Problemas com esta característica
25
podem ser chamados de problemas de localização multiobjetivo de facilidades.
Estes problemas são propícios a conflitos por natureza, pois podem englobar
necessidades de minimização e maximização bastante divergentes.
Alguns problemas de localização de facilidades consideram a decisão da
capacidade da facilidade instalada. Este tipo de problema pode ser chamado de
capacitado. Um tipo particular de decisão locacional associada ao problema
multiobjetivo de localização de facilidade multicapacitada consiste em escolher os
locais para instalar facilidades, determinar a capacidade para cada facilidade
instalada e determinar a conexão cliente-facilidade, de forma a atender as
demandas e otimizar alguns objetivos, como o de minimizar custos de
investimentos, maximizar produção, minimizar impactos ambientais, entre outros.
O problema de localização multiobjetivo de facilidade inclui uma diversidade
de problemas, dentre eles pode-se citar: o problema de localização de franquia,
onde são considerados os seguintes objetivos: minimizar custo de transporte,
minimizar investimento e maximizar a cobertura do mercado (RAMIREZ, 1993) e o
problema de localização de atividades econômicas, onde são considerados os
seguintes objetivos: minimizar custos de instalação/operação das atividades
econômicas e minimizar o tempo de acesso/conexão (CORTES e PAULA
JÚNIOR, 2005).
Outro caso é o problema de localização multiobjetivo de plataforma de
produção de petróleo multicapacitada no qual se deseja minimizar custos de
investimento, minimizar custo de transporte, maximizar produção, entre outros.
Outros problemas relacionados podem ser encontrados em Rosing (1994),
Hansen et al. (1992), Lawrence et al. (1984), Lee e Schniederjans (1983) e Lee e
Clayon (1972).
Segundo Odell e Rosing (1978), Ramirez (1993), Rosing (1994), Cortes
(1998), Cortes (1999) alguns objetivos para o problema de localização
multiobjetivo de plataforma de produção de petróleo multicapacitada são
considerados relevantes, dentre eles pode-se citar: a minimização dos custos de
investimento (construção e instalação das plataformas), a maximização da
26
produção de petróleo, a minimização dos danos ambientais nas fases de
perfuração do poço e implantação da plataforma e a minimização dos custos de
transporte do petróleo para a base.
O modelo abordado (CORTES, 1999) visa determinar a localização e a
capacidade das plataformas de produção e a localização e associações de poços
produtores a serem perfurados. O mesmo considera que nem todas as
localizações para plataformas terão uma plataforma instalada e que nem todas as
localizações para poços terão um poço perfurado, para isso foi criada uma
plataforma fantasma para ser associada às localizações não selecionadas.
Este trabalho aborda o problema de localização multiobjetivo, onde as
facilidades são plataformas de produção de petróleo e os clientes são poços a
serem perfurados. Uma versão simplificada deste problema foi estudada por
Hansen et al. (1994). Tal problema consiste em: dado um conjunto de localizações
potenciais para poços de petróleo a serem perfurados J , um conjunto de
localizações potenciais para as plataformas e para localização da plataforma
fantasma I e um conjunto de níveis de capacidade K que devem ser
consideradas em cada plataforma instalada na localização i I , ainda foram
considerados que uma plataforma é introduzida na localização fantasma *i e que
o conjunto de localizações para as plataformas ( I ) inclui *i . Os poços que não
forem selecionados serão designados para a plataforma fantasma ( *i ) e os poços
que forem selecionados para plataforma *\{ }i I i , quer-se determinar a
localização e a capacidade das plataformas a serem instaladas e a associação
dos poços a estas de forma a otimizar os objetivos do modelo.
Dentre os métodos de resolução utilizados resolver problemas de
otimização multiobjetivo, o ponderado foi selecionado. Neste método as funções
objetivos recebem pesos, aplicando maior importância para as funções de mais
valor e menos importância as funções de menor valor.
27
Capítulo 4 – O Modelo de Localização
Multiobjetivo de Plataforma de Produção de
Petróleo Multicapacitada
“Neste capítulo será apresentado o modelo abordado explicando-o detalhadamente.”
_________________________________________________________________________
4.1 Modelagem do problema
O modelo abordado (CORTES, 1999) para a resolução do problema de
localização multiobjetivo de plataforma de produção multicapacitada possui
funções objetivos que consiste em: minimizar custos de investimento (construção
e instalação das plataformas), maximizar a produção de petróleo, minimizar danos
ambientais nas fases de perfuração do poço e implantação da plataforma.
Segundo Devine e Lesso (1972), os fatores que podem afetar os custos para
uma dada jazida podem ser classificados em três categorias: variáveis de decisão,
variáveis preestabelecidas (aquelas assumidas como fixas pelos operadores), e
variáveis incontroláveis. As variáveis de decisão são: o número de plataformas, a
dimensão de cada plataforma, a localização de cada plataforma e a associação
das plataformas aos poços. As variáveis que são assumidas ser preestabelecidas
incluem localização do poço, tipo de plataforma, tipo de torre, terminais simples e
duais (duas linhas de petróleo que são produzidos através de um simples orifício),
etc. As variáveis incontroláveis incluem alvos de profundidades, profundidade da
água, características geológicas, forças do vento e das ondas, condições do fundo
do mar, etc.
4.2 Formulação do problema
O modelo de Cortes (1999) é apresentado abaixo na figura 5:
28
*
* * * *
1
2\( )
3\( ) \( ) \( ) \( )
Z ( , )
Z ( )
Z ( , )
. .
ij ij ik ikj J k Ki I i I
j ijj J i I i
j ij i ik ij ij ik ikj J k K j J k Ki I i i I i i I i i I i
ij ij ik ikj J k Ki I i I
Min x y c x f y
Min x a x
Min x y Dw x Do y Dq x Dp y
sa
c x f y R
(1)
1 iji I
x j J
(2)
(3)
1
j ij k ikj J k K
ikk K
a x b y i I
y i I
(4)
0,1 (5)
0,1
ij
ik
x
y
(6)
Figura 5: Formulação do problema.
Fonte: Cortes (1999).
4.3 Variáveis e constantes
ijc é o custo de associação do poço j J à plataforma instalada na localização
i I ;
ikf é o custo de construção e instalação de uma plataforma com um nível de
capacidade k na localização i I ;
ja é a estimativa para a produção de petróleo na localização j J ;
iDo é o dano ambiental esperado ocasionado pelo funcionamento e/ou abertura
da uma plataforma de produção instalada na localização i I ;
29
jDw é o dano ambiental esperado ocasionado pela abertura de um poço na
localização j J ;
ikDp é o dano ambiental esperado ocasionado pelo funcionamento e/ou abertura
de uma plataforma de produção com capacidade k instalada na localização i I ;
ijDq é o dano ambiental esperado ocasionado pela ruptura da tubulação entre
este poço j J e uma plataforma de produção instalada na localização i I ;
A variável de decisão ijx = 1, se o poço j J for associado à plataforma instalada
na localização i I , ou 0, caso contrário;
A variável de decisão iky = 1, se o k-ésimo nível de capacidade da plataforma
instalada na localização i I for usado, ou 0, caso contrário;
4.3.1 Funções objetivos
1Z tem por objetivo minimizar o custo de associação do poço j J à plataforma
instalada na localização i I e custo de construção e instalação de uma
plataforma com um nível de capacidade k na localização i I ;
2Z tem por objetivo maximizar a produção de petróleo do poço na localização
j J se este for associado à plataforma instalada na localização i I ;
3Z tem por objetivo minimizar quatro tipo de danos ambientais sendo eles: o
esperado ocasionado pela abertura de um poço na localização j J se este for
associado à plataforma instalada na localização i I ; o esperado ocasionado pelo
funcionamento/abertura da uma plataforma de produção instalada na localização
i I , se o nível de capacidade da plataforma instalada na localização i I for
usado; o esperado ocasionado pela ruptura da tubulação entre um poço j J e
uma plataforma de produção instalada na localização i I , se este for associado à
plataforma instalada na localização i I ; o esperado ocasionado pelo
funcionamento/abertura de uma plataforma de produção com capacidade k
instalada na localização i I , se o nível de capacidade da plataforma instalada na
localização i I for usado;
30
4.3.2 Restrições
As restrições serão listadas de acordo com a numeração adotada no modelo:
(1) Os gastos financeiros não devem ultrapassar o orçamento;
(2) Cada poço perfurado deve ser associado a apenas uma plataforma;
(3) O poço só poderá ser associado à plataforma, se a mesma estiver instalada na
localização i, sendo que o poço não pode ultrapassar a capacidade desta
plataforma;
(4) A localização i pode não ser selecionada para a instalação de uma plataforma,
e, no caso de uma plataforma ser instalada, esta deve ter apenas um único
nível de capacidade;
(5) A variável de decisão Xij é binária (0-1);
(6) A variável de decisão Yik é binária (0-1);
Um exemplo de representação do problema de localização multiobjetivo de
plataforma de produção multicapacitada é demonstrado na figura 6.
Figura 6: Exemplo de representação do problema.
31
Cada solução do problema de localização multiobjetivo de plataforma de
produção multicapacitada é representada por um conjunto de duas matrizes
binárias. A primeira delas, a matriz Xij = (X11,...,Xmxn), m = |I|, n = |J|, onde Xij = 1
indica que a plataforma i está associada ao poço j e Xij = 0 que a plataforma i não
está associada ao poço j. A segunda delas, a matriz Yik = (Y11,...,Ymxp), m = |I|, p =
|K|, onde Yik = 1 indica que a plataforma i possui capacidade k e Yik = 0 que a
plataforma i não possui capacidade k. A figura 7 demonstra um exemplo de
representação de solução deste problema.
Figura 7: Exemplo de representação da solução do problema.
32
Procedimento: GRASP (Max_Iter)Para cada k = 1, ..., Max_Iter faça
Solução := Heurística_Construtiva_Aleatória;Solução := Busca_Local (Solução);Atualizar_Solução (Solução, Melhor_Solução);
Fim-ParaRetorna Melhor_Solução;
Capítulo 5 – Heurística GRASP
“Neste capítulo será apresentada uma visão geral sobre a heurística GRASP.”
_________________________________________________________________________
5.1 Heurística GRASP
Proposto inicialmente por Feo e Resende (1995), a heurística GRASP
(Greedy Randomized Adaptive Search Procedure) apesar de muito recente vem
apresentando ótimos resultados em problemas de otimização combinatória. Esta
heurística é um método iterativo de múltiplos reinícios, onde cada iteração
consiste em duas etapas, a primeira constrói uma solução inicial e a segunda faz
uma busca local para otimizar a qualidade da solução. Após a execução do
número de iterações a heurística retorna a melhor solução encontrada, conforme
demonstrado em forma de pseudocódigo na figura 8.
Figura 8: Pseudocódigo do GRASP.
Fonte: Paiva (2002).
5.1.1 Etapa de construção
A cada execução da etapa de construção, uma solução viável é gerada de
forma incremental, onde em cada passo um novo elemento é inserido na solução
parcial. Para seleção do próximo elemento a ser incorporado na solução, todos os
candidatos são avaliados segundo uma função gulosa e seleciona-se um
subconjunto formado pelos melhores candidatos para serem inseridos em uma
lista denominada lista restrita de candidatos (LRC). O elemento a ser introduzido
na solução parcial é selecionado aleatoriamente entre os pertencentes à LRC.
Estas escolhas aleatórias permitem gerar soluções diferentes a cada execução do
33
Procedimento: Heurística_Construtiva_AleatóriaSolução := 0;Avalia o custo incremental de cada BTS candidata através do procedimento Cálculo dos custos (BTS t);Enquanto Solução não está completa façaPara cada t = 1, ..., Num_BTSs faça
Cria lista LCR;Seleciona a BTS s aleatoriamente;Solução := Solução {s};Reavalia o custo incremental;
Fim-ParaFim-Enquanto
Procedimento: Busca_Local (Solução)Enquanto Solução não for o ótimo local faça
Encontre s’ Vizinhança f (s’) < f (Solução);Solução := s’;
Fim-EnquantoRetorna Solução;
algoritmo. Uma vez determinado o elemento, este é inserido na solução parcial, os
custos da função de avaliação são recalculados e a LRC é atualizada, como
demonstrado em forma de pseudocódigo na figura 9.
Figura 9: Pseudocódigo da etapa de construção.
Fonte: Paiva (2002).
5.1.2 Etapa de busca local
A etapa de busca local tenta aprimorar a solução gerada na fase de
construção efetuando uma varredura na vizinhança da solução até que um ótimo
local seja encontrado, como visto em forma de pseudocódigo na figura 10.
Figura 10: Pseudocódigo da etapa de busca local.
Fonte: Paiva (2002).
A heuristica GRASP descrita até aqui, refere-se a sua versão básica.
Entretanto, alguns autores estão utilizando esta heuristica com estratégias de
aperfeiçoamento, visando melhorar ainda mais seu desempenho computacional,
dentre elas pode-se citar: a tabela hash, mecanismo de memória de longo prazo,
34
reconexão de caminhos e GRASP reativo (FLEURENT e GLOVER, 1999;
MARTINS et al., 1999; PRAIS e RIBEIRO, 2000; RESENDE e RIBEIRO, 2005).
Em particular para os problemas de localização e alocação, nota-se que
esta heuristica tem obtido resultados positivos (CRAVO et al., 2009; SANTOS et
al., 2009; FILHO et al., 2005; RIBEIRO e ARROYO, 2008; SILVA et al., 2000).
De acordo com Cravo et al. (2009), o Problema da Rotulação Cartográfica
de Pontos apresentou soluções de boa qualidade em um tempo computacional
baixo utilizando o algoritmo GRASP proposto em seu trabalho. Os resultados
obtidos foram melhores que em heurísticas conhecidas.
Em Santos et al. (2009) foram comparados dois métodos, o GRASP-Bi e o
ε-restrito, de resolução do Problema Biobjetivo das P-Medianas não Capacitado. A
heurística GRASP-Bi, quando comparada com o método ε-restrito, se mostrou
bastante eficiente na prática.
Filho et al. (2005) obteve bons resultados, tanto para o GRASP básico
quanto para o GRASP Reativo (Adaptativo), sendo que este último apresentou no
geral resultados melhores e com um tempo computacional menor para o Problema
de Localização Capacitado de Custo Fixo.
Uma outra forma de comparação pode ser vista em Ribeiro e Arroyo (2008)
que desenvolveram um GRASP básico e um GRASP com intensificação para
resolver o Problema de Alocação Biobjetivo de Facilidades. A técnica Path
Relinking foi utilizada como forma de intensificação e se mostrou bastante
eficiente quando comparado ao método básico sem intensificação.
Estudos apresentam grandes expectativas em relação ao hibridismo desta
heurística, conforme reportado no trabalho de Silva et al. (2000), a GRASP
combinada com VNS (Variable Neighbourhood Search) obteve resultados
expressivos, justificando o investimento nesta combinação, a fim de aproveitar
suas melhores características.
Pode-se identificar através destes estudos, que a heuristica GRASP está
obtendo sucesso na maioria dos Problemas Combinatórios em que foi
36
Procedimento_Nova_Heuristica (i, j, k, Numero_Iteracoes: Inteiro; Peso_Z1, Peso_Z2, Peso_Z3: Real);Inicio
Nova_Solucao := 0;VT_Solucoes_Viaveis := 0;VT_Solucoes_Inviaveis := 0;VT_Lista_Pareto :=0;VT_Media_Ponderada := 0;Para x = 0 até Numero_Iteracoes-1 Faça
Nova_Solucao := Construcao_Aleatoria;Busca_Local (Nova_Solucao);
Fim-Para;Menor_Media_Ponderada (VT_Media_Ponderada);Retorna (Menor_Media_Ponderada);
Fim-Procedimento
Capítulo 6 – Heurística Proposta
“Neste capítulo será apresentada uma nova heurística, baseada na heurística GRASP, proposta
para solução do problema de localização multiobjetivo de plataforma de produção de petróleo
muticapacitada. Também serão apresentadas as telas do software proposto.”
_________________________________________________________________________
6.1 Heurística proposta
A heurística GRASP foi utilizada como base para o desenvolvimento da
nova heurística devido aos seus bons resultados em problema de localização,
conforme descrito no capítulo 5.
A Figura 11 apresenta os passos da nova heurística em forma de
pseudocódigo. Esta heurística possui 7 parâmetros de entrada, sendo eles: o
número de plataformas (i), o número de poços (j), o número de capacidades (k), o
número de iterações (Numero_Iteracoes), o peso da primeira função objetivo
(Peso_Z1), o peso da segunda função objetivo (Peso_Z2) e por fim o peso da
terceira função objetivo (Peso_Z3). O objetivo desta heurística é retornar a menor
média ponderada da lista de Pareto assim como suas respectivas matrizes de
variáveis de decisão Xij e Yik.
Figura 11: Pseudocódigo da nova heurística.
37
Procedimento_Construcao_AleatoriaInicio
Matriz_Xij (i, j); Matriz_Yik (i, k); Nova_Solucao := Calcula_Z1_Z2_Z3;Se Nova_Solucao for viável Então
VT_Solucoes_Viaveis := VT_Solucoes_Viaveis + Nova_Solucao ;Busca_Local(Nova_Solucao );
SenãoVT_Solucoes_Inviaveis := VT_Solucoes_Inviaveis + Nova_Solucao ;
Fim-Se;Fim-Procedimento
Inicialmente a variável Nova_Solucao e os vetores VT_Solucoes_Viaveis,
VT_Solucoes_Inviaveis, VT_Lista_Pareto e VT_Media_Ponderada são zerados.
Um loop é iniciado até a variável Numero_Iteracoes. O procedimento da primeira
etapa da nova heurística (Figura 12) é chamado, onde são calculadas as funções
objetivos Z1, Z2 e Z3 utilizando as matrizes de variáveis de decisão Xij, Yik e os
demais dados de localização inseridos pelo decisor. A viabilidade da variável
Nova_Solucao é testada, se for viável, é inserida no vetor VT_Solucoes_Viaveis,
senão, é inserida no vetor VT_Solucoes_Inviaveis. Neste ponto é chamado o
procedimento da segunda etapa da nova heurística (Figura 13), onde é verificado
se a variável Nova_Solucao domina alguma solução que está no vetor
VT_Lista_Pareto, se dominar, a variável Nova_Solucao é inserida no vetor
VT_Lista_Pareto e a solução dominada é retirada deste vetor, caso contrário a
variável Nova_Solucao é descartada. Se a variável Nova_Solucao for inserida no
vetor VT_Lista_Pareto, sua média ponderada é calculada utilizando as variáveis
Peso_Z1, Peso_Z2 e Peso_Z3 e depois inserida no vetor VT_Media_Ponderada.
Por final, é verificado no vetor VT_Media_Ponderada qual é a menor média
ponderada e esta é retornada com suas respectivas matrizes de variáveis de
decisão Xij e Yik, finalizando a heurística.
Os procedimentos da primeira e da segunda etapa da nova heurística em
forma de pseudocódigo são mostrados respectivamente nas figuras 12 e 13.
Figura 12: Pseudocódigo da primeira etapa da nova heurística.
38
Procedimento_Busca_LocalInicio
Se Lista_Pareto (Nova_Solucao ) EntãoVT_Media_Ponderada (Peso_Z1, Peso_Z2, Peso_Z3, Nova_Solucao );
Fim-Se;Fim-Procedimento
Figura 13: Pseudocódigo da segunda etapa da nova heurística.
6.2 Software proposto
O software proposto possui 6 guias, a tela de cada guia e suas respectivas
explicações são apresentadas no decorrer desta seção. Os vetores e as matrizes
citadas nas próximas seções foram detalhados na seção 4.3. No final deste
trabalho são apresentados 3 anexos com o código fonte deste software. O anexo
1 possui o código fonte da unidade Principal, o anexo 2 possui o código fonte da
unidade Data Module e o anexo 3 possui o código fonte da unidade Dados.
6.2.1 Primeira guia do software
Na primeira guia do software é necessário inserir o número de poços, o
número de locais e o número de capacidades, para gerar as matrizes/vetores com
os dados de localização. Consequentemente para gerar a Heurística, deve-se
inserir os pesos das funções objetivo Z1, Z2 e Z3, além do custo máximo e o
número de iterações (quantidade de soluções). A tela da primeira guia do software
é demonstrada na figura 14.
39
Figura 14: Primeira guia do software
6.2.2 Segunda guia do software
Na segunda guia do software é possível editar os dados de localização da
matriz Cij e Fik referentes à primeira função objetivo Z1, do vetor Aj referente à
segunda função objetivo Z2 e do vetor DWj referente a terceira função objetivo Z3.
A tela da segunda guia do software é demonstrada na figura 15.
40
Figura 15: Segunda guia do software
6.2.3 Terceira guia do software
Na terceira guia do software é possível editar os dados de localização da
matriz DOi, DQij e DPik também referentes a terceira função objetivo Z3 e o vetor
Bk referente a terceira restrição. A tela da terceira guia do software é demonstrada
na figura 16.
41
Figura 16: Terceira guia do software
6.2.4 Quarta guia do software
Na quarta guia do software são exibidas duas listas. A primeira delas,
refere-se às soluções inviáveis e segunda refere-se às soluções viáveis geradas
pela primeira etapa da heurística. A tela da quarta guia do software é demonstrada
na figura 17.
42
Figura 17: Quarta guia do software
6.2.5 Quinta guia do software
Na quinta guia do software também são exibidas duas listas. A primeira
delas, refere-se à Lista de Pareto e a segunda refere-se à média ponderada da
lista anterior geradas pela segunda etapa da heurística. A tela da quinta guia do
software é demonstrada na figura 18.
43
Figura 18: Quinta guia do software
6.2.6 Sexta guia do software
Na sexta guia do software é exibida a menor média ponderada denominada
a melhor solução com suas respectivas matrizes de variáveis de decisão Xij e Yik,
finalizando o software. A tela da sexta guia do software é demonstrada na figura
19.
44
Figura 19: Sexta guia do software
Na sexta guia do software é apresentada a melhor solução encontrada por
ele. Para melhor compreensão desta solução, uma outra forma de representação
solução é demonstrada na figura 20.
45
J=13
i=1J=19
J=6
J=8
J=16
i=3J=9
J=2 J=11
J=18
i*J=12
J=7
J=20
i=2J=14
J=1 J=4
i=4J=10
J=3
J=15
k=2 k=1 k=2
K=2 k=2
i
Plataforma Alocada
i*
Plataforma Fantasma
j
Poço Alocado
k
Capacidadeda Plataforma
Alocada
Yik 1 2 31 0 1 02 1 0 03 0 1 04 0 1 05 0 1 0
J=5
Xij 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 201 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 02 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 13 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 04 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 05 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0
J=17
Figura 20: Representação da solução do software
46
Capítulo 7 – Testes Computacionais
“Neste capítulo será apresentado os testes computacionais realizados sobre a nova heurística.”
_________________________________________________________________________
A heurística proposta foi implementada na linguagem Delphi e compilada no
software Borland Delphi 2005 usando um microcomputador AMD Athlon (tm) 64X2
Dual Core Processador 4000+ 2.11 GHz com 3.00 GB de RAM e Sistema
Operacional Microsoft Windows XP Professional Service Pack 3.
Cabe ressaltar que não foi encontrado na literatura implementação em
software para o modelo abordado, desta forma não foram de efetuados testes
computacionais comparativos entre diferentes heurísticas. Sendo assim, notou-se
a necessidade de efetuar os testes alterando os dados de entrada e comparando
os dados de saída do software.
7.1 Geração dos problemas testes
Foram geradas diferentes instâncias do problema variando os seguintes
dados de entrada do software: número de poços ( j ), número de plataformas ( i ),
número de capacidades ( k ) e número de iterações, foram realizados testes e
obtidos os seguintes dados de saída do software: número de itens da lista de
soluções viáveis, número de itens da lista de Pareto, valor da melhor solução
(menor média ponderada dos itens da lista de pareto) e o tempo de execução em
minutos. Os tamanhos dos problemas i × j e i × k são demonstrados na tabela 1.
Para cada i × j e i × k foram gerados 5 problemas utilizando 100 e 200 iterações,
totalizando 80 problemas.
47
i j k i×j i×k 3 20 3 3x20 3x3 3 40 3 3x40 3x3 4 20 3 4x20 4x3 4 40 3 4x40 4x3 3 20 4 3x20 3x4 3 40 4 3x40 3x4 4 20 4 4x20 4x4 4 40 4 4x40 4x4
Tabela 1: Tamanho dos problemas i×j e i×k.
Para o problema de localização multiobjetivo de plataforma de produção de
petróleo multicapacitada abordado neste trabalho, a matriz Cij referente aos
custos de associação da plataforma i ao poço j foi inicializada em 50 milhões, a
matriz Fik referente aos custos de construção e instalação da plataforma i em
350 milhões, o vetor Aj referente à produção do poço j em 6 milhões de barris de
petróleo mensal, o vetor DWj referente ao dano ambiental ocasionado pela
abertura do poço j em 15 milhões, o vetor DOi referente ao dano ambiental
ocasionado pelo funcionamento/abertura de uma plataforma i em 20 milhões, a
matriz DQij referente ao dano ambiental ocasionado pela ruptura da tubulação
entre a plataforma i e o poço j em 25 milhões, a matriz DPik referente ao dano
ambiental ocasionado pelo funcionamento/abertura de uma plataforma i com sua
capacidade k em 30 milhões e o vetor Bk referente a capacidade k de
produção/armazenamento de barris de petróleo mensal da plataforma em 120
milhões.
Os dados referentes a custos e produção foram baseados em estudos,
descritos em Brito (2007) e Rosa et al. (2002), do setor petrolífero utlizando uma
média aritmética simples. Porém, não foram encontrados valores para base dos
cálculos de danos ambientais, dessa forma esses valores são meramente
ilustrativos. A cada iteração, o software proposto tem como base estes dados,
fazendo um acréscimo aleatório de até 25 por cento em cada índice, conforme
descritos nos intervalos abaixo:
48
Cij [50 ... 62,5]; Fik [350 ... 437,5]; Aj [6 ... 7,5]; DWj [15 ...18,75]; DOi [20 ... 25]; DQij [25 ... 31,25]; DPik [30 ... 37,5]; Bk [120 ... 150].
7.2 Amostra de dados
As tabelas 2 a 9 apresentam os testes realizados.
Nº de poços = 20; Nº de plataformas = 3; Nº de capacidades = 3;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 100 31 2364,032 0,0216 2 100 50 2391,438 0,0248 3 100 28 2354,389 0,0216 4 100 38 2375,733 0,0229 5 100 39 2348,316 0,0222
Nº de iterações = 100
Média 100 37,2 2366,7816 0,02262 1 200 64 2377,267 0,0568 2 200 44 2361,749 0,0547 3 200 60 2336,274 0,0576 4 200 58 2388,51 0,0565 5 200 69 2393,636 0,0583
Nº de iterações = 200
Média 200 59 2371,4872 0,05678
Tabela 2: Amostra de dados 1.
49
Nº de poços = 40; Nº de plataformas = 3; Nº de capacidades = 3;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 92 54 4743,842 0,0352 2 87 49 4697,749 0,0347 3 86 42 4718,254 0,0326 4 94 66 4688,414 0,0456 5 81 52 4668,27 0,032
Nº de iterações = 100
Média 88 52,6 4703,3058 0,03602 1 192 84 4730,837 0,0818 2 183 82 4747,842 0,0805 3 175 83 4710,623 0,0763 4 192 78 4660,499 0,0799 5 190 75 4689,105 0,0781
Nº de iterações = 200
Média 186,4 80,4 4707,7812 0,07932
Tabela 3: Amostra de dados 2.
Tabela 4: Amostra de dados 3.
Nº de poços = 20; Nº de plataformas = 4; Nº de capacidades = 3;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 100 28 2378,473 0,0201 2 100 39 2376,408 0,0208 3 100 32 2353,216 0,019 4 100 31 2377,308 0,0185 5 100 34 2376,267 0,0195
Nº de iterações = 100
Média 100 32,8 2372,3344 0,01958 1 200 29 2365,42 0,0638 2 200 36 2362,975 0,0568 3 200 61 2405,446 0,068 4 200 52 2403,311 0,063 5 200 53 2407,392 0,0612
Nº de iterações = 200
Média 200 46,2 2388,9088 0,06256
50
Nº de poços = 40; Nº de plataformas = 4; Nº de capacidades = 3;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 100 52 4776,876 0,0503 2 100 47 4716,862 0,0513 3 100 55 4717,888 0,051 4 100 56 4735,789 0,0505 5 100 48 4771,707 0,0492
Nº de iterações = 100
Média 100 51,6 4743,8244 0,05046 1 200 73 4708,662 0,1141 2 200 72 4729,709 0,1148 3 200 61 4713,957 0,1102 4 200 69 4724,197 0,1112 5 200 80 4752,509 0,1138
Nº de iterações = 200
Média 200 71 4725,8068 0,11282
Tabela 5: Amostra de dados 4.
Tabela 6: Amostra de dados 5.
Nº de poços = 20; Nº de plataformas = 3; Nº de capacidades = 4;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 100 35 2345,716 0,0177 2 100 43 2352,783 0,0188 3 100 51 2374,903 0,0203 4 100 37 2403,248 0,0175 5 100 47 2329,727 0,0203
Nº de iterações = 100
Média 100 42,6 2361,2754 0,01892 1 200 58 2406,989 0,05 2 200 55 2359,693 0,0438 3 200 45 2349,432 0,0406 4 200 70 2366,653 0,0479 5 200 50 2353,362 0,0466
Nº de iterações = 200
Média 200 55,6 2367,2258 0,04578
51
Nº de poços = 40; Nº de plataformas = 3; Nº de capacidades = 4;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 95 48 4712,178 0,0307 2 94 60 4722,685 0,0318 3 93 60 4695,344 0,0318 4 89 50 4671,627 0,0292 5 89 39 4715,463 0,0292
Nº de iterações = 100
Média 92 51,4 4703,4594 0,03054 1 182 74 4709,936 0,0682 2 172 71 4687,517 0,0675 3 177 79 4701,144 0,068 4 177 71 4705,519 0,068 5 174 74 4655,181 0,0661
Nº de iterações = 200
Média 176,4 73,8 4691,8594 0,06756
Tabela 7: Amostra de dados 6.
Tabela 8: Amostra de dados 7.
Nº de poços = 20; Nº de plataformas = 4; Nº de capacidades = 4;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 100 31 2387,925 0,0266 2 100 32 2389,115 0,0263 3 100 27 2387,878 0,0258 4 100 29 2391,612 0,0271 5 100 32 2402,454 0,0266
Nº de iterações = 100
Média 100 30,2 2391,7968 0,02648 1 200 43 2406,061 0,0609 2 200 34 2368,44 0,0547 3 200 34 2388,21 0,0576 4 200 42 2365,226 0,0594 5 200 27 2377,924 0,0521
Nº de iterações = 200
Média 200 36 2381,1722 0,05694
52
Nº de poços = 40; Nº de plataformas = 4; Nº de capacidades = 4;
Solução nº
Nº de itens da lista de soluções viáveis
Nº de itens da lista Pareto
Melhor solução
Tempo (min)
1 100 54 4759,016 0,0511 2 100 54 4663,481 0,0526 3 100 48 4670,852 0,0511 4 100 44 4774,324 0,076 5 100 53 4742,171 0,0539
Nº de iterações = 100
Média 100 50,6 4721,9688 0,05694 1 200 78 4703,512 0,1227 2 200 76 4726,092 0,1188 3 200 69 4710,691 0,1175 4 200 75 4718,723 0,1201 5 200 67 4685,94 0,1391
Nº de iterações = 200
Média 200 73 4708,9916 0,12364
Tabela 9: Amostra de dados 8.
7.3 Considerações sobre as amostras de dados
As amostras foram comparadas em relação ao número de iterações, como
pode ser observado nas tabelas 10 e 11.
Nº de poços
Nº de plataformas
Nº de capacidades
Média do nº de itens da lista de Soluções Viáveis
Média do nº de
itens da lista de Pareto
Média de Melhor
Solução
Média de Tempo (min)
20 100 37,2 2366,7816 0,02262 40
3 88 52,6 4703,3058 0,03602
20 100 32,8 2372,3344 0,01958 40
4 3
100 51,6 4743,8244 0,05046 20 100 42,6 2361,2754 0,01892 40
3 92 51,4 4703,4594 0,03054
20 100 30,2 2391,7968 0,02648 40
4 4
100 51,6 4743,8244 0,05046
Nº de iterações =
100
Média 97,5 43,75 3548,325275 0,031885
Tabela 10: Média das amostras com 100 iterações.
53
Nº de poços
Nº de plataformas
Nº de capacidades
Média do nº de itens da lista de Soluções Viáveis
Média do nº de
itens da lista de Pareto
Média de Melhor
Solução
Média de Tempo (min)
20 200 59 2371,4872 0,05678 40
3 186,4 80,4 4707,7812 0,07932
20 200 46,2 2388,9088 0,06256 40
4 3
200 71 4725,8068 0,11282 20 200 55,6 2367,2258 0,04578 40
3 176,4 73,8 4691,8594 0,06756
20 200 36 2381,1722 0,05694 40
4 4
200 71 4725,8068 0,11282
Nº de iterações =
200
Média 195,35 61,625 3545,006025 0,0743225
Tabela 11: Média das amostras com 200 iterações.
7.3.1 Médias das amostras com 100 iterações
Primeira comparação: quando são utilizados os parâmetros número
de poços = 20, número de plataformas = 3, número de capacidade =
3, número de iterações = 100, é obtido uma média de 37,2 soluções
dominantes (lista de Pareto) e uma melhor solução com valor
2366,7816 em um tempo médio de 0,02262 minutos. Quando o
parâmetro número de capacidade é alterado para 4, nota-se boas
melhoras, é obtido uma média de 42,6 soluções dominantes (lista de
Pareto) e uma melhor solução com valor 2361,2754 em um tempo
médio de 0,01892 minutos. Segundo essa amostra, é melhor utilizar 4
níveis de capacidade para esse problema.
Segunda comparação: quando são utilizados os parâmetros número
de poços = 40, número de plataformas = 3, número de capacidade =
3, número de iterações = 100, é obtido uma média de 52,6 soluções
dominantes (lista de Pareto) e uma melhor solução com valor
4703,3058 em um tempo médio de 0,03602 minutos. Quando o
parâmetro número de plataforma é alterado para 4, nota-se que a
qualidade da solução piora, é obtido uma média de 51,6 soluções
dominantes (lista de Pareto) e uma melhor solução com valor
4743,8244 em um tempo médio de 0,05046 minutos. De acordo com
54
essa amostra, não é viável aumentar o número de plataforma para
esse problema.
7.3.2 Médias das amostras com 200 iterações
Primeira comparação: quando são utilizados os parâmetros número
de poços = 20, número de plataformas = 3, número de capacidade =
4, número de iterações = 200, é obtido uma média de 55,6 soluções
dominantes (lista de Pareto) e uma melhor solução com valor
2367,2258 em um tempo médio de 0,04578 minutos. Quando o
parâmetro número de poços é alterado para 40, nota-se que a
qualidade da solução piora, é obtido uma média de 73,8 soluções
dominantes (lista de Pareto) e uma melhor solução com valor
4691,8594 em um tempo médio de 0,06756 minutos. Segundo essa
amostra, apesar da média de soluções dominantes ser superior com
40 poços, é melhor utilizar 20 poços para esse problema.
Segunda comparação: quando são utilizados os parâmetros número
de poços = 40, número de plataformas = 4, número de capacidade =
3, número de iterações = 200, é obtido uma média de 71 soluções
dominantes (lista de Pareto) e uma melhor solução com valor
4725,8068 em um tempo médio de 0,11282 minutos. Quando o
parâmetro número de capacidade é alterado para 4, nota-se que a
qualidade da solução não sofre qualquer alteração, ficando com a
mesma média de soluções dominantes (lista de Pareto), de melhor
solução e de tempo médio. De acordo com essa amostra, não faz
diferença utilizar 3 ou 4 níves de capacidades para esse problema.
Os dados citados nas seções 7.3.1 e 7.3.2 foram demonstrados em
detalhes nas tabelas 10 e 11. Cabe ressaltar que várias outras comparações
poderiam ser feitas utilizando estas 2 tabelas.
No que se refere ao tempo, era previsível que com 100 iterações o mesmo
tendesse a diminuir, o que de fato ocorreu, sendo em média 0,031885 para 100
iterações e 0,0743225 para 200 iterações.
55
Segundo as amostras coletadas durante a execução do software, nota-se
que à medida que as iterações são incrementadas a tendência é ter melhores
soluções, em contrapartida, o tempo tende a aumentar significativamente.
56
Capítulo 8 – Conclusão
“Neste capítulo será apresentada as conclusões, as sugestões de melhorias futuras, seguidas
pelas referências bibliográficas e os anexos.”
_________________________________________________________________________
Neste trabalho foi desenvolvida uma nova heurística para solucionar o
problema de localização multiobjetivo de plataforma de produção de petróleo
multicapacitada, considerado um problema vital para a instalação de plataformas
de produção de petróleo. Também pode-se citar como fatores relevantes na
instalação de plataformas de produção de petróleo os altos investimentos
envolvidos e o grau elevado de impacto que essas decisões têm sobre os custos.
Para tratar o problema foi abordado o modelo de localização multiobjetivo
de plataforma de produção de petróleo multicapacitada (CORTES, 1999). A
otimização multiobjetivo é mais adequada para representar problemas reais, visto
que a maioria dos problemas reais possuem mais de um objetivo que muitas
vezes são conflitantes. Nestes casos, a otimização de um objetivo pode ocasionar
a penalização de outro, e estes devem ser satisfeitos simultaneamente. É
considerado no modelo que nem todas as localizações para plataformas terão,
necessariamente, uma plataforma instalada e nem todas as localizações para
poços terão poços perfurados.
A heurística GRASP apesar de bem recente, vem recebendo atenção
especial dos pesquisadores, por ser de fácil implementação e por obter bons
resultados em baixo tempo computacional. Esta heurística já foi utilizada para
resolver diferentes problemas de localização monobjetivo de facilidades, mas a
sua abordagem em problemas de localização multiobjetivo de facilidades ainda é
muito escarsa. Após vários estudos comparativos com outras heurísticas utilizadas
para resolução deste tipo de problema, a heurística GRASP foi selecionada para
servir como base para o desenvolvimento da nova heurística.
57
Foi desenvolvido um software denominado Nova heurística para PLMPM na
linguagem de programação Delphi que incorporou o modelo abordado e a nova
heurística.
Os dados utilizados nos problemas testes apresentados na seção 7.1,
referentes aos custos e produção foram baseados em estudos, descritos em Brito
(2007) e Rosa et al. (2002), do setor petrolífero. Entretanto, não foram
encontrados valores para base dos cálculos de danos ambientais, dessa forma
esses valores são ilustrativos.
Foram geradas amostras de dados através do software, variando os
seguintes dados de entrada: número de poços, número de plataformas, número de
capacidades e número de iterações e obtido os seguintes dados de saída: número
de itens da lista de soluções viáveis, número de itens da lista de Pareto, valor da
melhor solução e o tempo de execução, como detalhado nas tabelas 2, 3, 4, 5, 6,
7, 8 e 9. As tabelas 10 e 11 fazem uma média de todas as amostras,
diferenciando-se pelo número de iterações (100 e 200 respectivamente), com o
intuito de comparar seus resultados, como demonstrado nas seções 7.3.1 e 7.3.2.
Como proposta para trabalhos futuros, é interessante fazer um hibridismo
da nova heurística, tanto em sua primeira quanto em sua segunda etapa, pois
estudos recentes sobre a GRASP obtiveram resultados expressivos.
Cabe ressaltar que o software desenvolvido deverá servir de protótipo para
futuras comparações computacionais, vistos que software como este era
inexistente na literatura.
58
REFERÊNCIAS BIBLIOGRÁFICAS
ARAKAKI, R. G. I. Heurística de localização-alocação para problemas de
localização de facilidades. Tese de doutorado, São José dos Campos – SP,
INPE, 2002.
ARROYO, J. E. C.; JÚNIOR, P. L. O; SOUZA, V. A. A. Heurísticas GRASP e ILS
para o problema no-wait flowshop scheduling multiobjetivo. In: XLII SBPO, Bento
Gonçalves – RS, 2010.
BALLOU, R. H. Business logistics management: planning and control. Englewood
Cliffs; London, Prentice-Hall International, 1985.
BALLOU, R. H. Business logistic's management: planning, organizing, and
controlling the supply chain. London, Prentice-Hall International, 1999.
BRANDEAU, M. L.; CHIU, S. S. An overview of representative problems in location
research. Management Science, v. 35, p. 645-674, 1989.
BRASIL, M. M. E. Balanço Energético Nacional 2007: Ano Base 2006. Rio de
Janeiro EPE, p. 48, 2007.
BRITO, D. Plataforma P-54 tem custo 38% maior do que o previsto. Disponível em
http://www1.folha.uol.com.br/folha/dinheiro/ult91u321876.shtml, acessado em
Agosto de 2010, 2007.
BROTCORNE, L; LAPORTE, G; SEMET, F. Ambulance Location and relocation
models. European Journal of Operations Research, v. 147, p. 451-463, 2003.
CASTRO, R. E. Otimização de estruturas com multi-objetivos via algoritmos
genéticos. Tese de doutorado, Rio de Janeiro – RJ, UFRJ, 2001.
CORDEAU, J. F.; LAPORTE, G.; POTVIN, J. Y.; ANDSAVELSBERGH, M. W. P.
Transportation on demand. In: C. Barnhartand G. Laporte (eds.), Transportation,
Handbook sin Operations Research And Management Science, v. 14, p. 429–466,
North-Holland, Amsterdam, 2007.
CORTES, J. M. R. Uma contribuição para a resolução do problema de
alocação multiobjetivo de plataformas multicapacitadas de produção de
59
petróleo. Dissertação de Mestrado, Campos dos Goytacazes – RJ, UENF, Rio de
Janeiro, 1998.
CORTES, J. M. R. Problema de localização de plataformas de produção de
petróleo: Um método de resolução. In: XIX ENEGEP, Rio de Janeiro - RJ, 1999.
CORTES, J. M. R.; PAULA JÚNIOR, G. G. Uma abordagem para resolução do
problema de localização de atividades econômicas. In: XXV ENEGEP, Porto
Alegre - RS, 2005.
CRAINIC, T. G. A survey of optimization models for long-haul freight
transportation. Quebec: Départament des sciences administratives, Université du
Québec à Montreal, 1998.
CRAVO, G. L.; RIBEIRO, G. M.; LORENA, L. A. N. Um GRASP para o Problema
da Rotulação Cartográfica de Pontos: Novas Soluções. Produto & Produção, v.
10, p. 122-135, 2009.
CURRENT, J.; DASKIN, M.; SCHILLING, D. Discrete network location models. In:
DREZNER, Z.; HAMACHER, H. Facility location theory: applications and
methods. Berlin: Springer-Verlag, p.81-118, 2002.
DEVINE, M. D.; LESSO, W. G. Models for the minimum cost development of
offshore oil fields. Management Science, v. 18, p. B378-B387, 1972.
DOMINGOS, A. P. Planejamento da infra-estrutura de redes FWA com
algoritmos Genéticos. Dissertação de mestrado, Campinas – SP, UNICAMP,
2005.
GUALDA, N. D. F. Terminais de transportes: contribuição ao planejamento e
ao dimensionamento operacional. Tese de doutorado, São Paulo - SP, USP,
1995.
FEO, T. A.; RESENDE, M. G. C. Greedy randomized adaptive search procedures.
Journal of Global Optmization, v. 6, p. 109-133, 1995.
60
FILHO, R. S. V.; GOMES, M. J. N.; XAVIER, A. E. Um algoritmo GRASP híbrido
para o problema de localização capacitada de custo fixo. In: XXXVII SBPO,
Gramado – RS, 2005.
FLEURENT, C.; GLOVER, F. Improved constructive multistart stra-tegies for the
quadratic assignment problem using adaptive memory. INFORMS Journal on
Computing, v. 11, p. 198-204, 1999.
FRANCATO, A. L. Otimização multiobjetivo para operação de sistemas
urbanos de abastecimento de água. Tese de Doutorado, Campinas – SP,
UNICAMP, 2002.
HANSEN, P.; PEDROSA, E.; RIBEIRO, C. Location and sizing of offshore
platforms for oil exploration. European Journal of Operational Research, v. 58,
p. 202-214, 1992.
HANSEN, P.; PEDROSA, E.; RIBEIRO, C. Modelling location and sizing of
offshore platforms. European Journal of Operational Research, v. 72, p. 602-
606, 1994.
HAKIMI, S. L. Optimum locations of switching centres and the absolute centres
and medians of a graph. Operations Research, v. 12, p. 450-459, 1964.
HAKIMI, S. L. Optimum location of switching centers in a communications network
and some related graph theoretic problems. Operations Research, v. 13, p. 462-
475, 1965.
KLOSE, A.; DREXL, A. Facility location models for distribution system design.
European Journal of Operational Research, Article in press, 2004.
KORHONEN, P. Multiple objective programming support. International Institute
for Applied Systems Analysis – IIASA, Interim Report IR-98-010/March, p. 16,
1998.
LARSON, R. C.; ODONI, A. R. Urban Operations Research. Prentice-Hall,
Englewood Cliffs, New Jersey, 1981.
61
LAWRENCE, K. D.; REEVES, G. R.; LAWRENCE, S. M. A multiple objective shift
allocation model. IEE Trans., v. 16. p. 323-328, 1984.
LEE, S. M.; CLAYTON, E. R. A goal programming model for academic resource
allocation. Management Science, v. 28, p. 395-408, 1972.
LEE, S. M.; SCHNIEDERJANS, M. J. A multicriteria assignment problem: a goal
programming approach. Interfaces, v. 13, p. 75-81, 1983.
LORENZONI, L. L.; AHONEN, H. T.; ALVARENGA, A. G. Um algoritmo híbrido
baseado em colônia de formigas e recozimento simulado para problemas de
escalonamento com restrição de recursos e múltiplos modos de processamento.
In: XXVI ENEGEP, Fortaleza – CE, 2006.
LOUVEAUX, F. V. Discrete stochastic location models. Operations Research, v.
6, p. 23-34, 1986.
MACHADO, M. D. Algoritmo evolucionário PBIL multiobjetivo aplicado ao
problema de recarga de reatores nucleares. Dissertação de mestrado, Rio de
Janeiro – RJ, UFRJ, 2005.
MAGEE, R. The Usefulness of Commonality Information in Cost Control Decisions.
The Accounting Review, v. 52, p. 869-880, 1977.
MARTINS, S.; PARDALOS, P.; RESENDE, M.; RIBEIRO, C. Greedy randomized
adaptive search procedures for the steiner problem in graphs. DIMACS Series on
Discrete Mathematics and Theoretical Computer Science, v. 43, p. 13-145,
1999.
MELKOTE, S; DASKIN, M. An integrated model of facility location and
transportation network design. Transportation Research, v. 35, p. 515-538, 2001.
NAGY, G.; SALHI, S. Location-routing: issues, models and methods. European
Journal of Operational Research, v. 177, p. 649-672, 2007.
NEGREIROS, G.; MARCOS, J.; CARVALHO, J.B.; MACULAN, N. Uma Avaliação
Experimental da Meta-heurística GRASP Aplicada ao Problema de Localização
Não Capacitado. Submetido a Revisa Pesquisa Operacional, 2005.
62
NOVAES, A. G. Sistemas logísticos: transporte, armazenagem, e distribuição
física de produtos. São Paulo: Edgard Blücher Ltda, p. 372, 1989.
ODELL, P. R.; ROSING, K. E. An Application of Integer Programming to Economic
Studies of Offshore oil Development. Recherches Economiques de Louvain, v.
44, p. 53-69, 1978.
OWEN, S. H.; DASKIN, M. S. Strategic Facility Location: A Review. European
Journal of Operational Research, v. 111, p. 423–447, 1998.
PAIVA, I. A. Planejamento otimizado para a infra-estrutura de redes de
comunicações móveis. Dissertação de mestrado - Faculdade de Engenharia
Elétrica e de Computação, 2002.
PAPADIMITRIOU, C. H.; YANNAKAKIS, M. Shortest paths without a map.
Theoret.Comput. Sci., v. 84, p. 127–150, 1991.
PETROBRAS, Bacia de Campos - A maior reserva de petróleo do Brasil.
Disponível em
http://www2.petrobras.com.br/Petrobras/portugues/plataforma/pla_bacia_campos.
htm, último acesso em: Setembro de 2010, 2010.
PIQUET, R. Petróleo, royalties e região. Rio de Janeiro: Garamond, p. 39-94,
2003.
PRADO, D. F. M. Busca Tabu aplicada ao problema de localização de
facilidades com restrições de capacidade e fonte única. Dissertação de
mestrado, Campinas – SP, UNICAMP, 2007.
PRAIS, M.; RIBEIRO, C. An application to a matrix decomposition problem in
TDMA tra-c assignment. INFORMS Journal on Computing, v. 12, p. 164-176,
2000.
RAMIREZ, C. Uma heurística com cluster para o problema de K-dispersão.
Dissertação de mestrado, Rio de Janeiro – RJ, IME, 1993.
RESENDE, M. G. C.; WERNECK, R. F. A hybrid heuristic for the p-median
problem. Journal of Heuristics, v. 10, p. 59–88, 2004.
63
RESENDE, M.; RIBEIRO, C. GRASP with path-relinking: Recent advances and
applications. In: Metaheuristics: Progress as Real Problem Solvers. 2005. p. 29-63.
RIBEIRO, W. S.; ARROYO, J. E. C. Metaheurística GRASP Biobjetivo para um
Problema de Localização de Facilidades. In: XXVIII ENEGEP, Rio de Janeiro - RJ,
2008.
ROSA, L. P.; ESTEFEN, S.; BARRETO, H. T. A Construção de Plataformas de
Petróleo no Brasil. Disponível em:
http://www.planeta.coppe.ufrj.br/artigo.php?artigo=337, último acesso em: Agosto
de 2010, 2002.
ROSING, K. E. Considering offshore production platformas. European Journal of
Operational Research, v. 10, p. 357-363, 1994.
SANTOS, P. M.; SOARES, M. S.; ARROYO, J. E. C. Heurística GRASP bi-objetivo
para o problema das p-medianas não capacitado. In: SPOLM 2009, Rio de Janeiro
– RJ, 2009.
SILVA, M. B.; DRUMMOND, L. M. A.; OCHI, L.S. Metaheurísticas GRASP + VNS
para a solução de Problemas de Otimização Combinatória. In: XXXII SBPO,
Viçosa – MG, 2000.
TICONA, W. G. C. Aplicação de Algoritmos Genéticos Multi-Objetivo para
Alinhamento de Seqüências Biológicas. Dissertação de mestrado, São Paulo -
SP, USP, 2003.
TONDO, C. M. Um modelo matemático para a localização estratégica de
terminais de contêineres no interior: aplicação ao estado de São Paulo. Tese
de doutorado São Paulo – SP, 1992.
64
Anexo 1 – Código fonte da unidade principal
do software
“Neste anexo será apresentado o código fonte da unidade principal do software proposto.”
_________________________________________________________________________
Unidade principal
unit Principal;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, ActnList, ToolWin, Buttons, ImgList, strUtils,
XPStyleActnCtrls, ActnMan, GIFImg, Mask;
type
TfPrincipal = class(TForm)
pc: TPageControl;
TbDados_Entrada: TTabSheet;
tbDados_Localizacao_1: TTabSheet;
am: TActionManager;
Sair: TAction;
Gerar_Matriz_Vetor: TAction;
il: TImageList;
Incluir_CIJ: TAction;
Incluir_FIK: TAction;
Incluir_AJ: TAction;
Incluir_DWJ: TAction;
Incluir_DOI: TAction;
Incluir_DQIJ: TAction;
Incluir_Capacidade: TAction;
Incluir_DPIK: TAction;
Gerar_Heuristica: TAction;
65
tbPrimeira_Etapa: TTabSheet;
gbLista_Solucoes_Viaveis: TGroupBox;
lbxLista_Solucoes_Viaveis: TListBox;
tbDados_Localizacao_2: TTabSheet;
btGerar_Matriz_Vetor: TBitBtn;
edCapacidades: TEdit;
edPocos: TEdit;
edNumero_Iteracoes: TEdit;
btGerar_Heuristica: TBitBtn;
edLocais: TEdit;
lbCapacidades: TLabel;
lbPocos: TLabel;
lbLocais: TLabel;
lbTempo_Gerar_Heuristica: TLabel;
lbTempo_Gerar_Matriz_Vetor: TLabel;
lbNumero_Iteracoes: TLabel;
edCusto_Maximo: TEdit;
lbCusto_Maximo: TLabel;
lbMilhoes: TLabel;
imModelo_Matematico: TImage;
GbCusto_CIJ: TGroupBox;
lbxCusto_CIJ: TListBox;
cbxCusto_CIJ: TComboBox;
edCusto_CIJ: TEdit;
btCusto_CIJ: TBitBtn;
GbCusto_FIK: TGroupBox;
lbxCusto_FIK: TListBox;
cbxCusto_FIK: TComboBox;
edCusto_FIK: TEdit;
btCusto_FIK: TBitBtn;
GbProducao_AJ: TGroupBox;
66
lbxProducao_AJ: TListBox;
cbxProducao_AJ: TComboBox;
edProducao_AJ: TEdit;
btProducao_AJ: TBitBtn;
GbDA_DWJ: TGroupBox;
lbxDA_DWJ: TListBox;
cbxDA_DWJ: TComboBox;
edDA_DWJ: TEdit;
btDA_DWJ: TBitBtn;
GbDA_DOI: TGroupBox;
lbxDA_DOI: TListBox;
cbxDA_DOI: TComboBox;
edDA_DOI: TEdit;
btDA_DOI: TBitBtn;
GbDA_DQIJ: TGroupBox;
lbxDA_DQIJ: TListBox;
cbxDA_DQIJ: TComboBox;
edDA_DQIJ: TEdit;
btDA_DQIJ: TBitBtn;
GbDA_DPIK: TGroupBox;
lbxDA_DPIK: TListBox;
cbxDA_DPIK: TComboBox;
edDA_DPIK: TEdit;
btDA_DPIK: TBitBtn;
GbCap_Bk: TGroupBox;
lbxCap_Bk: TListBox;
cbxCap_Bk: TComboBox;
edCap_Bk: TEdit;
btCap_Bk: TBitBtn;
gbLista_Solucoes_Inviaveis: TGroupBox;
lbxLista_Solucoes_Inviaveis: TListBox;
67
edPeso_Z3: TEdit;
edPeso_Z2: TEdit;
edPeso_Z1: TEdit;
lbPeso_Z3: TLabel;
lbPeso_Z2: TLabel;
lbPeso_Z1: TLabel;
tbSegunda_Etapa: TTabSheet;
gbLista_Pareto: TGroupBox;
lbxLista_Pareto: TListBox;
gbLista_Media_Ponderada: TGroupBox;
lbxLista_Media_Ponderada: TListBox;
lbExplicacao: TLabel;
tbMelhor_Solucao: TTabSheet;
gbXij_Variavel_Decisao: TGroupBox;
lbxXij_Variavel_Decisao: TListBox;
gbYik_Variavel_Decisao: TGroupBox;
lbxYik_Variavel_Decisao: TListBox;
lbMelhor_Solucao: TLabel;
lbMelhor_Solucao_Resposta: TLabel;
procedure Tab_Numerico_Com_Virgula(Sender: TObject;var Key: Char);
procedure Tab_Numerico_Virgula(Sender: TObject;var Key: Char);
procedure Entrada(Sender: TObject);
procedure Saida(Sender: TObject);
procedure SairExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Incluir_CIJExecute(Sender: TObject);
procedure Incluir_FIKExecute(Sender: TObject);
procedure Incluir_AJExecute(Sender: TObject);
procedure Incluir_DWJExecute(Sender: TObject);
procedure Incluir_DOIExecute(Sender: TObject);
procedure Incluir_DQIJExecute(Sender: TObject);
68
procedure Incluir_DPIKExecute(Sender: TObject);
procedure Incluir_CapacidadeExecute(Sender: TObject);
procedure Gerar_Matriz_VetorExecute(Sender: TObject);
procedure Gerar_HeuristicaExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fPrincipal: TfPrincipal;
implementation
uses Dados;
{$R *.DFM}
procedure TfPrincipal.Tab_Numerico_Com_Virgula(Sender: TObject;var Key:
Char);
begin
if Key=#13 then
begin
Key:=#0;
SelectNext(ActiveControl, True, True);
end;
if not (Key in ['0'..'9', ',', #8, #0]) then
Key:=#0;
end;
procedure TfPrincipal.Tab_Numerico_Virgula(Sender: TObject;var Key: Char);
begin
if Key=#13 then
begin
Key:=#0;
SelectNext(ActiveControl, True, True);
69
end;
if not (Key in ['0'..'9', #8, #0]) then
Key:=#0;
end;
procedure TfPrincipal.Entrada(Sender: TObject);
begin
Tedit(Sender).Color:=$00FFE8E8;
end;
procedure TfPrincipal.Saida(Sender: TObject);
begin
Tedit(Sender).Color:=clWhite;
end;
procedure TfPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Application.MessageBox(pchar('Deseja sair do sistema?'),'Saindo.',MB_YESNO
+ MB_ICONQUESTION + MB_DEFBUTTON1)= IDYes then
begin
Limpar_Tabela;
Application.Terminate;
end else
Abort;
end;
procedure TfPrincipal.SairExecute(Sender: TObject);
begin
Close;
end;
procedure TfPrincipal.Gerar_Matriz_VetorExecute(Sender: TObject);
begin
Inicia_E_Cria_Matriz_Vetor;
end;
procedure TfPrincipal.Gerar_HeuristicaExecute(Sender: TObject);
70
begin
Executar_Heuristica;
end;
procedure TfPrincipal.Incluir_CIJExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxCusto_CIJ, cbxCusto_CIJ, edCusto_CIJ);
end;
procedure TfPrincipal.Incluir_FIKExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxCusto_FIK, cbxCusto_FIK, edCusto_FIK);
end;
procedure TfPrincipal.Incluir_AJExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxProducao_AJ, cbxProducao_AJ, edProducao_AJ);
end;
procedure TfPrincipal.Incluir_DWJExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxDA_DWJ, cbxDA_DWJ, edDA_DWJ);
end;
procedure TfPrincipal.Incluir_DOIExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxDA_DOI, cbxDA_DOI, edDA_DOI);
end;
procedure TfPrincipal.Incluir_DQIJExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxDA_DQIJ, cbxDA_DQIJ, edDA_DQIJ);
end;
procedure TfPrincipal.Incluir_DPIKExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxDA_DPIK, cbxDA_DPIK, edDA_DPIK);
end;
71
procedure TfPrincipal.Incluir_CapacidadeExecute(Sender: TObject);
begin
Incluir_Valor_lbx(lbxCap_Bk, cbxCap_Bk, edCap_Bk);
end;
end.
72
Anexo 2 – Código fonte da unidade data
module do software
“Neste anexo será apresentado o código fonte da unidade data module do software proposto.”
_________________________________________________________________________
Unidade data module
unit Dm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, ActnList, ToolWin, Buttons, ImgList, strUtils,
DB, ADODB;
type
TfDm = class(TDataModule)
dsTabela_Auxiliar: TDataSource;
Conexao: TADOConnection;
qrAcao: TADOQuery;
qrAcaoindice: TWideStringField;
qrAcaoxij: TWideMemoField;
qrAcaoyik: TWideMemoField;
procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fDm: TfDm;
implementation
{$R *.dfm}
73
procedure TfDm.DataModuleCreate(Sender: TObject);
begin
Conexao.ConnectionString:=ExtractFilePath(Application.ExeName)+'banco_dados
.mdb';
end;
end.
74
Anexo 3 – Código fonte da unidade dados do
software
“Neste anexo será apresentado o código fonte da unidade dados do software proposto.”
_________________________________________________________________________
Unidade dados
unit Dados;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, ActnList, ToolWin, Buttons, ImgList, strUtils,
XPStyleActnCtrls, ActnMan, GIFImg, Dm, DB, ADODB;
type
TVetorStr = Array of String;
TVetorInt = Array of Integer;
TVetorReal = Array of Real;//vetor de números reais
TMatrizInt = Array of Array of Integer;
TMatrizReal = Array of Array of Real; //matriz de números reais
Ponteiro = ^TElemento;
TElemento = record
Z1: Real;
Z2: Real;
Z3: Real;
Prox: Ponteiro;
end;
Lista_Ordenada = record
Cabeca: Ponteiro;
Tamanho: Integer;
end;
//Criação/preenchimento dos vetores/matrizes
75
procedure Campo_Obrigatorio(ed: TEdit);
procedure Inicia_E_Cria_Matriz_Vetor;
procedure Carregar_lbx_cbx(sTipo, sLinha, sColuna, sLetra: String; lbx: TListBox;
cbx: TCombobox);
procedure Incluir_Valor_lbx(lbx: TListBox; cbx: TCombobox; ed: TEdit);
function Obter_Valor_lbx(iLinha, iColuna: Integer; sTipo, sLetra: String; lbx:
TListBox): Real;
//Manipulando as variáveis de decisão Xij e Yik
procedure Definir_Tamanho_Xij_Yik; //Definir o tamanho da matriz Xij e Yik
procedure Preenche_Valor_Xij_Yik; //Preenche a matriz Xij e Yik
function Existe_Na_Lista_I(sValor: String): Boolean;
//Manipulando Z1
procedure Definir_Tamanho_Cij_Fik; //Definir o tamanho da matriz Cij e Fik
procedure Preenche_Valor_Cij_Fik; //Preenche a matriz Cij e Fik
function Calcular_Z1: Real; //Calcular o valor de Z1
//Manipulando Z2
procedure Definir_Tamanho_Aj; //Definir o tamanho do vetor Aj
procedure Preenche_Valor_Aj; //Preenche o vetor Aj
function Calcular_Z2: Real; //Calcular o valor de Z2
//Manipulando Z3
procedure Definir_Tamanho_DWj_DOi_DQij_DPik; //Definir o tamanho dos vetores
DWj e DOi e das matrizes DQij e DPik
procedure Preenche_Valor_DWj_DOi_DQij_DPik; //Preenche os vetores DWj e
DOi e as matrizes DQij e DPik
function Calcular_Z3: Real; //Calcular o valor de Z3
//Manipulando a 1ª Restrição
function Restricao_1(eCusto_Maximo: Real): Boolean;
//Manipulando a 3ª Restrição
procedure Definir_Tamanho_Bk; //Definir o tamanho do vetor Bk
procedure Preenche_Valor_Bk; //Preenche do vetor Bk
function Restricao_3: Boolean;
76
//Manipulando a 5ª, 6ª e 7ª Restrição
function Restricao_5_6_7(rZ1, rZ2, rZ3: Real):Boolean;
//Calcular Função Objetivo
procedure Calcular_Funcoes_Objetivo;
//Manipulando a Lista de Pareto
procedure Lista_Pareto_Inicializar(var L: Lista_Ordenada);
procedure Lista_Pareto_Inserir(var L: Lista_Ordenada; Z1, Z2, Z3: Real);
function Lista_Pareto_Vazia(L: Lista_Ordenada): Boolean;
procedure Lista_Pareto_Atualizar(var L: Lista_Ordenada; Z1, Z2, Z3: Real);
procedure Lista_Pareto_Remover(var L: Lista_Ordenada; Z1, Z2, Z3: Real);
function Lista_Pareto_Entrar_Z2(L: Lista_Ordenada; Z2, Z3: Real): Boolean;
function Lista_Pareto_Entrar_Z3(L: Lista_Ordenada; Z3: Real): Boolean;
procedure Lista_Pareto_Mostrar(L: Lista_Ordenada);
function Retorna_Indice(slLista: TStringList; sValor: String): Integer;
function Calcular_Media_Ponderada(sItem_Lista: String): String;
function Obter_Valores_Xij: String;
function Obter_Valores_Yik: String;
procedure Limpar_Formulario;
procedure Executar_Heuristica;
procedure Inserir_Registro(sIndice: String);
procedure Limpar_Tabela;
procedure Exibir_Registro(sIndice: String);
var
i: Integer=0; //Declarando e iniciando a variável com valor 0
j: Integer=0; //Declarando e iniciando a variável com valor 0
k: Integer=0; //Declarando e iniciando a variável com valor 0
eZ1: Real=0;
eZ2: Real=0;
eZ3: Real=0;
Lista_Xij: TVetorStr; //Vetor para armazena o resultado da variável de decisão Xij
Lista_Yik: TVetorStr; //Vetor para armazena o resultado da variável de decisão
77
Yik
Xij: TMatrizInt; //Matriz da variável de decisão Xij
Yik: TMatrizInt; //Matriz da variável de decisão Yik
Cij: TMatrizReal; //Z1
Fik: TMatrizReal; //Z1
Aj: TVetorReal; //Z2
Dwj: TVetorReal; //Z3
DOi: TVetorReal; //Z3
Dqij: TMatrizReal; //Z3
Dpik: TMatrizReal; //Z3
Bk: TVetorReal; // R3
Pareto: Lista_Ordenada;
slLista_I, slLista_Solucoes_Viaveis, slLista_Pareto, slLista_Media_Ponderada:
TStringList;
rMenor_Solucao: Real;
liTempo_1, liTempo_2, liDiferenca: Longint; //Utilizada para cálcular o tempo
gasto
dDiferenca_Segundos, dDiferenca_Minutos: Double; //Utilizada para cálcular o
tempo gasto
Tamanho_Lista_Pareto: Integer;
implementation
Uses Principal;
//Criação/preenchimento das matrizes/vetores
procedure Campo_Obrigatorio(ed: TEdit);
begin
if ed.Text='' Then
begin
Application.MessageBox(pChar('Há campo(s) obrigatório(s) não
preenchido(s)!'), 'Informação.', MB_OK+ MB_ICONINFORMATION);
ed.SetFocus;
Abort;
78
end;
end;
procedure Inicia_E_Cria_Matriz_Vetor;
begin
liTempo_1:= GetTickCount;
fPrincipal.pc.TabIndex:=0;
Campo_Obrigatorio(fPrincipal.edPocos); //Verifica se o edit foi preenchido
corretamemte
Campo_Obrigatorio(fPrincipal.edLocais); //Verifica se o edit foi preenchido
corretamemte
Campo_Obrigatorio(fPrincipal.edCapacidades); //Verifica se o edit foi preenchido
corretamemte
i:=StrToInt(fPrincipal.edLocais.Text); //Defini o valor de i
j:=StrToInt(fPrincipal.edPocos.Text); //Defini o valor de j
k:=StrToInt(fPrincipal.edCapacidades.Text); //Defini o valor de k
Carregar_lbx_cbx('M', IntToStr(StrToInt(fPrincipal.edLocais.Text)+1),
fPrincipal.edPocos.Text, 'C', fPrincipal.lbxCusto_CIJ, fPrincipal.cbxCusto_CIJ);
//fPrincipal.edLocais.Text + 1(plataforma fantasma)
Carregar_lbx_cbx('M', IntToStr(StrToInt(fPrincipal.edLocais.Text)+1),
fPrincipal.edCapacidades.Text, 'F', fPrincipal.lbxCusto_FIK,
fPrincipal.cbxCusto_FIK); //fPrincipal.edLocais.Text + 1(plataforma fantasma)
Carregar_lbx_cbx('V', fPrincipal.edPocos.Text, '', 'A', fPrincipal.lbxProducao_AJ,
fPrincipal.cbxProducao_AJ);
Carregar_lbx_cbx('V', fPrincipal.edPocos.Text, '', 'DW', fPrincipal.lbxDA_DWJ,
fPrincipal.cbxDA_DWJ);
Carregar_lbx_cbx('V', fPrincipal.edLocais.Text, '', 'DO', fPrincipal.lbxDA_DOI,
fPrincipal.cbxDA_DOI);
Carregar_lbx_cbx('M', fPrincipal.edLocais.Text, fPrincipal.edPocos.Text, 'DQ',
fPrincipal.lbxDA_DQIJ, fPrincipal.cbxDA_DQIJ);
Carregar_lbx_cbx('M', fPrincipal.edLocais.Text, fPrincipal.edCapacidades.Text,
'DP', fPrincipal.lbxDA_DPIK, fPrincipal.cbxDA_DPIK);
79
Carregar_lbx_cbx('V', fPrincipal.edCapacidades.Text, '', 'B', fPrincipal.lbxCap_Bk,
fPrincipal.cbxCap_Bk);
fPrincipal.lbxLista_Solucoes_Viaveis.Clear;
fPrincipal.lbxLista_Solucoes_Inviaveis.Clear;
fPrincipal.lbxLista_Pareto.Clear;
fPrincipal.lbxLista_Media_Ponderada.Clear;
fPrincipal.lbMelhor_Solucao_Resposta.Caption:='';
fPrincipal.lbxXij_Variavel_Decisao.Clear;
fPrincipal.lbxYik_Variavel_Decisao.Clear;
liTempo_2:= GetTickCount;
liDiferenca:=liTempo_2-liTempo_1;
dDiferenca_Minutos:=(liDiferenca/1000)/60;
fPrincipal.lbTempo_Gerar_Matriz_Vetor.Caption:='Tempo gasto na execução:
'+FormatFloat('0.0000', dDiferenca_Minutos)+' minuto(s).';
Application.MessageBox(PCHAR('Matrizes/Vetores gerados com sucesso!'),
'Informação.', MB_OK+ MB_ICONINFORMATION);
fPrincipal.Gerar_Heuristica.Enabled:=True;
end;
procedure Carregar_lbx_cbx(sTipo, sLinha, sColuna, sLetra: String; lbx: TListBox;
cbx: TCombobox);
var a, b, iPorcentegem: Integer;
rCusto_CIJ, rCusto_Fik, rProducao_AJ, rDA_DWJ, rDA_DOI, rDA_DQIJ,
rDA_DPIK, rBk: Real;
begin
lbx.Clear;
cbx.Clear;
for a:=1 to StrToInt(sLinha) do
begin
Randomize;
if sTipo='M' then
begin
80
for b:=1 to StrToInt(sColuna) do
begin
Randomize;
iPorcentegem:=Random(25);
rCusto_CIJ:=50; //milhões
rCusto_Fik:=350; //milhões
rDA_DQIJ:=25; //milhões
rDA_DPIK:=30; //milhões
if sLetra='C' then
begin
rCusto_CIJ:=rCusto_CIJ+(rCusto_CIJ*(iPorcentegem/100)); //aumento de
0.25% a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'x'+IntToStr(b)+'='+FormatFloat('0.0000',
rCusto_CIJ));
end;
if sLetra='F' then
begin
rCusto_Fik:=rCusto_Fik+(rCusto_Fik*(iPorcentegem/100)); //aumento de
0.25% a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'x'+IntToStr(b)+'='+FormatFloat('0.0000',
rCusto_Fik));
end;
if sLetra='DQ' then
begin
rDA_DQIJ:=rDA_DQIJ+(rDA_DQIJ*(iPorcentegem/100)); //aumento de
0.25% a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'x'+IntToStr(b)+'='+FormatFloat('0.0000',
rDA_DQIJ));
end;
if sLetra='DP' then
begin
81
rDA_DPIK:=rDA_DPIK+(rDA_DPIK*(iPorcentegem/100)); //aumento de
0.25% a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'x'+IntToStr(b)+'='+FormatFloat('0.0000',
rDA_DPIK));
end;
cbx.Items.Add(sLetra+IntToStr(a)+'x'+IntToStr(b));
end;
end else
begin
iPorcentegem:=Random(25);
rProducao_AJ:=6; //produção de barris de petroleo mensal(em milhões)
rDA_DWJ:=15; //milhões
rDA_DOI:=20; //milhões
rBk:=90; //armazenamento de barris de petroleo mensal(em milhões)
if sLetra='A' then
begin
rProducao_AJ:=rProducao_AJ+(rProducao_AJ*(iPorcentegem/100));
//aumento de 0.25% a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'='+FormatFloat('0.0000', rProducao_AJ));
end;
if sLetra='DW' then
begin
rDA_DWJ:=rDA_DWJ+(rDA_DWJ*(iPorcentegem/100)); //aumento de 0.25%
a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'='+FormatFloat('0.0000', rDA_DWJ));
end;
if sLetra='DO' then
begin
rDA_DOI:=rDA_DOI+(rDA_DOI*(iPorcentegem/100)); //aumento de 0.25% a
cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'='+FormatFloat('0.0000', rDA_DOI));
82
end;
if sLetra='B' then
begin
rBk:=rBk+(rBk*(iPorcentegem/100)); //aumento de 0.25% a cada loop
lbx.Items.Add(sLetra+IntToStr(a)+'='+FormatFloat('0.0000', rBk));
end;
cbx.Items.Add(sLetra+IntToStr(a));
end;
end;
cbx.ItemIndex:=0;
end;
//Inseri o valor manualmente no listbox
procedure Incluir_Valor_lbx(lbx: TListBox; cbx: TCombobox; ed: TEdit);
begin
lbx.Perform(lb_SELECTSTRING,0,LongInt(PChar(cbx.Text+'=')));
lbx.Items.Strings[lbx.ItemIndex]:=cbx.Text+'='+ed.Text;
ed.Clear;
end;
//Retorna o valor do vetor/matriz de acordo com o indice
function Obter_Valor_lbx(iLinha, iColuna: Integer; sTipo, sLetra: String; lbx:
TListBox): Real;
begin
if sTipo='M' then
begin
lbx.Perform(lb_SELECTSTRING,0,LongInt(PChar(sLetra+IntToStr(iLinha+1)+'x'+In
tToStr(iColuna+1)+'=')));
Result:=StrToFloat(ReplaceStr(lbx.Items.Strings[lbx.ItemIndex],
sLetra+IntToStr(iLinha+1)+'x'+IntToStr(iColuna+1)+'=', ''));
end else
begin
lbx.Perform(lb_SELECTSTRING,0,LongInt(PChar(sLetra+IntToStr(iLinha+1)+'=')));
83
Result:=StrToFloat(ReplaceStr(lbx.Items.Strings[lbx.ItemIndex],
sLetra+IntToStr(iLinha+1)+'=', ''));
end;
end;
//Manipulando as variáveis de decisão Xij e Yik
procedure Definir_Tamanho_Xij_Yik; //Definir o tamanho das matrizes Xij e Yik
begin
SetLength(Xij, i+1, j); //Defini o tamanho da matriz
SetLength(Yik, i+1, k); //Defini o tamanho da matriz
end;
procedure Preenche_Valor_Xij_Yik; //Preenche as matrizes Xij e Yik
var a, b, c, d: Integer;
begin
slLista_I:=TStringLIst.Create;
//Trata a 2ª Restrição - Preenche toda matriz com valor 0
for a:=0 to i do //Em todos os outros "for" utilizamos i-1, nesse utilizamos somente
i porque temos q somar a plataforma fantasma
begin
for b:=0 to j-1 do
begin
Xij[a,b]:=0;
end;
end;
//Trata a 2ª Restrição - Para cada j somente uma das posições de i deve ter o
valor 1
for b:=0 to j-1 do
begin
Randomize;
c:=Random(i+1); //Pego aleatoriamente uma das posições de i para inserir o
número 1
Xij[c,b]:=1;
84
if not Existe_Na_Lista_I(IntToStr(c)) then // Verifica se a plataforma selecionada
já consta na lista
slLista_I.Add(IntToStr(c));
end;
//Trata a 4ª Restrição - Preenche toda matriz com valor 0
for a:=0 to i do //Em todos os outros "for" utilizamos i-1, nesse utilizamos somente
i porque temos q somar a plataforma fantasma
begin
for b:=0 to k-1 do
begin
Yik[a,b]:=0;
end;
end;
//Trata a 4ª Restrição - Pega somente as plataformas que são alocadas e coloca
uma capacidade aleatório
for d:=0 to slLista_I.Count-1 do
begin
Randomize;
Yik[StrToInt(slLista_I.Strings[d]), Random(k)]:=1;
end;
slLista_I.Free;
end;
function Existe_Na_Lista_I(sValor: String): Boolean;
var iPosicao: Integer;
begin
iPosicao:=slLista_I.IndexOf(sValor);
if (iPosicao=-1) then
Result:=False
else
Result:=True;
end;
85
//Manipulando Z1
procedure Definir_Tamanho_Cij_Fik; //Definir o tamanho das matrizes Cij e Fik
begin
SetLength(Cij, i+1, j); //Defini o tamanho da matriz
SetLength(Fik, i+1, k); //Defini o tamanho da matriz
end;
procedure Preenche_Valor_Cij_Fik; //Preenche as matrizes Cij e Fik
var a, b: Integer;
begin
for a:=0 to i do //Em todos os outros "for" utilizamos i-1, nesse utilizamos somente
i porque temos q somar a plataforma fantasma
begin
for b:=0 to j-1 do
begin
Cij[a,b]:=Obter_Valor_lbx(a, b, 'M', 'C', fPrincipal.lbxCusto_CIJ);
end;
end;
for a:=0 to i do //Em todos os outros "for" utilizamos i-1, nesse utilizamos somente
i porque temos q somar a plataforma fantasma
begin
for b:=0 to k-1 do
begin
Fik[a,b]:=Obter_Valor_lbx(a, b, 'M', 'F', fPrincipal.lbxCusto_FIK);
end;
end;
end;
function Calcular_Z1: Real; //Calcular o valor de Z1
var a, b: Integer;
rSoma_1, rSoma_2: Real;
begin
Definir_Tamanho_Cij_Fik;
86
Preenche_Valor_Cij_Fik;
rSoma_1:=0;
rSoma_2:=0;
for a:=0 to i do
begin
for b:=0 to j-1 do
begin
rSoma_1:=rSoma_1+Cij[a,b]*Xij[a,b];
end;
end;
for a:=0 to i do
begin
for b:=0 to k-1 do
begin
rSoma_2:=rSoma_2+Fik[a,b]*Yik[a,b];
end;
end;
Result:=rSoma_1+rSoma_2;
end;
//Manipulando Z2
procedure Definir_Tamanho_Aj; //Definir o tamanho do vetor Aj
begin
SetLength(Aj, j); //Defini o tamanho do vetor
end;
procedure Preenche_Valor_Aj; //Preenche o vetor Aj
var b: Integer;
begin
for b:=0 to j-1 do
begin
Aj[b]:=Obter_Valor_lbx(b, 0, 'V', 'A', fPrincipal.lbxProducao_AJ);
end;
87
end;
function Calcular_Z2: Real; //Calcular o valor de Z2
var a, b: Integer;
rSoma_1: Real;
begin
Definir_Tamanho_Aj;
Preenche_Valor_Aj;
rSoma_1:=0;
for b:=0 to j-1 do
begin
for a:=0 to i-1 do
begin
rSoma_1:=rSoma_1+Aj[b]*Xij[a,b];
end;
end;
Result:=rSoma_1*(-1);
end;
//Manipulando Z3
procedure Definir_Tamanho_DWj_DOi_DQij_DPik; //Definir o tamanho dos vetores
DWj e DOi e das matrizes DQij e DPik
begin
SetLength(Dwj, j); //Definir o tamanho do vetor
SetLength(DOi, i); //Definir o tamanho do vetor
SetLength(Dqij, i, j); //Definir o tamanho da matriz
SetLength(Dpik, i, k); //Definir o tamanho da matriz
end;
procedure Preenche_Valor_DWj_DOi_DQij_DPik; //Preenche os vetores DWj e
DOi e as matrizes DQij e DPik
var a, b: Integer;
begin
//Parte 1
88
for b:=0 to j-1 do
begin
DWj[b]:=Obter_Valor_lbx(b, 0, 'V', 'DW', fPrincipal.lbxDA_DWJ);
end;
//Parte 2
for a:=0 to i-1 do
begin
DOi[a]:=Obter_Valor_lbx(a, 0, 'V', 'DO', fPrincipal.lbxDA_DOI);
end;
//Parte 3
for a:=0 to i-1 do
begin
for b:=0 to j-1 do
begin
DQij[a,b]:=Obter_Valor_lbx(a, b, 'M', 'DQ', fPrincipal.lbxDA_DQIJ);
end;
end;
//Parte 4
for a:=0 to i-1 do
begin
for b:=0 to k-1 do
begin
DPik[a,b]:=Obter_Valor_lbx(a, b, 'M', 'DP', fPrincipal.lbxDA_DPIK);
end;
end;
end;
function Calcular_Z3: Real; //Calcular o valor de Z3
var a, b: Integer;
rSoma_1, rSoma_2, rSoma_3, rSoma_4: Real;
begin
Definir_Tamanho_DWj_DOi_DQij_DPik;
89
Preenche_Valor_DWj_DOi_DQij_DPik;
rSoma_1:=0;
rSoma_2:=0;
rSoma_3:=0;
rSoma_4:=0;
//Parte 1
for b:=0 to j-1 do
begin
for a:=0 to i-1 do
begin
rSoma_1:=rSoma_1+DWj[b]*Xij[a,b];
end;
end;
//Parte 2
for a:=0 to i-1 do
begin
for b:=0 to k-1 do
begin
rSoma_2:=rSoma_2+DOi[a]*Yik[a,b];
end;
end;
//Parte 3
for a:=0 to i-1 do
begin
for b:=0 to j-1 do
begin
rSoma_3:=rSoma_3+DQij[a,b]*Xij[a,b];
end;
end;
//Parte 4
for a:=0 to i-1 do
90
begin
for b:=0 to k-1 do
begin
rSoma_4:=rSoma_4+DPik[a,b]*Yik[a,b];
end;
end;
Result:=rSoma_1+rSoma_2+rSoma_3+rSoma_4;
end;
//Manipulando a 1ª Restrição
function Restricao_1(eCusto_Maximo: Real): Boolean;
begin
if eZ1<=eCusto_Maximo then
Result:=True
else
Result:=False;
end;
//Manipulando a 3ª Restrição
procedure Definir_Tamanho_Bk; //Definir o tamanho do vetor Bk
begin
SetLength(Bk, k); //Defini o tamanho do vetor
end;
procedure Preenche_Valor_Bk; //Preenche o vetor Bk
var b: Integer;
begin
for b:=0 to k-1 do
begin
Bk[b]:=Obter_Valor_lbx(b, 0, 'V', 'B', fPrincipal.lbxCap_BK);
end;
end;
function Restricao_3: Boolean;
var a, b, c: Integer; rSoma_Aj_Xij, rSoma_Bk_Yik: Real;
91
begin
Result:=True;
for a:=0 to i do
begin
rSoma_Aj_Xij:=0;
rSoma_Bk_Yik:=0;
for b:=0 to j-1 do
begin
rSoma_Aj_Xij:=rSoma_Aj_Xij+(Aj[b]*Xij[a,b]);
end;
for c:=0 to k-1 do
begin
rSoma_Bk_Yik:=rSoma_Bk_Yik+(Bk[c]*Yik[a,c]);
end;
if not (rSoma_Aj_Xij<=rSoma_Bk_Yik) then
Result:=False;
end;
end;
//Manipulando a 5ª, 6ª e 7ª Restrição
function Restricao_5_6_7(rZ1, rZ2, rZ3: Real):Boolean;
begin
if (rZ1=0) or (rZ2=0) or (rZ3=0) then
Result:=False
else
Result:=True;
end;
//Calcular Função Objetivo
procedure Calcular_Funcoes_Objetivo;
begin
Definir_Tamanho_Xij_Yik;
Preenche_Valor_Xij_Yik;
92
eZ1:=Calcular_Z1;
eZ2:=Calcular_Z2;
eZ3:=Calcular_Z3;
Definir_Tamanho_Bk;
Preenche_Valor_Bk;
end;
//Inicializa a Lista de Pareto
procedure Lista_Pareto_Inicializar(var L: Lista_Ordenada);
begin
L.Cabeca:=Nil;
L.Tamanho:=0;
end;
//Inseri na Lista de Pareto
procedure Lista_Pareto_Inserir(var L: Lista_Ordenada; Z1, Z2, Z3: Real);
var Novo, pAux: Ponteiro;
begin
New(Novo);
Novo^.Z1:=Z1;
Novo^.Z2:=Z2;
Novo^.Z3:=Z3;
Novo^.Prox:=Nil;
if Lista_Pareto_Vazia(L) then
begin
L.Cabeca:=Novo;
Inc(L.Tamanho);
Exit;
end;
pAux:=L.Cabeca;
if (Novo^.Z1 < pAux^.Z1) then
begin
Novo^.Prox:=pAux;
93
L.Cabeca:=Novo;
Inc(L.Tamanho);
Lista_Pareto_Atualizar(L, Novo^.Z1, Novo^.Z2, Novo^.Z3);
end else
while pAux <> Nil do
begin
if pAux^.Prox = Nil then
begin
if Lista_Pareto_Entrar_Z2(L, Novo^.Z2, Novo^.Z3) then //Verifica se este Z2 é
o menor de todos, se for entra
begin
pAux^.Prox:=Novo;
Inc(L.Tamanho);
if (Novo^.Z1 = pAux^.Z1) and (Novo^.Z2 = pAux^.Z2) and (Novo^.Z3 <=
pAux^.Z3) then //neste o ponto o Novo.Z1 é = ou < que o ultimo pAux.Z1
Lista_Pareto_Remover(L, pAux^.Z1, pAux^.Z2, pAux^.Z3); //se igual remove
o ultimo(pAux) elemento por ter um Z2 >
end else
if Lista_Pareto_Entrar_Z3(L, Novo^.Z3) then //Verifica se este Z3 é o menor de
todos, se for entra
begin
pAux^.Prox:=Novo;
Inc(L.Tamanho);
if (Novo^.Z1 = pAux^.Z1) and (Novo^.Z2 = pAux^.Z2) then //neste o ponto o
Novo.Z1 é = ou < que o ultimo pAux.Z1
Lista_Pareto_Remover(L, pAux^.Z1, pAux^.Z2, pAux^.Z3); //se igual remove
o ultimo(pAux) elemento por ter um Z2 >
end;
Break;
end else
if (Novo^.Z1 < pAux^.Prox^.Z1) then
94
begin
Novo^.Prox:=pAux^.Prox;
pAux^.Prox:=Novo;
Inc(L.Tamanho);
if Novo^.Z1 = pAux^.Z1 then
begin
if Novo^.Z2 >= pAux^.Z2 then
Lista_Pareto_Remover(L, Novo^.Z1, Novo^.Z2, Novo^.Z3)
else
begin
Lista_Pareto_Remover(L, pAux^.Z1, pAux^.Z2, pAux^.Z3);
Lista_Pareto_Atualizar(L, Novo^.Z1, Novo^.Z2, Novo^.Z3);
end;
end else
Lista_Pareto_Atualizar(L, Novo^.Z1, Novo^.Z2, Novo^.Z3);
Break;
end;
pAux:=pAux^.Prox;
end;
end;
function Lista_Pareto_Vazia(L: Lista_Ordenada): Boolean;
begin
Lista_Pareto_Vazia:=L.Tamanho=0;
end;
//Atualiza a Lista de Pareto
procedure Lista_Pareto_Atualizar(var L: Lista_Ordenada; Z1, Z2, Z3: Real);
var pAux: Ponteiro;
begin
pAux:=L.Cabeca;
while pAux <> Nil do
begin
95
if (pAux^.Z1 > Z1) and (pAux^.Z2 >= Z2) and (pAux^.Z3 >= Z3) then
Lista_Pareto_Remover(L, pAux^.Z1, pAux^.Z2, pAux^.Z3);
pAux:=pAux^.Prox;
end;
pAux:=L.Cabeca;
while pAux <> Nil do
begin
if (pAux^.Z1 < Z1) and (pAux^.Z2 <= Z2) and (pAux^.Z3 <= Z3) then
begin
Lista_Pareto_Remover(L, Z1, Z2, Z3);
Break;
end;
pAux:=pAux^.Prox;
end;
end;
//Se uma solução for dominada, é retirada da Lista de Pareto
procedure Lista_Pareto_Remover(var L: Lista_Ordenada; Z1, Z2, Z3: Real);
var pAux, pAux2: Ponteiro;
begin
if Lista_Pareto_Vazia(L) then
Exit;
pAux:=L.Cabeca;
if (pAux^.Z1 = Z1) and (pAux^.Z2 = Z2) and (pAux^.Z3 = Z3) then
begin
L.Cabeca:=pAux^.Prox;
Dispose(pAux);
Dec(L.Tamanho);
end else
while pAux <> Nil do
begin
if (pAux^.Prox^.Z1 = Z1) and (pAux^.Prox^.Z2 = Z2) and (pAux^.Prox^.Z3 = Z3)
96
then
begin
pAux2:=pAux^.Prox;
pAux^.Prox:=pAux2^.Prox;
Dispose(pAux2);
Dec(L.Tamanho);
Break;
end;
pAux:=pAux^.Prox;
end;
end;
//Verifica se Z2 deve entrar
function Lista_Pareto_Entrar_Z2(L: Lista_Ordenada; Z2, Z3: Real): Boolean;
var pAux: Ponteiro;
begin
Lista_Pareto_Entrar_Z2:=True;
pAux:=L.Cabeca;
while pAux <> Nil do
begin
if (pAux^.Z2 <= Z2) and (pAux^.Z3 <= Z3)then
begin
Lista_Pareto_Entrar_Z2:=False;
Break;
end;
pAux:=pAux^.Prox;
end;
end;
//Verifica se Z3 deve entrar
function Lista_Pareto_Entrar_Z3(L: Lista_Ordenada; Z3: Real): Boolean;
var pAux: Ponteiro;
begin
97
Lista_Pareto_Entrar_Z3:=True;
pAux:=L.Cabeca;
while pAux <> Nil do
begin
if (pAux^.Z3 <= Z3) then
begin
Lista_Pareto_Entrar_Z3:=False;
Break;
end;
pAux:=pAux^.Prox;
end;
end;
//Mostra no Listbox a Lista de Pareto
procedure Lista_Pareto_Mostrar(L: Lista_Ordenada);
var pAux: Ponteiro; sGrafo, sIndice: String;
begin
if Lista_Pareto_Vazia(L) then
Exit;
slLista_Pareto.Clear;
fPrincipal.lbxLista_Pareto.Clear;
slLista_Media_Ponderada.Clear;
fPrincipal.lbxLista_Media_Ponderada.Clear;
pAux:=L.Cabeca;
while pAux<>Nil do
begin
sGrafo:=FloatToStr(pAux^.Z1)+'; '+FloatToStr(pAux^.Z2)+';
'+FloatToStr(pAux^.Z3);
sIndice:=IntToStr(Retorna_Indice(slLista_Solucoes_Viaveis, sGrafo)+1);
slLista_Pareto.Add(sGrafo);
fPrincipal.lbxLista_Pareto.Items.Add(sIndice+'º Grafo: ('+sGrafo+')');
slLista_Media_Ponderada.Add(Calcular_Media_Ponderada(sGrafo));
98
fPrincipal.lbxLista_Media_Ponderada.Items.Add(sIndice+'º Grafo:
('+Calcular_Media_Ponderada(sGrafo)+')');
pAux:=pAux^.Prox;
end;
end;
function Calcular_Media_Ponderada(sItem_Lista: String): String;
var sZ1, sZ2, sZ3: String;
slItem_Lista: TStringList;
rTotal, rCalculo_Z1, rCalculo_Z2, rCalculo_Z3: Real;
begin
slItem_Lista:=TStringList.Create;
ExtractStrings([';'],[' '],pchar(sItem_Lista), slItem_Lista);
rCalculo_Z1:=StrToFloat(slItem_Lista.Strings[0])*StrToInt(fPrincipal.edPeso_Z1.Te
xt);
rCalculo_Z2:=StrToFloat(slItem_Lista.Strings[1])*StrToInt(fPrincipal.edPeso_Z2.Te
xt);
rCalculo_Z3:=StrToFloat(slItem_Lista.Strings[2])*StrToInt(fPrincipal.edPeso_Z3.Te
xt);
rTotal:=(rCalculo_Z1+rCalculo_Z2+rCalculo_Z3)/10;
slItem_Lista.Free;
Result:=FloatToStr(rTotal);
end;
function Retorna_Indice(slLista: TStringList; sValor: String): Integer;
var x: Integer;
begin
x:=slLista.IndexOf(sValor);
Result:=x;
end;
function Obter_Valores_Xij: String;
var a, b: integer;
slLista_Xij: TStringList;
99
begin
slLista_Xij:=TStringList.Create;
for a:=0 to i do
begin
for b:=0 to j-1 do
begin
slLista_Xij.Add('X'+IntToStr(a+1)+'x'+IntToStr(b+1)+'='+IntToStr(Xij[a,b]));
end;
end;
Result:=slLista_Xij.Text;
slLista_Xij.Free;
end;
function Obter_Valores_Yik: String;
var a, b: integer;
slLista_Yik: TStringList;
begin
slLista_Yik:=TStringList.Create;
for a:=0 to i do
begin
for b:=0 to k-1 do
begin
slLista_Yik.Add('Y'+IntToStr(a+1)+'x'+IntToStr(b+1)+'='+IntToStr(Yik[a,b]));
end;
end;
Result:=slLista_Yik.Text;
slLista_Yik.Free;
end;
procedure Limpar_Formulario;
begin
fPrincipal.lbxLista_Solucoes_Inviaveis.Clear;
fPrincipal.lbxLista_Solucoes_Viaveis.Clear;
100
fPrincipal.lbxLista_Pareto.Clear;
fPrincipal.lbxLista_Media_Ponderada.Clear;
fPrincipal.lbMelhor_Solucao_Resposta.Caption:='';
fPrincipal.lbxXij_Variavel_Decisao.Clear;
fPrincipal.lbxYik_Variavel_Decisao.Clear;
end;
procedure Executar_Heuristica;
var iNumero_Iteracoes, iIndice, a, b, c, d: Integer;
rPeso, rCusto_Maximo: Real;
bPrimeiro: Boolean;
begin
liTempo_1:=GetTickCount;
slLista_Solucoes_Viaveis:=TStringList.Create;
slLista_Pareto:=TStringList.Create;
slLista_Media_Ponderada:=TStringList.Create;
Campo_Obrigatorio(fPrincipal.edNumero_Iteracoes);
iNumero_Iteracoes:=StrToInt(fPrincipal.edNumero_Iteracoes.Text)-1;
SetLength(Lista_Xij, iNumero_Iteracoes); //Defini o tamanho do vetor
SetLength(Lista_Yik, iNumero_Iteracoes); //Defini o tamanho do vetor
b:=1;
c:=1;
bPrimeiro:=True;
//Verifica se o somatório dos pesos é igual a 10
Campo_Obrigatorio(fPrincipal.edPeso_Z1);
Campo_Obrigatorio(fPrincipal.edPeso_Z2);
Campo_Obrigatorio(fPrincipal.edPeso_Z3);
rPeso:=StrToFloat(fPrincipal.edPeso_Z1.Text)+StrToFloat(fPrincipal.edPeso_Z2.T
ext)+StrToFloat(fPrincipal.edPeso_Z3.Text);
if rPeso<>10 then
begin
Application.MessageBox(PCHAR('O somatório dos Pesos de Z1, Z2 e Z3 deve
101
ser igual a 10!'), 'Informação.', MB_OK+ MB_ICONINFORMATION);
Abort;
end;
Campo_Obrigatorio(fPrincipal.edCusto_Maximo);
rCusto_Maximo:=StrToFloat(fPrincipal.edCusto_Maximo.Text);
Limpar_Formulario;
Lista_Pareto_Inicializar(Pareto);
Limpar_Tabela;
for a:=0 to iNumero_Iteracoes do
begin
Calcular_Funcoes_Objetivo;
if (Restricao_1(rCusto_Maximo)) and (Restricao_3) and (Restricao_5_6_7(eZ1,
eZ2, eZ3)) then
begin
Inserir_Registro(IntToStr(b));
slLista_Solucoes_Viaveis.Add(FloatToStr(eZ1)+'; '+FloatToStr(eZ2)+';
'+FloatToStr(eZ3));
fPrincipal.lbxLista_Solucoes_Viaveis.Items.Add(IntToStr(b)+'º Grafo:
('+FloatToStr(eZ1)+'; '+FloatToStr(eZ2)+'; '+FloatToStr(eZ3)+')');
Inc(b);
Lista_Pareto_Inserir(Pareto, eZ1, eZ2, eZ3);
Lista_Pareto_Mostrar(Pareto);
end else
begin
fPrincipal.lbxLista_Solucoes_Inviaveis.Items.Add(IntToStr(c)+'º Grafo:
('+FloatToStr(eZ1)+'; '+FloatToStr(eZ2)+'; '+FloatToStr(eZ3)+')');
Inc(c);
end;
end;
if fPrincipal.lbxLista_Solucoes_Viaveis.Items.Text<>'' then
begin
102
//Verifica na slLista_Media_Ponderada qual é o menor valor
for d:=0 to slLista_Media_Ponderada.Count-1 do
begin
if slLista_Media_Ponderada.Strings[d]<>'' then
begin
if bPrimeiro then
begin
rMenor_Solucao:=StrToFloat(slLista_Media_Ponderada.Strings[d]);
bPrimeiro:=False;
end else
begin
if StrToFloat(slLista_Media_Ponderada.Strings[d])<rMenor_Solucao then
rMenor_Solucao:=StrToFloat(slLista_Media_Ponderada.Strings[d]);
end;
end;
end;
iIndice:=Retorna_Indice(slLista_Solucoes_Viaveis,
slLista_Pareto.Strings[Retorna_Indice(slLista_Media_Ponderada,
FloatToStr(rMenor_Solucao))])+1;
fPrincipal.lbMelhor_Solucao_Resposta.Caption:=IntToStr(iIndice)+'º Grafo:
('+FloatToStr(rMenor_Solucao)+')';
Exibir_Registro(IntToStr(iIndice));
fPrincipal.pc.TabIndex:=5;
Tamanho_Lista_Pareto:=fPrincipal.lbxLista_Pareto.Count;
liTempo_2:=GetTickCount;
liDiferenca:=liTempo_2-liTempo_1;
dDiferenca_Minutos:=(liDiferenca/1000)/60;
fPrincipal.lbTempo_Gerar_Heuristica.Caption:='Tempo gasto na execução:
'+FormatFloat('0.0000', dDiferenca_Minutos)+' minuto(s).';
Application.MessageBox(PCHAR('Resultado gerado com sucesso!'),
'Informação.', MB_OK+ MB_ICONINFORMATION);
103
end else
begin
fPrincipal.lbTempo_Gerar_Matriz_Vetor.Caption:='';
fPrincipal.lbTempo_Gerar_Heuristica.Caption:='';
Limpar_Formulario;
fPrincipal.pc.TabIndex:=0;
Application.MessageBox(PCHAR('O sistema não gerou nenhuma Solução
Viável!'+#13+'Refaça o procedimento!'), 'Informação.', MB_OK+
MB_ICONINFORMATION);
end;
slLista_Solucoes_Viaveis.Free;
slLista_Pareto.Free;
slLista_Media_Ponderada.Free;
fPrincipal.Gerar_Heuristica.Enabled:=False;
end;
//Manipulando o banco de dados
procedure Inserir_Registro(sIndice: String);
begin
with fDm.qrAcao do
begin
Close;
SQL.Clear;
SQL.Add('insert into auxiliar (indice, xij, yik) ');
SQL.Add('values (:indice, :xij, :yik)');
Parameters.ParamValues['indice']:=sIndice;
Parameters.ParamValues['xij']:=Obter_Valores_Xij;
Parameters.ParamValues['yik']:=Obter_Valores_Yik;
ExecSQL;
end;
end;
procedure Limpar_Tabela;
104
begin
with fDm.QrAcao do
begin
Close;
SQL.Clear;
SQL.Add('delete from auxiliar');
ExecSQL;
end;
end;
procedure Exibir_Registro(sIndice: String);
begin
with fDm.qrAcao do
begin
Close;
SQL.Clear;
SQL.Add('select * from auxiliar');
SQL.Add('where indice=:indice');
Parameters.ParamByName('indice').Value:=sIndice;
Open;
end;
fPrincipal.lbxXij_Variavel_Decisao.Items.Text:=fDm.qrAcao.FieldByName('xij').AsS
tring;
fPrincipal.lbxYik_Variavel_Decisao.Items.Text:=fDm.qrAcao.FieldByName('yik').As
String;
end;
end.
Recommended