scheduling do transporte de petróleo das plataformas...
TRANSCRIPT
-
Dissertação de Mestrado
Scheduling do transporte de petróleo dasplataformas marítimas e de atendimento
a centros consumidores
Adrian Esteban [email protected]
Orientadores:João Inacio Soletti. DSc
Sandra Helena Vieira de Carvalho. DSc
Maceió, outubro de 2008
-
Livros Grátis
http://www.livrosgratis.com.br
Milhares de livros grátis para download.
-
Adrian Esteban Muract
Scheduling do transporte de petróleo dasplataformas marítimas e de atendimento
a centros consumidores
Dissertação apresentada como requisito par-cial para obtenção do grau de Mestre peloCurso de Mestrado em Modelagem Computa-cional de Conhecimento do Instituto de Com-putação da Universidade Federal de Alagoas.
Orientadores:
João Inacio Soletti. DSc
Sandra Helena Vieira de Carvalho. DSc
Maceió, outubro de 2008
-
Dissertação apresentada como requisito parcial para obtenção do grau deMestre pelo Curso de Mestrado em Modelagem Computacional de Conhe-cimento do Instituto de Computação da Universidade Federal de Alagoas,aprovada pela comissão examinadora que abaixo assina.
Maceió, outubro de 2008
-
Resumo
Hoje em dia, as empresas petroleiras enfrentam o desafio de conhecer qual éa melhor forma de movimentar uma frota de navios cargueiros sem que issosignifique um aumento de custo, entre outras. Neste trabalho será apresen-tada uma solução para este, mediante o desenvolvimento de um sistema quepermita calcular as rotas para transporte de petróleo bruto de plataformasmarítimas a refinarias, bem como transporte dos derivados do petróleo de re-finarias a centros consumidores. Para a solução do sistema, foi realizado umscheduling no qual determina-se a rota que cada navio deve realizar para queo petróleo sea entregue, buscando a rota que conduza ao melhor caminho,sendo considerado o tempo de deslocamento, carga e descarga do produto,além do limite de armazenamento de produto em cada plataforma, entre ou-tros parâmetros.
i
-
Resumen
Hoy en día, las empresas petroleras enfrentan el desafío de conocer cual es lamejor manera de mover una flota de navíos cargueros sin que ello signifiqueuna pérdida de dinero, entre otras cosas. En este trabajo se pretende darsolución a este problema, mediante el desarrollo de un sistema que permitecalcular las rutas que debe seguir un navío para transportar el petróleo brutodesde las plataformas marítimas a las refinerías, así como el transporte dederivados de petróleo desde las refinerías a los centros consumidores. Parala solución del sistema se realizó un scheduling en el cual se determina laruta que cada navío debe hacer para cumplir con la entrega de petróleo; y, elruteamiento realizado para determinar el mejor camino a seguir, teniendo encuenta el tiempo de desplazamiento, la carga y descarga del producto, ademásdel límite de almacenamiento en cada plataforma, entre otros parámetros.
ii
-
Abstract
Now a day, petroleum companies are looking for a way to calculate the besteconomic and time consuming alternative to move a group of ships betweenplatforms, refineries and consuming centers. In the following research is intro-duced a solution to this problem through a system which optimize the mainvariables involved. Variables such as scheduling and road have been takeninto account. The variable scheduling defines the road that each ship mustfollow. Meanwhile, the optimization of the route is based on traveling timebetween each points, uploaded and downloaded time, storing capacity at eachpoint, etc. The following system has been tested in two real cases showing agood performance.
iii
-
Agradecimentos
A meus orientadores, Professor João Inácio Soletti e Professora Sandra HelenaVieira de Carvalho, pelos quais passei a ter uma grande admiração. Agradeçopela paciência, dedicação e profissionalismo.Ao grupo de pesquisa do LASSOP (Laboratório de Sistema de Separação eOtimização de Processos) pela ajuda na concretização deste trabalho.À CAPES (Coordenação de Aperfeiçoamento de Pessoal de Nível Superior) peloapoio financeiro.À Universidade Federal de Alagoas, ao Curso de Mestrado em ModelagemComputacional de Conhecimento, e ao Professor Alejandro C. Frery, pela opor-tunidade de realizar o curso.À minha querida esposa, Alejandra, pelo apoio, incentivo e cooperação.A meus pais, Beatriz e Norberto, e a meus sogros, Estela e Daniel, merece-dores de meu mais profundo agradecimento pelo apoio e incentivo.Às Professoras Elsa Moschetti e Susana Ferrero, pela paciência, dedicação eprofissionalismo na minha iniciação científica.A todas as demais pessoas, que não estão aqui mencionadas, mas que dealguma maneira auxiliaram na concretização deste trabalho.
iv
-
SUMÁRIO v
Sumário
I Introdução 1
1 Estado da arte 4
II Scheduling de escoamento de petróleo bruto de platafor-mas marítimas 7
2 Problema a resolver 92.1 Fundamentos de seleção do método utilizado . . . . . . . . . . . 112.2 Fundamentos de seleção de ferramenta utilizada . . . . . . . . . 11
3 Conceitos prévios 123.1 Conceito de rota . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 Cálculo de todas as rotas possíveis . . . . . . . . . . . . . . . . . 133.3 Seqüências em uma rota . . . . . . . . . . . . . . . . . . . . . . . 173.4 Calcular todas as possíveis seqüências da rota . . . . . . . . . . 203.5 Conceito de caminho . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Classes 24
5 Diagrama de Classes 41
6 Funções para a solução do problema 436.1 Função obtener_secuencia . . . . . . . . . . . . . . . . . . . . 436.2 Função ImprimirResultado . . . . . . . . . . . . . . . . . . . . 476.3 Função cargar_linha_matriz . . . . . . . . . . . . . . . . . . . 496.4 Função esPlataforma . . . . . . . . . . . . . . . . . . . . . . . . 506.5 Função esRefineria . . . . . . . . . . . . . . . . . . . . . . . . . 516.6 Função conflicto_navios . . . . . . . . . . . . . . . . . . . . . 526.7 Função plataforma_parada . . . . . . . . . . . . . . . . . . . . 536.8 Função atracarEnRefineria . . . . . . . . . . . . . . . . . . . 556.9 Função escojer_combinacion . . . . . . . . . . . . . . . . . . . 56
7 Estudos de casos 607.1 Dados de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.1.1 Estado inicial das plataformas . . . . . . . . . . . . . . . . 607.1.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . 617.1.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617.1.4 Navios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637.1.5 Caminhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
-
SUMÁRIO vi
7.1.6 Distâncias entre as refinarias e plataformas . . . . . . . . 657.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2.1 Caminhos resultantes . . . . . . . . . . . . . . . . . . . . . 66
8 Conclusão 70
III Scheduling de atendimento a centros consumidores 71
9 Problema a resolver 74
10 Conceitos prévios 75
11 Classes 76
12 Diagrama de classes 83
13 Funções para a solução do problema 8513.1 Função obtener_secuencia . . . . . . . . . . . . . . . . . . . . 8513.2 Função ImprimirResultado . . . . . . . . . . . . . . . . . . . . 8613.3 Função cargar_linha_matriz . . . . . . . . . . . . . . . . . . . 8613.4 Função esCConsumidor . . . . . . . . . . . . . . . . . . . . . . . 8713.5 Função esRefineria . . . . . . . . . . . . . . . . . . . . . . . . . 8713.6 Função conflicto_navios . . . . . . . . . . . . . . . . . . . . . 8813.7 Função cconsumidore_parado . . . . . . . . . . . . . . . . . . . 8813.8 Função atracarEnRefineria . . . . . . . . . . . . . . . . . . . 9013.9 Função escojer_combinacion . . . . . . . . . . . . . . . . . . . 90
14 Estudo de casos 9214.1 Dados de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
14.1.1 Estado inicial dos Centros Consumidores . . . . . . . . . 9214.1.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . 9414.1.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9414.1.4 Navios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9614.1.5 Caminhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9814.1.6 Distâncias entre as refinarias e centros consumidores . . 98
14.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9914.2.1 Caminhos resultantes . . . . . . . . . . . . . . . . . . . . . 99
15 Conclusão 103
IV Conclusão geral do trabalho 104
V Apêndice 106
A Relatório de scheduling do escoamento de petróleo bruto de platafor-mas marítimas 107A.1 Estado inicial das plataformas . . . . . . . . . . . . . . . . . . . 107
-
LISTA DE FIGURAS vii
A.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . . . . . 108A.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108A.4 Estado inicial dos navios . . . . . . . . . . . . . . . . . . . . . . . 112A.5 Estado inicial dos caminhos . . . . . . . . . . . . . . . . . . . . . 114A.6 Distâncias entre as refinarias e plataformas . . . . . . . . . . . 118A.7 Scheduling resultante . . . . . . . . . . . . . . . . . . . . . . . . . 118A.8 Caminhos resultantes . . . . . . . . . . . . . . . . . . . . . . . . 126A.9 Estado final das plataformas . . . . . . . . . . . . . . . . . . . . 131A.10 Estado final das refinarias . . . . . . . . . . . . . . . . . . . . . . 134A.11 Estado final dos navios . . . . . . . . . . . . . . . . . . . . . . . . 135
B Relatório de scheduling do atendimento a centros consumidores 137B.1 Estado inicial dos centros consumidores . . . . . . . . . . . . . 137B.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . . . . . 138B.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139B.4 Estado inicial dos navios . . . . . . . . . . . . . . . . . . . . . . . 143B.5 Estado inicial dos caminhos . . . . . . . . . . . . . . . . . . . . . 144B.6 Distâncias entre as refinarias e centros consumidores . . . . . 148B.7 Scheduling resultante . . . . . . . . . . . . . . . . . . . . . . . . . 149B.8 Caminhos resultantes . . . . . . . . . . . . . . . . . . . . . . . . 156B.9 Estado final dos centros consumidores . . . . . . . . . . . . . . 160B.10 Estado final das refinarias . . . . . . . . . . . . . . . . . . . . . . 164B.11 Estado final dos navios . . . . . . . . . . . . . . . . . . . . . . . . 165B.12 Gráficos dos tempos de atracação nos piers . . . . . . . . . . . . 167
Lista de Figuras
2.1 Scheduling dos navios . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1 Classe Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2 Classe Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3 Classe Compartimento . . . . . . . . . . . . . . . . . . . . . . . . 274.4 Classe Navio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.5 Classe Frota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.6 Classe Piers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.7 Classe Porto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.8 Classe Refinaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334.9 Classe Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.10 Classe Rota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.11 Classe Caminho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.1 Diagrama de Classes do Sistema . . . . . . . . . . . . . . . . . . . 42
-
LISTA DE TABELAS viii
7.1 Diagrama do scheduling de escoamento de petróleo bruto de platafor-mas marítimas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
11.1 Classe Refinaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7711.2 Classe CConsumidor . . . . . . . . . . . . . . . . . . . . . . . . . 7811.3 Classe Rota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8011.4 Classe Caminho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.1 Diagrama de Classes do Sistema . . . . . . . . . . . . . . . . . . . 84
14.1 Diagrama do scheduling do atendimento a centros consumidores . 100
A.1 Diagrama do scheduling do escoamento de petróleo bruto de platafor-mas marítimas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
A.2 Quantidade de petróleo por tempo na plataforma 1 . . . . . . . . . 132A.3 Quantidade de petróleo por tempo na plataforma 2 . . . . . . . . . 133A.4 Quantidade de petróleo por tempo na plataforma 3 . . . . . . . . . 133A.5 Quantidade de petróleo por tempo na plataforma 4 . . . . . . . . . 134
B.1 Diagrama do scheduling do atendimento a centro consumidor . . . 161B.2 Volume de produto estocado no centro consumidor 10 . . . . . . . 162B.3 Volume de produto estocado no centro consumidor 20 . . . . . . . 162B.4 Volume de produto estocado no centro consumidor 30 . . . . . . . 163B.5 Volume de produto estocado no centro consumidor 40 . . . . . . . 164B.6 Gráficos dos tempos que os navios podem atracar no pier 11 . . . . 167B.7 Gráficos dos tempos que os navios podem atracar no pier 12 . . . . 168B.8 Gráficos dos tempos que os navios podem atracar no pier 13 . . . . 168B.9 Gráficos dos tempos que os navios podem atracar no pier 14 . . . . 169B.10 Gráficos dos tempos que os navios podem atracar no pier 1 . . . . 170B.11 Gráficos dos tempos que os navios podem atracar no pier 2 . . . . 170B.12 Gráficos dos tempos que os navios podem atracar no pier 3 . . . . 171B.13 Gráficos dos tempos que os navios podem atracar no pier 4 . . . . 171B.14 Gráficos dos tempos que os navios podem atracar no pier 5 . . . . 172B.15 Gráficos dos tempos que os navios podem atracar no pier 6 . . . . 172B.16 Gráficos dos tempos que os navios podem atracar no pier 7 . . . . 173B.17 Gráficos dos tempos que os navios podem atracar no pier 8 . . . . 173
Lista de Tabelas
2.1 Combinações das possíveis rotas, considerando três plataformas . 10
3.1 Matriz de todas as rotas . . . . . . . . . . . . . . . . . . . . . . . 123.2 Caso base de 1 refinaria e 2 plataformas . . . . . . . . . . . . . . . 133.3 Caso base de 2 refinarias e 2 plataformas . . . . . . . . . . . . . . 143.4 Caso base de 3 refinarias e 2 plataformas . . . . . . . . . . . . . . 15
-
LISTA DE TABELAS ix
3.5 Combinações possíveis de três plataformas . . . . . . . . . . . . . 163.6 Aplicação do conceito de elementos e div . . . . . . . . . . . . . . . 173.7 Segunda possível solução . . . . . . . . . . . . . . . . . . . . . . . 193.8 Soluções combinadas . . . . . . . . . . . . . . . . . . . . . . . . . 193.9 Terceira solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.10 Permutações sem repetição de 4 plataformas . . . . . . . . . . . . 21
6.1 Matriz de adjacência (G) . . . . . . . . . . . . . . . . . . . . . . . 456.2 Possíveis seqüências da rota 1 . . . . . . . . . . . . . . . . . . . . 456.3 Possíveis seqüências da rota 2 . . . . . . . . . . . . . . . . . . . . 466.4 Ordem do conjunto de caminhos . . . . . . . . . . . . . . . . . . . 586.5 Nível de rota 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.6 Nível de rota 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.7 Nível de rota 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.1 Quantidades carregadas nas plataformas na rota 1 . . . . . . . . . 627.2 Quantidades carregadas nas plataformas na rota 2 . . . . . . . . . 627.3 Quantidades carregadas nas plataformas na rota 3 . . . . . . . . . 627.4 Quantidades carregadas nas plataformas na rota 4 . . . . . . . . . 637.5 Quantidades carregadas nas plataformas na rota 5 . . . . . . . . . 637.6 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 637.7 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 637.8 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 647.9 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 647.10 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 647.11 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 657.12 Matriz de adjacência (G) . . . . . . . . . . . . . . . . . . . . . . . 667.13 Seqüência de plataformas e refinarias que segue o navio 1 do cami-
nho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667.14 Seqüência de plataformas e refinarias que segue o navio 2 do cami-
nho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677.15 Seqüência de plataformas e refinarias que segue o navio 3 do cami-
nho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
14.1 Descargas nos centros consumidores na rota 1 . . . . . . . . . . . 9414.2 Descargas nos centros consumidores na rota 2 . . . . . . . . . . . 9514.3 Descargas nos centros consumidores na rota 3 . . . . . . . . . . . 9514.4 Descargas nos centros consumidores na rota 4 . . . . . . . . . . . 9514.5 Descargas nos centros consumidores na rota 5 . . . . . . . . . . . 9614.6 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 9614.7 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 9614.8 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 9714.9 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 9714.10 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 9714.11 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 9714.12 Matriz de adjacência (G) . . . . . . . . . . . . . . . . . . . . . . . 9814.13 Seqüência de centros consumidores e refinarias que segue o navio 1
do caminho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
-
LISTA DE TABELAS x
14.14 Seqüência de centros consumidores e refinarias que segue o navio 2do caminho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
14.15 Seqüência de centros consumidores e refinarias que segue o navio 3do caminho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
A.1 Combinações possíveis da rota 1 . . . . . . . . . . . . . . . . . . 109A.2 Quantidades carregadas nas plataformas na rota 1 . . . . . . . . 109A.3 Combinações possíveis da rota 2 . . . . . . . . . . . . . . . . . . 110A.4 Quantidades carregadas nas plataformas na rota 2 . . . . . . . . 110A.5 Combinações possíveis da rota 3 . . . . . . . . . . . . . . . . . . 110A.6 Quantidades carregadas nas plataformas na rota 3 . . . . . . . . 111A.7 Combinações possíveis da rota 4 . . . . . . . . . . . . . . . . . . 111A.8 Quantidades carregadas nas plataformas na rota 4 . . . . . . . . 111A.9 Combinações possíveis da rota 5 . . . . . . . . . . . . . . . . . . 111A.10 Quantidades carregadas nas plataformas na rota 1 . . . . . . . . 112A.11 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 112A.12 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 112A.13 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 113A.14 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 113A.15 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 113A.16 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 113A.17 Possíveis seqüências das rotas que compõem o caminho 1 . . . . . 114A.18 Seqüência de plataformas e refinarias que segue o navio 1 do cami-
nho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114A.19 Possíveis seqüências das rotas que compõem o caminho 2 . . . . . 115A.20 Seqüência de plataformas e refinarias que segue o navio 2 do cami-
nho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115A.21 Possíveis seqüências das rotas que compõem o caminho 3 . . . . . 116A.22 Seqüência de plataformas e refinarias que segue o navio3 do caminho
3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117A.23 Matriz de adjacência . . . . . . . . . . . . . . . . . . . . . . . . . 118A.25 Possíveis seqüências das rotas que compõem o caminho 1 . . . . . 128A.26 Seqüência de plataformas e refinarias que segue o navio 1 do cami-
nho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128A.27 Possíveis seqüências das rotas que compõem o caminho 2 . . . . . 129A.28 Seqüência de plataformas e refinarias que segue o navio 2 do cami-
nho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129A.29 Possíveis seqüências das rotas que compõem o caminho 3 . . . . . 130A.30 Seqüência de plataformas e refinarias que segue o navio 3 do cami-
nho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131A.31 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 135A.32 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 135A.33 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 136A.34 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 136A.35 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 136A.36 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 136
B.1 Combinações possíveis da rota 1 . . . . . . . . . . . . . . . . . . 139
-
LISTA DE TABELAS xi
B.2 Descargas nos centros consumidores da rota 1 . . . . . . . . . . . 140B.3 Combinações possíveis da rota 2 . . . . . . . . . . . . . . . . . . 140B.4 Descargas nos centros consumidores da rota 2 . . . . . . . . . . . 141B.5 Possíveis combinações da rota 3 . . . . . . . . . . . . . . . . . . . 141B.6 Descargas nos centros consumidores na rota 3 . . . . . . . . . . . 141B.7 Possíveis combinações da rota 4 . . . . . . . . . . . . . . . . . . . 142B.8 Descargas nos centros consumidores da rota 4 . . . . . . . . . . . 142B.9 Possíveis combinações da rota 5 . . . . . . . . . . . . . . . . . . . 142B.10 Descargas nos centros consumidores da rota 5 . . . . . . . . . . . 142B.11 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 143B.12 tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 143B.13 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 143B.14 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 144B.15 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 144B.16 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 144B.17 Possíveis seqüências de rotas que segue o navio 1 . . . . . . . . . 145B.18 Seqüência de centros consumidores e refinarias que segue o navio 1
do caminho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145B.19 Possíveis seqüências de rotas que segue o navio 2 . . . . . . . . . 146B.20 Seqüência de centros consumidores e refinarias que segue o navio 2
do caminho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146B.21 Possíveis seqüências de rotas que segue o navio 3 . . . . . . . . . 147B.22 Seqüência de centros consumidores e refinarias que segue o navio 3
do caminho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148B.23 Matriz de adjacência . . . . . . . . . . . . . . . . . . . . . . . . . 148B.25 Possíveis seqüências de rotas que segue o navio 1 . . . . . . . . . 156B.26 Seqüência de centros consumidores e refinarias que segue o navio 1
do caminho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156B.27 Possíveis seqüências de rotas que segue o navio 2 . . . . . . . . . 157B.28 Seqüência de centros consumidores e refinarias que segue o navio 2
do caminho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157B.29 Possíveis seqüências de rotas que segue o navio 3 . . . . . . . . . 158B.30 Sequencia de centros consumidores e refinarias que segue o navio 3
do caminho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159B.31 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 165B.32 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 165B.33 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 166B.34 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 166B.35 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 166B.36 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 166
-
Parte I
Introdução
1
-
2
Hoje em dia a maioria das indústrias petroleiras encontra-se com um dilema
de difícil resolução, este é, qual é a melhor forma de movimentar os navios das
refinarias às plataformas petroleiras existentes no mar e, das refinarias aos
centros consumidores, sem que signifique grande perda de dinheiro e tempo,
além de cumprir com as demandas dos centros consumidores e outras restri-
ções que serão vistas neste trabalho.
Mediante o estudo do problema, analisando as restrições que estabelece
o sistema e, aplicando algum método dos conhecidos para os problemas de
otimização combinatória, pretende-se fazer o scheduling das seqüências de
plataformas, refinarias e centros consumidores que cada navio no sistema
deverá fazer.
Neste problema tem-se muita informação a ser considerada, como por ex-
emplo: o tempo de transporte de produto de uma refinaria até uma plataforma
ou um centro consumidor; o tempo máximo de estocagem de petróleo em cada
plataforma, uma vez caso atinja o limite de armazenagem do produto, haverá
parada de exploração e, consequentemente prejuízo; a questão de que dois
navios não podem estar na mesma plataforma ao mesmo tempo; necesidade
de atendimento das demandas dos centros consumidores, uma vez que deve
haver uma reserva do produto proveniente de refinaria; deve-se ter em conta
que em cada compartimento de um navio não pode haver mistura de dife-
rentes tipos de produtos; um navio só pode atracar em um porto se houver
condições de atracação para este tipo de navio (profundidade e comprimento
do pier); etc.
Por tanto, é importante realizar um scheduling capaz de satisfazer todas es-
sas necessidades, para obter um melhor desempenho no transporte de graneis
líquidos: petróleo bruto no caso das plataformas-refinarias; e, derivados do
petróleo no caso das refinarias-centro consumidores.
O problema geral, considerando o scheduling de escoamento de petróleo
bruto das plataformas marítimas e o scheduling de atendimento aos centros
consumidores, resulta num problema muito grande. Da parte computacional,
é praticamente impossível sua solução utilizando os métodos convencionais
como por exemplo Backtracking, programação dinâmica, divide & conquer en-
tre outras (melhor fundamentado na seção 6.9), dada sua grande quantidade
de dados além de inúmeras restrições. Assim sendo, neste trabalho estuda-
se soluções aos problemas separadamente, usando métodos metaheurísti-
cos, obtendo-se soluções que satisfaçam às restrições de cada um dos casos:
scheduling de escoamento; e o scheduling de atendimento da demanda.
Este trabalho é divido em quatro partes:
-
3
Parte I Nesta, se introduz o problema dando uma idéia geral sobre o mesmo,
além de fazer uma pesquisa bibliográfica identificando os trabalhos rea-
lizados nesta área, ou áreas relacionadas;
Parte II Nesta, se trabalha o problema de realizar o scheduling de escoa-
mento de petróleo bruto das plataformas marítimas, definindo-o e pro-
pondo uma metodologia de solução;
Parte III Nesta, se trabalha o problema de realizar o scheduling de atendi-
mento a centros consumidores, definindo-o e propondo uma metodologia
de solução;
Parte IV Apresenta a conclusão geral do trabalho e as propostas de trabalhos
futuros.
-
Capítulo 1
Estado da arte
Ao longo da pesquisa bibliográfica realizada para a elaboração desta disser-
tação, encontraram-se diversos artigos, teses e livros que fizeram possível um
melhor entendimento dos conceitos que foram desenvolvidos nos capítulos
posteriores. Estas bibliografias introduziram elementos importantes que aju-
daram à eleição da melhor ferramenta possível para a resolução do problema
proposto inicialmente.
Exsitem varias formas de considerar o problema de scheduling e rotea-
mento dos navios, tendo em conta as restrições aplicadas por cada autor,
como o tamanho do navio, a carga que transporta, a velocidade, entre outras
(Ronen 1983).
Ao realizar a seleção da frota a utilizar para o transporte do petróleo, é
importante ter em conta a estrutura dos navios. Alguns autores estudaram
a possibilidade de usar um algoritmo não-linear para este tipo de problema
(Augusto & Kawano 1998).
Em muitos dos trabalhos encontrados, o estudo do problema da janela
de tempo, considera a possibilidade de aumentar o tempo estipulado para
a entrega do produto, e também que o navio carregue mais de um produto
para realizar varias entregas sem perder mais tempo de viagem (Al-Yakoob
1997), de forma a reduzir a penalização por demora. Por isso, Almeida Lima
(2002) propôs como solução deste problema, realizar uma simulação do caso
de venda, com todas as restrições que o conformam, para lograr estender o
horizonte de tempo requerido para o envio do produto ao cliente sem sofrer
penalização. Fagerholt (2001) idealizou a mudança da janela de tempo rígida,
ou seja, que não permite uma margem de erro, a outra não rígida, ou seja,
que tem uma margem de erro, permitindo um controle de erros, utilizando
a especulação para otimizar o período de entrega do produto, sabendo que a
avaliação da janela de tempo com respeito à carga do navio é parcialmente
4
-
5
conhecida, e que o planejamento do problema é distribuído em um número de
pessoas que fazem o mesmo (Schut 2005).
Hoje em dia, no panorama mundial, a utilização de petróleo e seus deriva-
dos é muito importante na economia. Assim sendo, pesquisadores, baseiam
seus estudos na procura de uma melhor solução para o problema de trans-
porte deste produto tão precioso. Além disso, é uma área pouco explorada. As
considerações que se deve ter em conta no processo de exploração e produção
de petróleo, são os custos diretos e indiretos do trabalho com este material.
Soares de Medeiros (1999) utiliza uma metodologia de custeio baseado em
atividades para a resolução do problema.
Pereira Motta Franco (2003) propôs a utilização de sistemas inteligentes
que ajudem na tomada de decisão para o planejamento de plataformas marí-
timas, tendo em conta os aspectos econômicos, políticos e ambientais que
trazem este tipo de assunto, assim como, conhecer qual frota é melhor para
o transporte. Por outro lado, Boardman et al. (1997) propuseram a utilização
de um Sistema de Suporte de Decisão (DSS).
Durante o transporte de produtos é muito importante fazer uma revisão
do equipamento usado, de modo a evitar problemas ambientais. No caso do
transporte de petróleo, o vazamento implica em um impacto muito forte para
muitos organismos que vivem no mar (Reis da Silva 2004).
Fagerholt & Christiansen (2000) estudaram o problema do transporte fa-
zendo uma analogia com o problema do caixeiro viajante com a incorporação
da janela do tempo para otimizar o conjunto de portos visitados, em uma
grande frota de barcos. Soletti (2006), em seu trabalho, considera o problema
do transporte de petróleo e seus derivados como um problema de Programação
Linear Inteira Mista (PLIM), atendendo as demandas dos centros consumido-
res e das refinarias, para o qual propõe um modelo matemático capaz de iden-
tificar dentre um conjunto de navios, o mais apropriado para o transporte do
produto. Malandraki & Daskin (1992) estudaram a possibilidade de resolver
o problema de veículos com uma heurística nearest-neighbor, considerando
que o melhor é fazer o atendimento dos clientes que fiquem mais perto do
ponto de partida do transporte, o que pode ser aplicado à carga de petróleo.
Uma solução ao problema pode ser enviar um navio aos portos que ficam mais
próximos ao ponto de partida e, assim, minimizar custos.
A minimização de custos, é um dos condicionantes no planejamento e
roteamento de navios de carga, considerando que menores custos não im-
plicam menor qualidade do produto (Pinto Junior 2001). Kim & Barnhart
(1997) desenvolveram um modelo que permite conhecer qual é o caminho, o
custo e como minimizá-lo, baseado em um método de redução de problemas,
-
6
que implica em: consolidação de nó; de caminhos; derivação de programas; e,
um procedimento de solução branch-and-price-and-cut. Também pode se ver
este tema no trabalho de Shih (1997).
Para realizar o envio de petróleo é preciso fazer o roteamento e scheduling,
obtendo assim, uma melhor escolha dos navios. Paolucci et al. (2002) fizeram
uma simulação do processo tendo em conta aspectos do plano de chegada dos
petroleiros aos portos, e a seqüência de produção nas refinarias. No rotea-
mento de navios, Terumichi Ono (2001), formulou um modelo matemático
que permite dimensionar as frotas dedicadas ao serviço de transporte, as-
sim como, estabelecer as rotas a percorrer segundo a demanda. Por outro
lado, Iskendar et al. (2001) estudaram o problema do planejamento de navios,
como um veiculo, considerando uma frota heterogênea e numerosas viagens,
ou seja, um conjunto de navios e uma certa quantidade de viagens a realizar,
sempre que a duração total de cada veiculo não supere o período de planeja-
mento; Persson & Gothe-Lundgren (2004) integraram o planejamento de envio
e o planejamento do processo na refinaria para dar solução ao problema do
planejamento e scheduling.
Quando se estuda a complexidade computacional do problema, Calégari
(1999) baseia-se na utilização da paralelização com base em Algoritmos Evo-
lutivos (AE), mas nem sempre as soluções teoricas dadas são possíveis na
implementação computacional.
-
Parte II
Scheduling de escoamento de
petróleo bruto de plataformas
marítimas
7
-
8
Nesta parte do trabalho vai-se dar solução ao problema de fazer um schedul-
ing para o escoamento de petróleo bruto de plataformas marítimas. Para este
fim se tomou como ponto de partida o trabalho desenvolvido pelo grupo de
pesquisa do “Laboratório de Sistema de Separação e Otimização de Processos”
(LASSOP), onde mediante programação matemática resolveu-se o problema de
dimensionamento de um conjunto de navios, um conjunto de plataformas e
um conjunto de refinarias. Como resultado foi determinado que plataformas
devem carregar o petróleo bruto, em que navio, e onde deve ser a descarga
do petróleo coletado, obtendo a chamada rota, a qual parte de uma refinaria,
passa por um conjunto de plataformas e chega à mesma ou outra refinaria.
Então pode-se dizer que o resultado do problema define que rotas tem que
fazer um determinado navio para minimizar o tempo, associado a custos, de
forma a satisfazer uma determinada demanda.
O problema tratado nesta parte do trabalho é fundamentado pelo motivo
que o dimensionamento obtido, pelo grupo de pesquisa de LASSOP, não de-
termina a seqüência em que o navio deve visitar as plataformas de cada rota,a
ele associada, além de que, se houver mais de uma rota associada a um navio,
não determina qual a seqüência de rotas a ser realizada. Por tanto, necessita-
se inserir novas restrições que dependem destas seqüências e dos tempos em
que são realizadas.
A metodologia usada neste trabalho foi:
• Definir o problema, explicando as restrições associadas ao mesmo;
• Fundamentar o método a ser utilizado para a resolução do problema;
• Fundamentar a seleção da ferramenta a ser utilizada;
• Introduzir os conceitos de rota;
• Introduzir os conceitos de caminho;
• Apresentar as classes do sistema com seus métodos;
• Apresentar o diagrama de classes do sistema;
• Explicar como se resolveu o problema baseado no sistema das classes;
• Esboçar um cenário para avaliar os resultados do software desenvolvido;
• Fazer uma conclusão parcial do problema, ou seja, referente a este tra-
balho.
-
Capítulo 2
Problema a resolver
Foi considerado o dimensionamento já existente, e que cada navio tem um
conjunto de rotas associado, onde uma rota é aquela que começa em uma
refinaria e termina na mesma ou outra refinaria, passando unicamente por
plataformas. Na prática este conjunto de plataformas, não chega a um número
muito elevado por rota. Então, o problema a resolver é encontrar a seqüên-
cia de plataformas e refinarias, garantindo minimizar a distância percorrida,
assegurando que esta seqüência cumpra com as seguintes restrições:
• Dois navios não podem ficar ao mesmo tempo na mesma plataforma;
• Uma plataforma não pode chegar ao máximo de sua capacidade de ar-
mazenamento, sob pena de parada de produção. Por tanto, o atendi-
mento à plataforma refere-se à retirada do petróleo, antes que chegue à
capacidade máxima de armazenamento da plataforma;
• Um navio só pode atracar em uma refinaria se houver piers disponível e,
além disso, se a profundidade do pier acrescida da altura da maré (calcu-
lada pelo método dos duodécimos URL: http://www.cibernautica.com.ar
/mareas/duode.htm), no momento de atraco e desatraco, for maior que o
calado do navio.
Então, suponha-se que existam três navios, com velocidades n1v = 110nós,
n2v = 120nós e n3v = 130nós e o scheduling apresentado na Figura 2.1. Pode-se
observar que o navio n3 demora mais que o navio n1 para realizar a rota R_0.
Isto parece ilógico, dado que o navio n3 é mais veloz que o navio n1, mas isto
acontece uma vez que o tempo que um navio demora para fazer uma rota,
não só depende da distância, mas também de muitos fatores, como por exem-
plo o tempo que um determinado navio demora em atracar e desatracar, em
uma determinada plataforma. Além disso, se houver dois navios com as mes-
mas características (velocidade, capacidade, largura, comprimento, etc...), não
9
-
10
Figura 2.1: Scheduling dos navios
necessariamente vão demorar o mesmo tempo em realizar uma determinada
rota, já que a rota só especifica as plataformas visitadas, e não a seqüência
na qual são visitadas. Então, sejam nx e ny dois navios com as mesmas ca-
racterísticas e seja R uma rota que parte da refinaria r1 e chega à refinaria r3passando pelas plataformas p1, p2 e p3, os navios nx e ny podem percorrer 6
diferentes rotas considerando as combinações de seqüências das plataformas
(ver a Tabela 2.1). Ou seja, pode-se atribuir, por exemplo, a nx a seqüência
de r1 → p1 → p3 → p2 → r3 (combinação 2 na tabela) e, a ny ,a seqüência de
r1 → p3 → p2 → p1 → r3 (combinação 6 na tabela).
Tabela 2.1: Combinações das possíveis rotas, considerando três plataformasp1 p2 p3
1 1 2 32 1 3 23 2 1 34 2 3 15 3 1 26 3 2 1
Agora, qual é o critério, para selecionar a seqüência a ser atribuida a um
navio? A idéia de atribuir uma seqüência a um navio se baseia em tomar a
seqüência de distância mínima. A seção 3 explica como se obtêm esta distân-
cia para cada rota; e, a seção 3.5 explica como se obtêm a distância total que
o navio tem que percorrer.
Antes de introduzir-se na solução do problema, é importante explicar e
justificar o método usado para solução deste problema, além do por que da
seleção da ferramenta usada para este fim.
-
2.1. FUNDAMENTOS DE SELEÇÃO DO MÉTODO UTILIZADO 11
2.1 Fundamentos de seleção do método utilizado
Ainda que do ponto de vista teórico se pode enumerar todas as possíveis
soluções e avaliar cada uma delas, com respeito ao valor da função objetivo,
na prática, em um computador, é muitas vezes impossível analisar e avaliar
todas as possíveis soluções, já que o número de combinações cresce expo-
nencialmente com o tamanho do problema. É por este motivo que primeiro,
foram criadas todas as possíveis seqüências de uma rota, para assim reduzir
o universo de soluções.
Uma vez terminado todo este processo conhecido como clusterização, me-
diante um método GREEDY, também conhecido como método voraz, o qual
se baseia na suposição que se tem todos os caminhos mínimos, é dizer dis-
tâncias mínimas, a distância global é mínima, pode-se chegar a uma solução
que se não é ótima, é muito próxima a ela. Esta solução é muito útil con-
siderando que para chegar a uma solução ótima deve-se usar outros méto-
dos como por exemplo backtracking, divide & conquer, programação dinámica,
programação matemática, entre outras, que avaliam todas as possíveis com-
binações, e isto, dependendo do tamanho do problema, pode ser impossível
de calcular computacionalmente. Mais na frente, na seção 6.9, introduze-se
mais nesta área, justificando a escolha baseando-se no problema especifico.
Para quem esté interessado na teoria e práctica da computabilidade e com-
plexidade, recomenda-se a leitura de Hartley (1987), Jones (1997) e Cutland
(1997).
2.2 Fundamentos de seleção de ferramenta uti-
lizada
Dada a característica do problema e o volume dos dados, escolheu-se utilizar
uma linguagem de programação orientada a objetos que permitisse manipu-
lar o tamanho dos dados, ou seja, o quanto cada dado ocupa na memória.
Além disso, procurou-se uma linguagem de programação multiplataforma, ou
seja, que possa ser compilada tanto em Windows, como em um sistema Unix,
como por exemplo Linux. Dentre as linguagens de programação conhecidas,
a que melhor se ajusta a estas necessidades é C++, dado que ela é orientada
a objetos; permite definir o espaço de memória utilizado por cada dado; e, é
multiplataforma.
-
Capítulo 3
Conceitos prévios
Para um melhor entendimento do problema e da metodologia a ser empregada
neste trabalho, é fundamental o conhecimento e entendimento dos conceitos
e fundamentos de como se representa uma rota e um caminho (este último
apresentado na seção 3.5).
3.1 Conceito de rota
Definiu-se como uma rota aquela que começa com uma refinaria e termina
na mesma, ou outra refinaria, passando por um conjunto de plataformas.
Assim pode-se representar uma rota como uma cadeia binária de tamanho
= CP + 2 ∗ CR, onde CP é a quantidade de plataformas em uma rota e CR a
quantidade de refinarias. Um exemplo desta pode ser observada em cada linha
da Tabela 3.1, a qual é uma matriz binária que contém o conjunto das rotas
possíveis considerando o sistema com 3 plataformas e 3 refinarias. Cada linha
desta matriz representa uma rota, por exemplo, a rota Rx parte da refinaria r1e chega à refinaria r2, passando pelas plataformas p1 e p3.
Tabela 3.1: Matriz de todas as rotasRota r1 r2 r3 p1 p2 p3 r1 r2 r3...
......
......
......
......
...Rx 1 0 0 1 0 1 0 1 0...
......
......
......
......
...Ry 1 0 0 0 1 1 0 1 0...
......
......
......
......
...Rz 1 0 0 0 0 1 0 1 0...
......
......
......
......
...
Uma pergunta que se pode fazer neste momento é, como calcular todas as
12
-
3.2. CÁLCULO DE TODAS AS ROTAS POSSÍVEIS 13
rotas possíveis, conhecendo-se apenas a quantidade de refinarias e a quanti-
dade de plataformas. A próxima seção está dedicada à explicação da metodolo-
gia usada para responder a este questionamento.
3.2 Cálculo de todas as rotas possíveis
Nesta seção parte-se do principio que se conhece a quantidade de refinarias
e plataformas que compõem o sistema, e diante desta informação pode-se de-
terminar o número de combinações possíveis sem repetição. Para calcular
o número de possíveis combinações de refinarias e plataformas que confor-
mam as rotas, deve-se primeiro considerar alguns casos bases, para poder
determinar, mediante indução, qual a equação que determina este número de
combinações.
Os casos bases considerados são apresentados nas Tabelas 3.2 e 3.3, onde
a quantidade de linhas ou combinações (Tabela 3.2) é dado por 2CP = 22 = 4
(onde CP é a quantidade de plataformas presentes no sistema completo). Na
Tabela 3.3, a quantidade de linhas é 2CP ∗ CR2 = 22 ∗ 22 = 16 (onde CR é a
quantidade de refinarias presentes no sistema completo).
Tabela 3.2: Caso base de 1 refinaria e 2 plataformasr p1 p2 r1 1 1 11 1 0 11 0 1 11 0 0 1
O caso base apresentado na Tabela 3.4 (na página 15) confirma a dedução
nos dois primeiros casos: a quantidade de linhas é definida pela quantidade
de refinarias; e, a quantidade de plataformas, mediante a Equação 3.1.
Quantidade_Filas = 2CP ∗ CR2 (3.1)
Aplicando esta equação ao caso base da Tabela 3.4 obtem-se:
Quantidade_Filas = 2CP ∗ CR2 = 22 ∗ 32 = 36
Por outro lado, a quantidade de colunas necessárias para representar esta
matriz é igual ao tamanho da cadeia binária apresentada na seção anterior,
baseada na quantidade de refinarias e na quantidade de plataformas, medi-
-
3.2. CÁLCULO DE TODAS AS ROTAS POSSÍVEIS 14
Tabela 3.3: Caso base de 2 refinarias e 2 plataformasr1 r2 p1 p2 r1 r21 0 1 1 1 01 0 1 0 1 01 0 0 1 1 01 0 0 1 1 0
1 0 1 1 0 11 0 1 0 0 11 0 0 1 0 11 0 0 0 0 1
0 1 1 1 1 00 1 1 0 1 00 1 0 1 1 00 1 0 0 1 0
0 1 1 1 0 10 1 1 0 0 10 0 0 1 0 10 0 0 0 0 1
ante a seguinte Equação 3.2.
Quantidade_Colunas = CP + 2 ∗ CR (3.2)
Para realizar automaticamente todas as combinações possíveis das platafor-
mas, deve-se verificar quais os passos a serem seguidos. Usando-se o exemplo
de 3 plataformas, tem-se 8 combinações (23 = 8) de zeros e um como mostrado
na Tabela 3.5.
Neste exemplo, observa-se que a quantidade de zeros e uns para cada co-
luna é igual ao total de linhas dividido por 2, conforme Equações 3.3 e 3.4:
C1 = 2CP−1 (3.3)
C0 = 2CP−1 (3.4)
Com respeito a cada coluna, tem-se um padrão para alocação dos números
zero e um, por exemplo, na coluna 1 da Tabela 3.5 (na página 16), foram
primeramente alocados todos os números um e depois todos os zeros. Na
coluna 2, da mesma tabela, repete-se duas vezes o seguinte procedimento:
situa-se primeramente C12
quantidades do número um; depois C02
zeros. Na
coluna 3 observa-se que foram intercalados uns e zeros. Nesta coluna (coluna
-
3.2. CÁLCULO DE TODAS AS ROTAS POSSÍVEIS 15
Tabela 3.4: Caso base de 3 refinarias e 2 plataformasr1 r2 r3 p1 p2 r1 r2 r31 0 0 1 1 1 0 01 0 0 1 0 1 0 01 0 0 0 1 1 0 01 0 0 0 0 1 0 0
1 0 0 1 1 0 1 01 0 0 1 0 0 1 01 0 0 0 1 0 1 01 0 0 0 0 0 1 0
1 0 0 1 1 0 0 11 0 0 1 0 0 0 11 0 0 0 1 0 0 11 0 0 0 0 0 0 1
0 1 0 1 1 1 0 00 1 0 1 0 1 0 00 1 0 0 1 1 0 00 1 0 0 0 1 0 0
0 1 0 1 1 0 1 00 1 0 1 0 0 1 00 1 0 0 1 0 1 00 1 0 0 0 0 1 0
0 1 0 1 1 0 0 10 1 0 1 0 0 0 10 1 0 0 1 0 0 10 1 0 0 0 0 0 1
0 0 1 1 1 1 0 00 0 1 1 0 1 0 00 0 1 0 1 1 0 00 0 1 0 0 1 0 0
0 0 1 1 1 0 1 00 0 1 1 0 0 1 00 0 1 0 1 0 1 00 0 1 0 0 0 1 0
0 0 1 1 1 0 0 10 0 1 1 0 0 0 10 0 1 0 1 0 0 10 0 1 0 0 0 0 1
-
3.2. CÁLCULO DE TODAS AS ROTAS POSSÍVEIS 16
Tabela 3.5: Combinações possíveis de três plataformas1 2 31 1 11 1 01 0 11 0 00 1 10 1 00 0 10 0 0
3) também foi seguido um padrão: primeiro C14
quantidades de número um;
depois C04
quantidades de número zero; e, assim por diante, até o total de
linhas (2CP = 8). Este padrão foi desenvolvido para o caso CP = 3, deve-se,
agora generalizar para CP = n.
Viu-se que para a coluna 1 tem-se 2 divisões; para a coluna 2 tem-se 4
divisões; e, para a coluna 3 tem-se 8 divisões. Por tanto, pode-se escrever as
seguintes equações:
• coluna 1 → Div[1] = 2 = 23
4= 23−2 = 2CP−(CP−1) = 21
• coluna 2 → Div[2] = 4 = 23
2= 23−1 = 2CP−(CP−2) = 22
• coluna 3 → Div[3] = 8 = 23 = 23−0 = 2CP−(CP−3) = 23
Desta forma a quantidade de divisões de cada coluna é dada pela Equação 3.5
Div[NC] = 2CP−(CP−NC) = 2NC (3.5)
onde NC é o número da coluna. A quantidade de elementos por cada divisão
em uma coluna é dada pela Equação 3.6.
Elementos[NC] =2CP
Div[NC](3.6)
Para um melhor entendimento, veja-se a Tabela 3.6 na qual a coluna 1
(NC = 1) tem Div[1] = 2 e Elementos[1] = 4, ou seja, apresenta 2 intervalos e
cada intervalo possui 4 elementos. Na coluna 2 (NC = 2) tem-se Div[2] = 4
e Elementos[2] = 2. Ou seja, tem-se 4 intervalos de 2 elementos e, a coluna 3
(NC = 3) apresenta Div[3] = 8 e Elementos[3] = 1, ou seja, apresenta 8 intervalos
de 1 elemento cada um.
A desvantagem do uso desta metodologia na determinação das rotas é a
não definição da seqüência a seguir. Por exemplo, retomando a rota Rx da
-
3.3. SEQÜÊNCIAS EM UMA ROTA 17
Tabela 3.6: Aplicação do conceito de elementos e divLinha NC = 1 NC = 2 NC = 3
0 1 1 11 1 1 02 1 0 13 1 0 04 0 1 15 0 1 06 0 0 17 0 0 0
Tabela 3.1, não se sabe se da refinaria r1 vai à Plataforma p1 ou à p3. São apre-
sentadas algumas soluções a este problema, baseadas na idéia das seqüências
a serem seguidas, em uma rota.
3.3 Seqüências em uma rota
Como já mencionado existe um problema na definição de uma rota, uma vez
informada qual é a refinaria de saída, a refinaria de chegada e as plataformas
que se deve visitar, mas não se informou em que seqüência se visitam estas
plataformas. Por exemplo, no caso da rota Rx pode-se definir 2 seqüências
diferentes:
1. r1 → p1 → p3 → r2
2. r1 → p3 → p1 → r2
Para este caso particular (rota Rx) tem-se, apenas, duas formas de ir da refi-
naria r1 à refinaria r2 passando pelas plataformas p1 e p3. Porém, a quantidade
de combinações vai depender da quantidade de plataformas.
A seguir serão propostas algumas formas para resolução deste problema.
Primeira solução
Uma solução é definir uma matriz onde cada linha se corresponda com a linha
na matriz de rotas possíveis (por exemplo a matriz apresentada na Tabela 3.1);
e, cada coluna determine a distância da rota. A distância, refere-se à distância
total da seqüência, ou seja a seqüência r1 → p1 → p3 → r2 apresenta uma
distância de 500 km referente a soma da distância de r1 a p1, acrescida da
distância de p1 a p3, e da distância de p3 a r2.
Por exemplo, suponha-se uma rota com 2 refinarias e 2 plataformas, mais
especificamente a rota Rx, apresentada na Tabela 3.1. Existem 16 possíveis
-
3.3. SEQÜÊNCIAS EM UMA ROTA 18
combinações de seqüências (Equação 3.1, página 13). Tome-se a seqüência
r1 → p1 → p3 → r2 com distância de 500 km, supondo que se conhece as dis-
tâncias entre as plataformas e refinarias; e, a seqüência r1 → p3 → p1 → r2com distância de 322 km. A Matriz de Distâncias irá armazenar a distância
das seqüências, com um número de linhas igual da matriz de todas as ro-
tas e número de colunas dado pela Equação 3.1. No caso de 3 refinarias e 3
plataformas tem-se 72 colunas. A rota Rx tem 16 possíveis combinações e a
matriz de distâncias tem 72. Deve-se ocupar as primeiras colunas da matriz e
completar o restante com um valor negativo (dado que não existem distâncias
negativas), para determinar que não há mais combinações. Então, a linha que
corresponde à rota Rx na matriz de distâncias terá nas primeiras 16 posições
as distâncias de todas as combinações possíveis da rota.
Esta solução tem três desvantagens importantes. A primeira é que para
saber a qual seqüência pertence a distância, necessita-se gerar as seqüências;
calcular a distância; e verificar se é igual ao valor procurado, o que demanda
bastante cálculo. Outra desvantagem é baseada na ambigüidade do problema,
dado que, pode haver mais de uma seqüência com a mesma distância. Por
ultimo o problema de espaço de memoria em um computador, dado que se
uma matriz de 72 colunas só usa parte dela (no caso da linha da rota Rx, 16
colunas, se está desperdiçando muito espaço.
Segunda solução
Outra possível solução é fazer uma matriz com o número de colunas = CP +1,
onde a primeira coluna será o número de linha da rota à qual corresponde
a seqüência que se encontra no resto das coluna na mesma linha, ou seja,
retoma-se o exemplo da rota Rx da Tabela 3.1 e considera-se que esta rota
está na linha 13 e além disso o código de p1 é = 1 e o de p3 é = 3 então,
se obtería o resultado que pode ser observado na Tabela 3.7, onde o valor
−1 é o elemento neutro (valor negativo mencionado com anterioridade), que
determina que na rota só há duas plataformas para construir as seqüências.
Esta solução elimina a ambigüidade da solução anterior, mas ainda se tem
o problema do espaço de memória, dado que se o sistema fosse maior, por
exemplo, se houvesse 30 plataformas e se consideranse as rotas que só pas-
sam por algumas plataformas, está-se desperdiçando bastante espaço. Além
disso, se tem que calcular a distância, o que demandaria mais tempo de ex-
ecução. Para solucionar este problema se pode combinar a solução anterior
com esta, agregando uma coluna mais à matriz na qual se situa a distância
da seqüência, como se pode ver na Tabela 3.8.
-
3.3. SEQÜÊNCIAS EM UMA ROTA 19
Tabela 3.7: Segunda possível soluçãoLinha da Primeira Segunda Terceira
rota plataforma plataforma plataforma...
......
...13 1 3 −113 3 1 −1...
......
...
Tabela 3.8: Soluções combinadasLinha da Distância Primeira Segunda Terceira
rota da rota(mn) plataforma plataforma plataforma...
......
......
13 500 1 3 −113 322 3 1 −1...
......
......
Terceira solução
Outra solução, partindo-se da idéia das duas soluções anteriores visando
otimizar o espaço de memória utilizado, é associar a cada rota uma matriz
com a quantidade de linhas igual à quantidade de possíveis combinações (a
qual se calcula com a Equação 3.1) e a quantidade de colunas igual à quan-
tidade de plataformas da rota (já não mais a quantidade de plataformas do
sistema) mais três, a primeira coluna com a distância, a segunda coluna com
a refinaria de partida e a última coluna com a refinaria de chegada, e as co-
lunas centrais estão destinadas para determinar a seqüência de plataformas,
como pode ser observado na Tabela 3.9.
Tabela 3.9: Terceira soluçãoDistância Refinaria Primeira Segunda Refianria
da rota (mn) de saída plataforma plataforma de chegada450 10 1 3 20500 10 3 1 20
Esta metodologia gera uma lista de matrizes, onde a posição da matriz
na lista determina a linha da rota na matriz de rotas possiveis à qual faz
referência. Esta solução otimiza o espaço de memória utilizado, dado que se
definem as matrizes com as linhas e colunas que só se vão utilizar; além disso
não se tem o problema de ambigüidade, uma vez que pode haver a condição
de existir duas distâncias iguais, mas as seqüências que determinam essas
distâncias não o sejam; e por último a distância é calculada uma única vez
-
3.4. CALCULAR TODAS AS POSSÍVEIS SEQÜÊNCIAS DA ROTA 20
quando se constroi a matriz das seqüências da rota, conseguindo assim não
recalcular este dado cada vez que necessitemos da distância.
Na próxima seção será apresentada a metodologia usada para o cálculo de
todas as possíveis seqüências em uma rota.
3.4 Calcular todas as possíveis seqüências da rota
Para calcular todas as possíveis seqüências de uma rota, primeiro deve-se
levar em consideração, que toda seqüência deve começar com a refinaria de
partida e terminar com a refinaria de chegada, por isso as possíveis combi-
nações são feitas com o conjunto de plataformas.
Para calcular todas as possíveis combinações da rota, tem-se que gerar
as Permutações ou Ordenações sem Repetição, que se definem da seguinte
maneira:
“As permutações sem repetição de n elementos se define como as distintas
formas de ordenar todos os elementos distintos”, uma vez que a única dife-
rença entre elas é a ordem de colocação de seus elementos. O número destas
permutações é dada pela Equação 3.7:
CPn = n! (3.7)
Ou seja, para o caso de 3 plataformas tem-se CP3 = 3! = 6 e para 4, tem-se
CP4 = 4! = 24.
Agora, quais são os passos que se devem seguir para obter todas as pos-
síveis combinações?.
Primeiro deve-se encontrar uma metodologia a seguir, a que propõe-se
neste trabalho é a que se apresenta na Tabela 3.10. A metodologia usada
é: para cada coluna (NC) sabe-se a quantidade de vezes consecutivas (CV C)
de um elemento do conjunto, determinada pela Equação 3.8:
CV C[NC] = (n − NC)! (3.8)
onde n é a quantidade de elementos que tem o conjunto, que neste caso é a
quantidade de plataformas. Além disso sabe-se que se tem x vezes a repetição
deste intervalo na coluna, onde x é calculada pela Equação 3.9:
x = CRepit[NC] =
n!CV C[NC]
n=
(n − 1)!
CV C[NC](3.9)
-
3.4. CALCULAR TODAS AS POSSÍVEIS SEQÜÊNCIAS DA ROTA 21
Tabela 3.10: Permutações sem repetição de 4 plataformasp1 p2 p3 p4
1 1 2 3 42 1 2 4 33 1 3 2 44 1 3 4 25 1 4 2 36 1 4 3 27 2 1 3 48 2 1 4 39 2 3 1 410 2 3 4 111 2 4 1 312 2 4 3 113 3 1 2 414 3 1 4 215 3 2 1 416 3 2 4 117 3 4 1 218 3 4 2 119 4 1 2 320 4 1 3 221 4 2 1 322 4 2 3 123 4 3 1 224 4 3 2 1
-
3.4. CALCULAR TODAS AS POSSÍVEIS SEQÜÊNCIAS DA ROTA 22
Observa-se na Tabela 3.10, na primeira coluna (p1), NC = 1 , tem-se
CV C[1] = (4 − 1)! = 3! = 6
CRepit[1] =(4 − 1)!
6=
3!
6= 1
Estas equações (já apresentadas nas Equações 3.8 e 3.9) apresentam os resul-
tados que se podem observar na Tabela 3.10, já que tem 6 uns consecutivos
uma só vez na coluna, seguido de 6 dois consecutivos e assim até terminar os
elementos do conjunto.
Para a coluna NC = 2, (p2):
CV C[2] = (4 − 2)! = 2! = 2
CRepit[2] =(4 − 1)!
2=
3!
2=
6
2= 3
Para a coluna NC = 3, (p3):
CV C[3] = (4 − 3)! = 1! = 1
CRepit[3] =(4 − 1)!
1=
3!
1= 6
E por último a coluna NC = 4, (p4):
CV C[4] = (4 − 4)! = 0! = 1
CRepit[4] =(4 − 1)!
1=
3!
1= 6
Então pode-se concluir que as equações de CV C e CRepit são corretas.
Agora, para obter todas as possíveis seqüências em uma rota, só falta agre-
gar uma coluna ao início com a refinaria de partida da rota e uma coluna ao
final com a refinaria de chegada, e seguindo a terceira solução apresentada
na seção 3.3 só faltaria agregar mais uma coluna ao começo da matriz, calcu-
lar a distância de cada seqüência e armazená-la nesta coluna.
Depois de ter pronta a matriz com toda a informação, já se pode ordenar
esta de menor a maior com respeito à distância, isto irá facilitar a forma de
busca na hora de procurar a seqüência de distância mínima seguinte na rota.
-
3.5. CONCEITO DE CAMINHO 23
3.5 Conceito de caminho
Um caminho é um conjunto de rotas, o qual associa um navio a uma matriz
que vai determinar a seqüência que o navio deve seguir nesse caminho, além
disso, seguindo a idéia da terceira solução, discutida na seção 3.3. Esta
matriz tem as seguintes dimensões: linhas = quantidade de possíveis combi-
nações das rotas neste caminho; e, colunas = quantidade de rotas (CRutas)
mais 1, sendo usada para armazenar a distância total da seqüência de rotas
da linha. O cálculo da distância total, não é tão trivial como na seção anterior,
e será apresentado na seção 6.1.
Para obter as possíveis seqüências de rotas, foi utilizada a metodologia de-
scrita na seção 3.4, onde foi considerado o conjunto de elementos, para gerar
as permutações sem repetição, com as plataformas. Neste caso, o conjunto
de elementos é o conjunto de rotas associadas ao caminho. Uma vez obtidas
as combinações das CRutas! , é calculada a distância de cada combinação das
rotas. Este cálculo, não é trivial, uma vez que depende de fatores como, a
seqüência e a distância da seqüência de cada rota que compõe este caminho.
Se em uma seqüência se teme, por exemplo, as rotas R1, R2 e R3 associadas
às distâncias mínimas destas 1100mn, 1200mn e 1300mn, respectivamente, a
distância do caminho não é necessariamente a soma de todas as distâncias
das rotas, ou seja, 3600mn, função apenas das refinarias de chegada e saída
de cada rota. Considerando o caso da refinaria de chegada da rota R1 ser
diferente da refinaria de partida da rota R2, a principio, a distância total seria
a soma das distâncias entre as duas refinarias, mas na prática, não tem sen-
tido um navio atracar se não houver necessidade de carga ou descarga, já que
isto implica custos adicionais. Portanto, a distância total deve ser calculada
como a distância entre a refinaria de partida da segunda e a primeira plata-
forma, na seqüência da mesma rota, acrescida da distância entre a refinaria
de chegada da primeira rota e a primeira plataforma, na seqüência da segunda
rota, conforme será apresentado na seção 6.1.
Assim sendo, na coluna de distância da matriz do caminho, são calculadas
as distância mínimas na seqüência de cada rota que compõem o caminho, o
que não necessariamente é real, dado que se pode escolher uma seqüência
de uma rota que não apresenta uma distância mínima, e, por conseguinte,
vai diferir da distância da seqüência das rotas na matriz do caminho. Para
contornar este problema é definida uma matriz chamada secuencia, associada
ao caminho, a qual contém a seqüência de refinarias e plataformas que o navio
deve percorrer.
-
Capítulo 4
Classes
Nesta seção são explicadas as classes que conformam o sistema, usando a
Linguagem Unificada de Modelagem (UML) (para quem não tenha conheci-
mento sobre UML recomenda-se a leitura de Larman (2003) ou Rumbaugh
et al. (2004) para melhor compreensão desta seção).
Uma classe é um elemento de UML, usado para especificar o padrão do qual
se produzirão os objetos em tempo de execução. Portanto, uma classe é uma
especificação e um objeto é uma instância de uma classe. As classes podem
ter outras classes como atributos; podem delegar suas responsabilidades a
outras classes; e, implementar interfaces abstratas. O modelo de classes está
no núcleo do desenvolvimento e do desenho orientados a objetos; e, expressa
o estado e o comportamento do sistema. Uma classe encapsula o estado (os
atributos) e oferece os serviços (métodos) para sua manipulação. Um bom
desenho orientado a objetos limita o acesso direto aos atributos da classe e
oferece os serviços que manipulam o requerimento do solicitante. Este enco-
brimento dos dados e exposição dos serviços assegura que as modificações dos
dados realizam-se em um unico lugar e de acordo com regras específicas; para
grandes sistemas a quantidade de código com acesso direto aos elementos de
dados em muitos locais é extremadamente alto. Combinando-se um conjunto
de objetos (instâncias das classes) e o modelo das classes, obtém-se o que se
denomina cenário. Um cenário determina o que acontece na realidade num
tempo especifico, como se alguem tira uma fotografia de um sistema e observa-
se como estão as informações (atributos) das classes naquele instante.
A seguir são explicadas as classes a serem utilizadas no sistema proposto.
24
-
25
Matriz� MaxX : int� MaxY : int� pMatriz : int*+ Matriz()+ Matriz(X : int, Y : int)+ ReDim(X : int, Y : int)+ at(X : int, Y : int) : int+ at(X : int, Y : int, Valor : int)+ getX() : int+ getY() : int+ print_R_data_frame()+ print()+ print2()+ printSched()+ printSeq()+ printSchedLatex()+ print_R()
Figura 4.1: Classe Matriz
Classe Matriz
Esta classe foi desenvolvida pelo fato de que em C++ não existe nos seus tipos
primitivos, um tipo Matriz. Nesta linguagem define-se uma matriz com um
ponteiro ao tipo de dados desta. A forma de armazenamento dos dados é
é semelhante a um vetor, para se identificar uma posição da matriz deve-se
utilizar o seguinte procedimento: M [i ∗ CC + j] onde CC é a quantidade de
colunas contidas na matriz M . O problema de trabalhar com uma matriz
desta forma, ou seja com um ponteiro, é que para passar como parâmetro a
mesma, também tem-se que passar como parâmetro a quantidade de linhas
e a quantidade de colunas da matriz, para, assim, saber qual a dimensão da
mesma.
Então definiu-se a classe Matriz, que se apresenta na Figura 4.1, onde
tem-se três atributos, os quais determinam a quantidade de linhas (MaxX), a
quantidade de colunas (MaxY) e o ponteiro para os dados (pMatriz). Como
pode-se observar neste último atributo, esta classe só aceita dados de tipo
inteiro dado que neste trabalho só se necessitam matrizes deste tipo. Esta
classe tem dois construtores, Matriz() e Matriz(X,Y) onde o primeiro define
uma matriz sem dimensões e o segundo gera a matriz já com dimensões (X*Y).
Além dos construtores se implementou uma função ReDim(X,Y) que redimen-
siona a instância da classe que invoca esta função. Para obter a informação da
posição [i,j] definiu-se a função at(i,j), na qual usou-se um polimorfismo
de sobrecarga (para quem não tem conhecimento de polimorfismo de sobre-
-
26
carga, recomenda-se a leitura da seção 2.6 de Lippman (2002)) para poder
atribuir um valor na posição [i,j], é dizer a mesma função invocada com
mais um parâmetro (por exemplo z), que é o valor a ser adicionado na posição.
Então a função at(i,j,z) adiciona o valor z na posição [i,j] do objeto que
a invoca. Outras funções implementadas foram getX() e getY() as quais dão
a quantidade de linhas e colunas, respectivamente, que tem a instância que as
invoca; e por último implementou-se várias formas de imprimir a matriz, das
quais, entre as mais importantes, destaca-se a função print_R_data_frame
a qual imprime em um arquivo os dados da matriz colocando estes com for-
mato de um tipo de dados (data_frame) nativo de R (R-Project) a ser detalhado
na seção 6.2, é um software que será utilizado neste trabalho para a geração
dos gráficos do relatorio final do sistema.
Classe Grafo
Grafo� nodos : int*� aristas : Matriz� CN : int+ iniciar()+ addNodo(nodo_nuevo : int)+ remNodo(i : int)+ addArista(nodo_1 : int, nodo_2 : int, dist : int)+ remArista(nodo_1 : int, nodo_2 : int)+ getDistancia(nodo_1 : int, nodo_2 : int) : int+ print()+ printLatex()
Figura 4.2: Classe Grafo
Nesta classe foram definidos os dados referentes às platarmas e refinarias
que podem ser vistas como nós e a distância entre estas podem ser vistas
como as arestas que unem estes nós, desta forma o conjunto de plataformas e
refinarias são representadas com um grafo.
Nesta classe (ver Figura 4.2) tem-se 3 atributos, os quais determinam a
quantidade de nós (CN), as etiquetas dos nós (nodos), que representam o código
da plataforma ou refinaria à qual corresponda o nó, e a matriz de adjacência
(aristas). Os métodos implementados para esta classe foram: o construtor
(iniciar); agregar um novo nó (addNodo); remover um nó (remNodo); agregar o
peso de uma aresta, que no nosso caso a distância entre os nós, (addArista);
remover uma aresta (remArista); obter o peso da aresta
-
27
(getDistancia); e duas formas de imprimir a instância da classe.
Classe Compartimento
Compartimento� codigo : int� capacidade : float� tipoProduto : int� quantidadeProduto : float+ iniciar(codP : int, capP : float, tipoProdP : int, qProdP : float)+ getCodigo() : int+ getCapacidade() : float+ getTipoProduto() : int+ getQuantidadeProduto() : float+ setCodigo(cod : int)+ setCapacidade(cap : float)+ setTipoProduto(tp : int)+ setQuantidadeProduto(qp : float)+ print()
Figura 4.3: Classe Compartimento
A classe Compartimento, Figura 4.3, tem a finalidade de instanciar diferen-
tes compartimentos que podem pertencer a um navio. Nesta classe os dados
importantes a destacar, quer dizer, os atributos, são: o código (codigo), o qual
vai diferencia-lo do resto dos compartimentos; a capacidade deste comparti-
mento (capacidade); o tipo de produto (tipoProduto); e a quantidade de pro-
duto. Os métodos implementados para esta classe são: o construtor (iniciar)
o qual toma como parâmetro o código do compartimento (codP), a capacidade
do compartimento (capP), o tipo de produto (tipoProdP) e a quantidade de
produto armazenado (qProdP); e os que manipulam direitamente os atributos,
os quais, seguindo a tradição, foram chamados com get+Nome_do_Atributo
para os métodos que permitem obter a informação do atributo do objeto que
invoca o método; e set+Nome_do_Atributo para os métodos que permitem
atribuir um valor ao atributo do objeto que o invoca. Além destes métodos
implementou-se um método para impressão dos dados desta classe.
Classe Navio
A classe Navio, Figura 4.4, tem a finalidade de instanciar diferentes navios que
podem pertencer a uma frota (Figura 4.5 na pagina 30). Nesta classe os atribu-
-
28
Navio� codigo : int� descricao : string� calado : float� comprimento : float� velocidade : float� t_atraco : Matriz� t_desatraco : Matriz� v_descarrega : int� comp : Compartimento*� quantidadeComp : int+ iniciar(codP : int, descP : string, calP : float, compriP : float, velP : float)+ getCodigo() : int+ getDescricao() : string+ getCalado() : float+ getComprimento() : float+ getVelocidade() : float+ getComp(i : int) : Compartimento+ getCarrega() : float+ getCapacidade() : float+ getVelocidadeDescarrega() : int+ getTempoAtraco(cod : int) : int+ getTempoDesatraco(cod : int) : int+ setCodigo(cod : int)+ setDescricao(des : string)+ setCalado(cal : float)+ setComprimento(com : float)+ setVelocidade(velo : float)+ setVelocidadeDescarrega(LitrosPorUnidadDeTiempo : int)+ setTempoAtraco(cod : int, tempo : int)+ setTempoDesatraco(cod : int, tempo : int)+ addComp(compart : Compartimento)+ setCarregar(petro : float) : bool+ setDescarregar(petro : float) : bool+ Descarregar() : float+ print()+ printLatex()
Figura 4.4: Classe Navio
-
29
tos mais importantes a se destacar, são: o código (codigo) que irá diferencia-
lo do resto dos navios instanciados; uma descrição do mesmo (descricao);
o calado (calado); o comprimento (comprimento); a velocidade (velocidade);
o tempo de atracação (t_atraco), que é um objeto do tipo matriz, que na
primeira linha terá as plataformas e refinarias presentes no sistema e na se-
gunda linha o tempo que o navio instânciado, vai demorar para atracar na
refinaria ou plataforma correspondente à coluna da primeira linha; o tempo
de desatracação (t_desatraco) que é um objeto de tipo matriz que na primeira
linha terá as plataformas e refinarias existentes no sistema e na segunda linha
o tempo que, o navio instânciado, irá demorar para desatracar da refinaria
ou plataforma correspondente à coluna na primeira linha; a velocidade de
bombeio do produto armazenado nos compartimentos (v_descarrega), que
é um atributo é de especial importância, uma vez que irá determinar qual o
tempo mínimo que um navio pode ficar atracado em uma refinaria descarre-
gando o petróleo coletado nas plataformas; um conjunto de objetos Compar-
timento (comp) que irá determinar a capacidade do navio; e a quantidade de
compartimentos (quantidadeComp) que se tem no conjunto comp.
Os métodos implementados para esta classe são por um lado os que ma-
nipulam diretamente os atributos, chamados com os nomes
get+Nome_do_Atributo para os métodos que permitem obter a informação
do atributo do objeto que o invoca; e set+Nome_do_Atributo para os méto-
dos que permitem atribuir um valor ao atributo do objeto que o invoca. E por
outro lado são: o construtor (iniciar) o qual toma como parâmetro o código
do navio (codP), a descrição (descP), o calado (calP), o comprimento (compriP)
e a velocidade (velP); o método getCapacidade que calcula a carga do navio;
o método Descarregar o qual retorna a quantidade de petróleo total em to-
dos os compartimentos e esvazia os mesmos, ou seja, além de descarregar,
informa quanto descarregou; e dois métodos para impressão dos dados desta
classe.
Classe Frota
Esta classe, Figura 4.5, foi definida para armazenar todas as possíveis instân-
cias da classe Navio permitindo criar conjuntos de navios. Os atributos desta
classe, são: um código (codigo); uma descrição (descricao); um conjunto
de objetos Navio (navios); e a quantidade de objetos (CN) que tem o conjunto
navios. Os métodos implementados para esta classe foram, além dos que
permitem manipular os atributos, um método para imprimir a informação da
-
30
Frota� codigo : int� descricao : string� navios : Navio*� CN : int+ iniciar(codigoP : int, descricaoP : string)+ getCodigo() : int+ getDescricao() : string+ getNavio(pos : int) : Navio+ setCodigo(cod : int)+ setDescricao(des : string)+ addNavio(n : Navio)+ print()
Figura 4.5: Classe Frota
classe e o construtor, o qual toma como parâmetros a informação do código
(codigoP) e a descrição (descricaoP).
Classe Piers
Esta classe, Figura 4.6, foi definida para poder instanciar diferentes piers,
onde pudesse variar a profundidade (profundidade), a largura (largo) e o
comprimento (cumprimento), diferenciando-os por um código (codigo). Além
disso se agregou mais um atributo, que é o valor de verdade que deter-
mina se essa instância do pier está ocupada ou não (ocupado). Nesta classe
implementam-se os métodos que permitem manipular os atributos, além do
método que permite imprimir os dados desta classe e o construtor da mesma,
o qual toma como parâmetros o código (codP), a profundidade (profP), a
largura (largoP) e o comprimento (compriP). Outro método que implementou-
se é baseado na restrição que um navio só pode atracar em uma refinaria se
existir um pier disponível e além disso a profundidade deste pier mais a al-
tura da maré deve ser maior que o calado do navio. O comprimento do navio
é menor que o do pier, então neste método (puedeAtracar) passa-se como
parâmetro o calado do navio (calado), o comprimento do mesmo (n_compr) e
a altura da maré, e retorna verdadeiro se e só se o pier está disponível e se o
calado do navio for menor que a profundidade do piers mais a altura da maré;
o comprimento do navio é menor que o comprimento do pier.
-
31
Piers� codigo : int� profundidade : float� largo : float� cumprimento : float� ocupado : bool+ iniciar(codP : int, profP : float, largoP : float, cumpriP : float)+ getCodigo() : int+ getProfundidade() : float+ getLargo() : float+ getCumprimento() : float+ getOcupado() : bool+ setCodigo(cod : int)+ setProfundidade(p : float)+ setLargo(l : float)+ setCumprimento(c : float)+ setOcupado(ocup : bool)+ puedeAtracar(calado : float, n_cumpr : float, alt_marea : float) : bool+ print()
Figura 4.6: Classe Piers
Classe Porto
Um porto é composto por conjunto de piers onde os navios são atracados. Na
classe Porto, Figura 4.7, tem-se como atributo os seguintes dados: o código
(codigo) definido como único, permitindo diferencia-lo dos outros objetos do
mesmo tipo, o nome (nome), a cidade na que está (cidade), o estado no que
se encontra (estado), o país (pais), o conjunto de piers (piers), a quanti-
dade de piers no conjunto piers (quantidadePiers), a amplitude da maré
nesse porto (amplitud) e a hora exata da primeira maré morta (MM) a partir
da hora 0 em que começa o scheduling. Os métodos implementados para esta
classe, além dos que permitem manipular os atributos, agregando os métodos
addPiers e remPiers que anexam e eliminam Piers do conjunto piers, e o
que permite imprimir a informação da classe, são: o método que determina se
um navio pode atracar ou não nesse porto, este método (puedeAtracar) toma
como parâmetros o navio (n) e o tempo (t), que verifica se existe algum pier
desocupado e assim verifica, com respeito à hora que irá determinar a altura
da maré, se o navio pode atracar nesse piers ou não; e o construtor (iniciar)
que toma como parâmetros o código (codP), o nome (nP), a cidade (cidP), o
estado (estP), o país (paisP), a hora da primeira maré morta (PMM) a partir da
hora 0 do scheduling e a amplitude da maré (ampli).
-
32
Porto� codigo : int� nome : string� cidade : string� estado : string� pais : string� piers : Piers*� quantidadePiers : int� amplitud : float� MM : float+ iniciar(codP : int, nP : string, cidP : string, estP : string, paisP : string, PMM : float, ampli : float)+ getCodigo() : int+ getNome() : string+ getCidade() : string+ getEstado() : string+ getPais() : string+ getAmplitud() : float+ getMM() : float+ setCodigo(cod : int)+ setNome(nomeP : string)+ setCidade(cidadeP : string)+ setEstado(estadoP : string)+ setPais(paisP : string)+ setAmplitud(ampli : float)+ setMM(time : float)+ addPiers(p : Piers)+ remPiers(codPiers : int)+ puedeAtracar(n : Navio, t : int) : bool+ print()
Figura 4.7: Classe Porto
-
33
Classe Refinaria
Refinaria� codigo : int� nome : string� cidade : string� estado : string� pais : string� descarregado : float� quantidadePortos : int� portos : Porto*+ iniciar(codP : int, nomeP : string, cidadeP : string, estP : string, paisP : string)+ getCodigo() : int+ getNome() : string+ getCidade() : string+ getEstado() : string+ getPais() : string+ getPorto(i : int) : Porto+ getDescarregado() : float+ getQuantidadePortos() : int+ setCodigo(cod : int)+ setNome(nomeP : string)+ setCidade(cidadeP : string)+ setEstado(estadoP : string)+ setPais(paisP : string)+ setDescarregado( : float)+ addPorto(port : Porto)+ puedeAtracar(n : Navio, t : int) : bool+ print()+ printLatex()
Figura 4.8: Classe Refinaria
Em uma refinaria existe um porto que é composto por vários piers. Neste
trabalho considerou-se a possibilidade de existir várias refinarias, assim pode-
se trabalhar com uma quantidade maior de cenários. É por esta razão que
definiu-se a classe Refinaria, Figura 4.8, os atributos desta classe são: o
código (codigo) o qual irá determinar a refinaria instanciada como única;
o nome (nome), a cidade na qual ela está localizada (cidade), o estado em
que se encontra (estado), o país (pais), o conjunto de portos (portos), a
quantidade de portos no conjunto portos (quantidadePortos) e a quanti-
dade de petróleo bruto descarregada na refinaria (descarregado), este último
atributo tem como finalidade poder considerar que em um determinado plane-
jamento apresenta a quantidade de petróleo existente em um período inicial,
aproximando-se mais à realidade. Os métodos implementado para esta classe,
-
34
além dos que permitem manipular os atributos, e o que permite imprimir
a informação da classe, são: o método getCantPiers o qual nos retorna a
quantidade de Piers associados a esta Refinaria, ou seja é a soma dos Piers
pertencentes aos Portos que a Refinaria tem; o método que determina se um
navio pode atracar ou não nesta refinaria, este método (puedeAtracar) toma
como parâmetros o navio (n) e o tempo (t), com a informação do navio e o
tempo onde o método procura em todos os portos, do conjunto portos, e
identifica se existe a disponibilidade para que um navio possa atracar; o cons-
trutor (iniciar) que toma como parâmetros o código (codP), o nome (nomeP),
a cidade (cidadeP), o estado (estP), o país (paisP).
Classe Plataforma
Plataforma� codigo : int� nome : string� producao : float� capacidadeMax : float� v_carrega : int� horaUD : int� resto : float+ iniciar(codP : int, nomeP : string, prodP : float, capMaxP : float, hUDP : int, resto : float)+ getCodigo() : int+ getNome() : string+ getProducao() : float+ getCapacidadeMax() : float+ getHoraUD() : int+ getResto() : float+ getTempoMax() : int+ getVelocidadeCarrega() : int+ setCodigo(cod : int)+ setNome(nome : string)+ setProducao(prod : float)+ setCapacidadeMax(cap : float)+ setVelocidadeCarrega(litrosPorUnidadeDeTempo : int)+ setHoraUD(hud : int)+ setResto(rest : float)+ print()+ printLatex()
Figura 4.9: Classe Plataforma
Uma plataforma marítima tem como propósito a extração de petróleo bruto
-
35
no mar. Existem muitos tipos de plataformas, mas neste trabalho só será
considerada a informação caracterízada na Figura 4.9, onde se apresenta
a classe Plataforma. Os atributos desta classe são: o código (codigo) que
vai determinar a plataforma instânciada como única; o nome (nome); a pro-
dução (producao) a qual determina a quantidade de petróleo que se extrai por
unidade de tempo; a capacidade máxima (capacidadeMax) que é a quantidade
máxima de petróleo bruto que a plataforma pode armazenar, fator importante
para indicar se a sua capacidade máxima atinge um ponto que obrigaria a
parada da produção; a velocidade de carga do bombeamento (v_carrega),
responsavel por determinar a quantidade de tempo que um navio estará atra-
cado à mesma para carregar o petróleo; a hora da última descarga (horaUD)
ou seja, a hora em que o último navio esteve na plataforma carregando; e o
volume da última descarga (resto) que é a quantidade de petróleo que ficou
estocado após a última descarga. Os métodos implementados para esta classe,
além dos que permitem manipular os atributos e os que permite imprimir a
informação da classe, são: o método do tempo máximo (getTempoMax) que diz
respeito ao limite, em tempo, que a plataforma pode ficar sem descarregar, é
calculado com base na hora da última descarga, o volume estocado e a pro-
dução da plataforma; e o construtor (iniciar) que toma como parâmetros
o código (codP), o nome (nomeP), a produção (prodP), a capacidade máxima
(capMaxP), a hora da última descarga (hUDP) e o estoque (resto).
Classe Rota
Uma rota, como se definiu na seção 3, é formada por uma refinaria de partida,
uma de chegada, e um conjunto de plataformas. Com estas informações, mais
a informação do grafo que contem as distâncias, gera-se uma matriz onde cada
linha é uma seqüência possível que se pode seguir onde a primeira coluna ar-
mazena a distância total da seqüência, determinada pela linha, da rota. Na
segunda coluna armazena-se o código da refinaria de partida, na última co-
luna a refinaria de chegada e nas colunas centrais as plataformas associadas
á rota. Para armazenar estas informações e poder instanciar mais de uma
rota no cenário, definiu-se a classe Rota que se apresenta na Figura 4.10. Na
classe Rota estão presentes os seguintes atributos: o código (codigo) que vai
determinar uma rota como única; a refinaria de partida (partida); a refinaria
de chegada (llegada); o conjunto de plataformas (plataformas); a quanti-
dade de plataformas no conjunto plataformas (CP); a matriz secuencias que
contem todas as possíveis combinações de seqüências que podemse seguir na
-
36
Rota� codigo : int� partida : Refinaria� llegada : Refinaria� plataformas : Plataforma*� CP : int� secuencias : Matriz� retardo : int� carga : float*+ iniciar(cod : int)+ getCodigo() : int+ getRetardo() : int+ getPartida() : Refinaria+ getChegada() : Refinaria+ getPlataforma(i : int) : Plataforma+ getCarga(nodo : int) : float+ getSecuencias() : Matriz+ setRetardo(r : int)+ setPartida(RP : Refinaria)+ setChegada(RC : Refinaria)+ addPlataforma(p : Plataforma)+ setCarga(des : float, nodo : int)+ generar_secuencias(dist : Grafo) : Matriz+ getDistancia(i : int) : int+ getCantNodos() : int+ sePuedeIncrementar(inc : int) : bool+ esPlataforma(cod : int) : bool+ print()+ printLatex()
Figura 4.10: Classe Rota
-
37
rota; o retardo (retardo) que identifica uma rota inicial, atributo usado como
objetivo de aproximar mais o sistema à realidade, uma vez que um navio tem
mais de duas rotas a ele associadas, pode ocorrer que entre as viagens, o
navio, dentre outras possibilidades de retardo, deva ser limpado, ou trocar a
tripulação, etc; e a carga (carga) que objetiva fazer com que as plataformas
associadas às rotas, diante de um planejamento determinado, onde são es-
pecificadas que plataformas deverão ser visitadas e quanto será carregado em
cada uma delas.
Os métodos implementados