uma heurÍstica para o problema de localizaÇÃo ... · uma heurÍstica para o problema de...

116
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

Upload: dothuy

Post on 24-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

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

35

implementada, tanto na sua versão básica, quanto em suas versões adaptadas e

híbridas.

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.