Você está na página 1de 194

Dissertação de Mestrado

Scheduling do transporte de petróleo das


plataformas marítimas e de atendimento
a centros consumidores

Adrian Esteban Muract


amuract@gmail.com

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 das


plataformas marítimas e de atendimento
a centros consumidores

Dissertação apresentada como requisito par-


cial para obtenção do grau de Mestre pelo
Curso 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 de
Mestre 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 isso
signifique um aumento de custo, entre outras. Neste trabalho será apresen-
tada uma solução para este, mediante o desenvolvimento de um sistema que
permita calcular as rotas para transporte de petróleo bruto de plataformas
marí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 um
scheduling no qual determina-se a rota que cada navio deve realizar para que
o 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 la


mejor manera de mover una flota de navíos cargueros sin que ello signifique
una pérdida de dinero, entre otras cosas. En este trabajo se pretende dar
solución a este problema, mediante el desarrollo de un sistema que permite
calcular las rutas que debe seguir un navío para transportar el petróleo bruto
desde las plataformas marítimas a las refinerías, así como el transporte de
derivados de petróleo desde las refinerías a los centros consumidores. Para
la solución del sistema se realizó un scheduling en el cual se determina la
ruta que cada navío debe hacer para cumplir con la entrega de petróleo; y, el
ruteamiento realizado para determinar el mejor camino a seguir, teniendo en
cuenta el tiempo de desplazamiento, la carga y descarga del producto, además
del 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 best
economic and time consuming alternative to move a group of ships between
platforms, refineries and consuming centers. In the following research is intro-
duced a solution to this problem through a system which optimize the main
variables involved. Variables such as scheduling and road have been taken
into account. The variable scheduling defines the road that each ship must
follow. Meanwhile, the optimization of the route is based on traveling time
between each points, uploaded and downloaded time, storing capacity at each
point, etc. The following system has been tested in two real cases showing a
good performance.

iii
Agradecimentos

A meus orientadores, Professor João Inácio Soletti e Professora Sandra Helena


Vieira de Carvalho, pelos quais passei a ter uma grande admiração. Agradeço
pela paciência, dedicação e profissionalismo.
Ao grupo de pesquisa do LASSOP (Laboratório de Sistema de Separação e
Otimização de Processos) pela ajuda na concretização deste trabalho.
À CAPES (Coordenação de Aperfeiçoamento de Pessoal de Nível Superior) pelo
apoio financeiro.
À Universidade Federal de Alagoas, ao Curso de Mestrado em Modelagem
Computacional 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 e
profissionalismo na minha iniciação científica.
A todas as demais pessoas, que não estão aqui mencionadas, mas que de
alguma 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 9
2.1 Fundamentos de seleção do método utilizado . . . . . . . . . . . 11
2.2 Fundamentos de seleção de ferramenta utilizada . . . . . . . . . 11

3 Conceitos prévios 12
3.1 Conceito de rota . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 Cálculo de todas as rotas possíveis . . . . . . . . . . . . . . . . . 13
3.3 Seqüências em uma rota . . . . . . . . . . . . . . . . . . . . . . . 17
3.4 Calcular todas as possíveis seqüências da rota . . . . . . . . . . 20
3.5 Conceito de caminho . . . . . . . . . . . . . . . . . . . . . . . . . 23

4 Classes 24

5 Diagrama de Classes 41

6 Funções para a solução do problema 43


6.1 Função obtener_secuencia . . . . . . . . . . . . . . . . . . . . 43
6.2 Função ImprimirResultado . . . . . . . . . . . . . . . . . . . . 47
6.3 Função cargar_linha_matriz . . . . . . . . . . . . . . . . . . . 49
6.4 Função esPlataforma . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5 Função esRefineria . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.6 Função conflicto_navios . . . . . . . . . . . . . . . . . . . . . 52
6.7 Função plataforma_parada . . . . . . . . . . . . . . . . . . . . 53
6.8 Função atracarEnRefineria . . . . . . . . . . . . . . . . . . . 55
6.9 Função escojer_combinacion . . . . . . . . . . . . . . . . . . . 56

7 Estudos de casos 60
7.1 Dados de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.1.1 Estado inicial das plataformas . . . . . . . . . . . . . . . . 60
7.1.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . 61
7.1.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.1.4 Navios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.1.5 Caminhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
SUMÁRIO vi

7.1.6 Distâncias entre as refinarias e plataformas . . . . . . . . 65


7.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 85


13.1 Função obtener_secuencia . . . . . . . . . . . . . . . . . . . . 85
13.2 Função ImprimirResultado . . . . . . . . . . . . . . . . . . . . 86
13.3 Função cargar_linha_matriz . . . . . . . . . . . . . . . . . . . 86
13.4 Função esCConsumidor . . . . . . . . . . . . . . . . . . . . . . . 87
13.5 Função esRefineria . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.6 Função conflicto_navios . . . . . . . . . . . . . . . . . . . . . 88
13.7 Função cconsumidore_parado . . . . . . . . . . . . . . . . . . . 88
13.8 Função atracarEnRefineria . . . . . . . . . . . . . . . . . . . 90
13.9 Função escojer_combinacion . . . . . . . . . . . . . . . . . . . 90

14 Estudo de casos 92
14.1 Dados de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
14.1.1 Estado inicial dos Centros Consumidores . . . . . . . . . 92
14.1.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . 94
14.1.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
14.1.4 Navios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
14.1.5 Caminhos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
14.1.6 Distâncias entre as refinarias e centros consumidores . . 98
14.2 Resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
14.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 107
A.1 Estado inicial das plataformas . . . . . . . . . . . . . . . . . . . 107
LISTA DE FIGURAS vii

A.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . . . . . 108


A.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
A.4 Estado inicial dos navios . . . . . . . . . . . . . . . . . . . . . . . 112
A.5 Estado inicial dos caminhos . . . . . . . . . . . . . . . . . . . . . 114
A.6 Distâncias entre as refinarias e plataformas . . . . . . . . . . . 118
A.7 Scheduling resultante . . . . . . . . . . . . . . . . . . . . . . . . . 118
A.8 Caminhos resultantes . . . . . . . . . . . . . . . . . . . . . . . . 126
A.9 Estado final das plataformas . . . . . . . . . . . . . . . . . . . . 131
A.10 Estado final das refinarias . . . . . . . . . . . . . . . . . . . . . . 134
A.11 Estado final dos navios . . . . . . . . . . . . . . . . . . . . . . . . 135

B Relatório de scheduling do atendimento a centros consumidores 137


B.1 Estado inicial dos centros consumidores . . . . . . . . . . . . . 137
B.2 Estado inicial das refinarias . . . . . . . . . . . . . . . . . . . . . 138
B.3 Rotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
B.4 Estado inicial dos navios . . . . . . . . . . . . . . . . . . . . . . . 143
B.5 Estado inicial dos caminhos . . . . . . . . . . . . . . . . . . . . . 144
B.6 Distâncias entre as refinarias e centros consumidores . . . . . 148
B.7 Scheduling resultante . . . . . . . . . . . . . . . . . . . . . . . . . 149
B.8 Caminhos resultantes . . . . . . . . . . . . . . . . . . . . . . . . 156
B.9 Estado final dos centros consumidores . . . . . . . . . . . . . . 160
B.10 Estado final das refinarias . . . . . . . . . . . . . . . . . . . . . . 164
B.11 Estado final dos navios . . . . . . . . . . . . . . . . . . . . . . . . 165
B.12 Gráficos dos tempos de atracação nos piers . . . . . . . . . . . . 167

Lista de Figuras

2.1 Scheduling dos navios . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.1 Classe Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25


4.2 Classe Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3 Classe Compartimento . . . . . . . . . . . . . . . . . . . . . . . . 27
4.4 Classe Navio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.5 Classe Frota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.6 Classe Piers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7 Classe Porto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.8 Classe Refinaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.9 Classe Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.10 Classe Rota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77


11.2 Classe CConsumidor . . . . . . . . . . . . . . . . . . . . . . . . . 78
11.3 Classe Rota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11.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 . . . . . . . . . 132
A.3 Quantidade de petróleo por tempo na plataforma 2 . . . . . . . . . 133
A.4 Quantidade de petróleo por tempo na plataforma 3 . . . . . . . . . 133
A.5 Quantidade de petróleo por tempo na plataforma 4 . . . . . . . . . 134

B.1 Diagrama do scheduling do atendimento a centro consumidor . . . 161


B.2 Volume de produto estocado no centro consumidor 10 . . . . . . . 162
B.3 Volume de produto estocado no centro consumidor 20 . . . . . . . 162
B.4 Volume de produto estocado no centro consumidor 30 . . . . . . . 163
B.5 Volume de produto estocado no centro consumidor 40 . . . . . . . 164
B.6 Gráficos dos tempos que os navios podem atracar no pier 11 . . . . 167
B.7 Gráficos dos tempos que os navios podem atracar no pier 12 . . . . 168
B.8 Gráficos dos tempos que os navios podem atracar no pier 13 . . . . 168
B.9 Gráficos dos tempos que os navios podem atracar no pier 14 . . . . 169
B.10 Gráficos dos tempos que os navios podem atracar no pier 1 . . . . 170
B.11 Gráficos dos tempos que os navios podem atracar no pier 2 . . . . 170
B.12 Gráficos dos tempos que os navios podem atracar no pier 3 . . . . 171
B.13 Gráficos dos tempos que os navios podem atracar no pier 4 . . . . 171
B.14 Gráficos dos tempos que os navios podem atracar no pier 5 . . . . 172
B.15 Gráficos dos tempos que os navios podem atracar no pier 6 . . . . 172
B.16 Gráficos dos tempos que os navios podem atracar no pier 7 . . . . 173
B.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 . . . . . . . . . . . . . . . . . . . . . . . 12


3.2 Caso base de 1 refinaria e 2 plataformas . . . . . . . . . . . . . . . 13
3.3 Caso base de 2 refinarias e 2 plataformas . . . . . . . . . . . . . . 14
3.4 Caso base de 3 refinarias e 2 plataformas . . . . . . . . . . . . . . 15
LISTA DE TABELAS ix

3.5 Combinações possíveis de três plataformas . . . . . . . . . . . . . 16


3.6 Aplicação do conceito de elementos e div . . . . . . . . . . . . . . . 17
3.7 Segunda possível solução . . . . . . . . . . . . . . . . . . . . . . . 19
3.8 Soluções combinadas . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.9 Terceira solução . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.10 Permutações sem repetição de 4 plataformas . . . . . . . . . . . . 21

6.1 Matriz de adjacência (G) . . . . . . . . . . . . . . . . . . . . . . . 45


6.2 Possíveis seqüências da rota 1 . . . . . . . . . . . . . . . . . . . . 45
6.3 Possíveis seqüências da rota 2 . . . . . . . . . . . . . . . . . . . . 46
6.4 Ordem do conjunto de caminhos . . . . . . . . . . . . . . . . . . . 58
6.5 Nível de rota 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.6 Nível de rota 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.7 Nível de rota 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

7.1 Quantidades carregadas nas plataformas na rota 1 . . . . . . . . . 62


7.2 Quantidades carregadas nas plataformas na rota 2 . . . . . . . . . 62
7.3 Quantidades carregadas nas plataformas na rota 3 . . . . . . . . . 62
7.4 Quantidades carregadas nas plataformas na rota 4 . . . . . . . . . 63
7.5 Quantidades carregadas nas plataformas na rota 5 . . . . . . . . . 63
7.6 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 63
7.7 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 63
7.8 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 64
7.9 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 64
7.10 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 64
7.11 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 65
7.12 Matriz de adjacência (G) . . . . . . . . . . . . . . . . . . . . . . . 66
7.13 Seqüência de plataformas e refinarias que segue o navio 1 do cami-
nho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.14 Seqüência de plataformas e refinarias que segue o navio 2 do cami-
nho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.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 . . . . . . . . . . . 94


14.2 Descargas nos centros consumidores na rota 2 . . . . . . . . . . . 95
14.3 Descargas nos centros consumidores na rota 3 . . . . . . . . . . . 95
14.4 Descargas nos centros consumidores na rota 4 . . . . . . . . . . . 95
14.5 Descargas nos centros consumidores na rota 5 . . . . . . . . . . . 96
14.6 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 96
14.7 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 96
14.8 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 97
14.9 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 97
14.10 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 97
14.11 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 97
14.12 Matriz de adjacência (G) . . . . . . . . . . . . . . . . . . . . . . . 98
14.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 2


do caminho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
14.15 Seqüência de centros consumidores e refinarias que segue o navio 3
do caminho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

A.1 Combinações possíveis da rota 1 . . . . . . . . . . . . . . . . . . 109


A.2 Quantidades carregadas nas plataformas na rota 1 . . . . . . . . 109
A.3 Combinações possíveis da rota 2 . . . . . . . . . . . . . . . . . . 110
A.4 Quantidades carregadas nas plataformas na rota 2 . . . . . . . . 110
A.5 Combinações possíveis da rota 3 . . . . . . . . . . . . . . . . . . 110
A.6 Quantidades carregadas nas plataformas na rota 3 . . . . . . . . 111
A.7 Combinações possíveis da rota 4 . . . . . . . . . . . . . . . . . . 111
A.8 Quantidades carregadas nas plataformas na rota 4 . . . . . . . . 111
A.9 Combinações possíveis da rota 5 . . . . . . . . . . . . . . . . . . 111
A.10 Quantidades carregadas nas plataformas na rota 1 . . . . . . . . 112
A.11 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 112
A.12 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 112
A.13 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 113
A.14 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 113
A.15 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 113
A.16 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 113
A.17 Possíveis seqüências das rotas que compõem o caminho 1 . . . . . 114
A.18 Seqüência de plataformas e refinarias que segue o navio 1 do cami-
nho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
A.19 Possíveis seqüências das rotas que compõem o caminho 2 . . . . . 115
A.20 Seqüência de plataformas e refinarias que segue o navio 2 do cami-
nho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
A.21 Possíveis seqüências das rotas que compõem o caminho 3 . . . . . 116
A.22 Seqüência de plataformas e refinarias que segue o navio3 do caminho
3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
A.23 Matriz de adjacência . . . . . . . . . . . . . . . . . . . . . . . . . 118
A.25 Possíveis seqüências das rotas que compõem o caminho 1 . . . . . 128
A.26 Seqüência de plataformas e refinarias que segue o navio 1 do cami-
nho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
A.27 Possíveis seqüências das rotas que compõem o caminho 2 . . . . . 129
A.28 Seqüência de plataformas e refinarias que segue o navio 2 do cami-
nho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
A.29 Possíveis seqüências das rotas que compõem o caminho 3 . . . . . 130
A.30 Seqüência de plataformas e refinarias que segue o navio 3 do cami-
nho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
A.31 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 135
A.32 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 135
A.33 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 136
A.34 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 136
A.35 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 136
A.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 . . . . . . . . . . . 140


B.3 Combinações possíveis da rota 2 . . . . . . . . . . . . . . . . . . 140
B.4 Descargas nos centros consumidores da rota 2 . . . . . . . . . . . 141
B.5 Possíveis combinações da rota 3 . . . . . . . . . . . . . . . . . . . 141
B.6 Descargas nos centros consumidores na rota 3 . . . . . . . . . . . 141
B.7 Possíveis combinações da rota 4 . . . . . . . . . . . . . . . . . . . 142
B.8 Descargas nos centros consumidores da rota 4 . . . . . . . . . . . 142
B.9 Possíveis combinações da rota 5 . . . . . . . . . . . . . . . . . . . 142
B.10 Descargas nos centros consumidores da rota 5 . . . . . . . . . . . 142
B.11 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 143
B.12 tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 143
B.13 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 143
B.14 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 144
B.15 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 144
B.16 Tempo de desatracamento do navio 3 . . . . . . . . . . . . . . . . 144
B.17 Possíveis seqüências de rotas que segue o navio 1 . . . . . . . . . 145
B.18 Seqüência de centros consumidores e refinarias que segue o navio 1
do caminho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
B.19 Possíveis seqüências de rotas que segue o navio 2 . . . . . . . . . 146
B.20 Seqüência de centros consumidores e refinarias que segue o navio 2
do caminho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
B.21 Possíveis seqüências de rotas que segue o navio 3 . . . . . . . . . 147
B.22 Seqüência de centros consumidores e refinarias que segue o navio 3
do caminho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
B.23 Matriz de adjacência . . . . . . . . . . . . . . . . . . . . . . . . . 148
B.25 Possíveis seqüências de rotas que segue o navio 1 . . . . . . . . . 156
B.26 Seqüência de centros consumidores e refinarias que segue o navio 1
do caminho 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
B.27 Possíveis seqüências de rotas que segue o navio 2 . . . . . . . . . 157
B.28 Seqüência de centros consumidores e refinarias que segue o navio 2
do caminho 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
B.29 Possíveis seqüências de rotas que segue o navio 3 . . . . . . . . . 158
B.30 Sequencia de centros consumidores e refinarias que segue o navio 3
do caminho 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
B.31 Tempo de atracamento do navio 1 . . . . . . . . . . . . . . . . . . 165
B.32 Tempo de desatracamento do navio 1 . . . . . . . . . . . . . . . . 165
B.33 Tempo de atracamento do navio 2 . . . . . . . . . . . . . . . . . . 166
B.34 Tempo de desatracamento do navio 2 . . . . . . . . . . . . . . . . 166
B.35 Tempo de atracamento do navio 3 . . . . . . . . . . . . . . . . . . 166
B.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 r3
passando 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 plataformas


p1 p2 p3
1 1 2 3
2 1 3 2
3 2 1 3
4 2 3 1
5 3 1 2
6 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 r1
e chega à refinaria r2 , passando pelas plataformas p1 e p3 .

Tabela 3.1: Matriz de todas as rotas


Rota 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 plataformas


r p 1 p2 r
1 1 1 1
1 1 0 1
1 0 1 1
1 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_F ilas = 2CP ∗ CR2 (3.1)

Aplicando esta equação ao caso base da Tabela 3.4 obtem-se:

Quantidade_F ilas = 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 plataformas


r1 r2 p1 p2 r1 r2
1 0 1 1 1 0
1 0 1 0 1 0
1 0 0 1 1 0
1 0 0 1 1 0

1 0 1 1 0 1
1 0 1 0 0 1
1 0 0 1 0 1
1 0 0 0 0 1

0 1 1 1 1 0
0 1 1 0 1 0
0 1 0 1 1 0
0 1 0 0 1 0

0 1 1 1 0 1
0 1 1 0 0 1
0 0 0 1 0 1
0 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 C1
2
quantidades do número um; depois C0 2
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 plataformas


r1 r2 r3 p1 p2 r1 r2 r3
1 0 0 1 1 1 0 0
1 0 0 1 0 1 0 0
1 0 0 0 1 1 0 0
1 0 0 0 0 1 0 0

1 0 0 1 1 0 1 0
1 0 0 1 0 0 1 0
1 0 0 0 1 0 1 0
1 0 0 0 0 0 1 0

1 0 0 1 1 0 0 1
1 0 0 1 0 0 0 1
1 0 0 0 1 0 0 1
1 0 0 0 0 0 0 1

0 1 0 1 1 1 0 0
0 1 0 1 0 1 0 0
0 1 0 0 1 1 0 0
0 1 0 0 0 1 0 0

0 1 0 1 1 0 1 0
0 1 0 1 0 0 1 0
0 1 0 0 1 0 1 0
0 1 0 0 0 0 1 0

0 1 0 1 1 0 0 1
0 1 0 1 0 0 0 1
0 1 0 0 1 0 0 1
0 1 0 0 0 0 0 1

0 0 1 1 1 1 0 0
0 0 1 1 0 1 0 0
0 0 1 0 1 1 0 0
0 0 1 0 0 1 0 0

0 0 1 1 1 0 1 0
0 0 1 1 0 0 1 0
0 0 1 0 1 0 1 0
0 0 1 0 0 0 1 0

0 0 1 1 1 0 0 1
0 0 1 1 0 0 0 1
0 0 1 0 1 0 0 1
0 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 plataformas


1 2 3
1 1 1
1 1 0
1 0 1
1 0 0
0 1 1
0 1 0
0 0 1
0 0 0

3) também foi seguido um padrão: primeiro C1


4
quantidades de número um;
depois 4 quantidades de número zero; e, assim por diante, até o total de
C0

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:
23
• coluna 1 → Div[1] = 2 = 4
= 23−2 = 2CP −(CP −1) = 21
23
• coluna 2 → Div[2] = 4 = 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 −N C) = 2N C (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.

2CP
Elementos[NC] = (3.6)
Div[NC]

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 div


Linha NC = 1 NC = 2 NC = 3
0 1 1 1
1 1 1 0
2 1 0 1
3 1 0 0
4 0 1 1
5 0 1 0
6 0 0 1
7 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 → r2
com 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ção


Linha da Primeira Segunda Terceira
rota plataforma plataforma plataforma
.. .. .. ..
. . . .
13 1 3 −1
13 3 1 −1
.. .. .. ..
. . . .

Tabela 3.8: Soluções combinadas


Linha da Distância Primeira Segunda Terceira
rota da rota(mn) plataforma plataforma plataforma
.. .. .. .. ..
. . . . .
13 500 1 3 −1
13 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ção


Distância Refinaria Primeira Segunda Refianria
da rota (mn) de saída plataforma plataforma de chegada
450 10 1 3 20
500 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:

n!
CV C[N C] (n − 1)!
x = CRepit[NC] = = (3.9)
n CV C[NC]
3.4. CALCULAR TODAS AS POSSÍVEIS SEQÜÊNCIAS DA ROTA 21

Tabela 3.10: Permutações sem repetição de 4 plataformas


p1 p2 p3 p4
1 1 2 3 4
2 1 2 4 3
3 1 3 2 4
4 1 3 4 2
5 1 4 2 3
6 1 4 3 2
7 2 1 3 4
8 2 1 4 3
9 2 3 1 4
10 2 3 4 1
11 2 4 1 3
12 2 4 3 1
13 3 1 2 4
14 3 1 4 2
15 3 2 1 4
16 3 2 4 1
17 3 4 1 2
18 3 4 2 1
19 4 1 2 3
20 4 1 3 2
21 4 2 1 3
22 4 2 3 1
23 4 3 1 2
24 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

(4 − 1)! 3!
CRepit[1] = = =1
6 6
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

(4 − 1)! 3! 6
CRepit[2] = = = =3
2 2 2
Para a coluna NC = 3, (p3 ):

CV C[3] = (4 − 3)! = 1! = 1

(4 − 1)! 3!
CRepit[3] = = =6
1 1
E por último a coluna NC = 4, (p4 ):

CV C[4] = (4 − 4)! = 0! = 1

(4 − 1)! 3!
CRepit[4] = = =6
1 1
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 nesta classe, além dos que permitem mani-
pular os atributos e o que permite imprimir a informação da classe, são: o
método que gera todas as possíveis seqüência da rota (generar_secuencias),
calculando as distâncias destas e armazenando as informações em uma ma-
triz onde em cada linha são apresentadas as seqüências a seguir nesta rota.
Na primeira coluna armazena-se a distância total da seqüência, na segunda
coluna armazena-se o código da refinaria de partida, na última coluna a re-
finaria de chegada e nas colunas centrais as plataformas que tem a rota,
com a informação ordenada de menor a maior com respeito às distâncias de
cada seqüência; o método getCantNodos que nos retorna a quantidade de
nós, ou seja a quantidade de plataformas mais dois que são as refinarias; o
método sePuedeIncrementar o qual apresenta se ainda há uma seqüência
não usada; e o método esPlataforma que retorna se o código dado como
parâmetro corresponde a uma plataforma na rota.

Classe Caminho
Um caminho, como definiu-se na seção 3.5, é um conjunto de rotas associ-
adas a um navio, contendo a informação complementar do navio associado
às rotas e o grafo de distâncias. Toda esta informação, mediante métodos da
classe, permitem obter o restante das informações pertinentes à classe. Então
a classe Caminho, Figura 4.11, tem os seguintes atributos: o código (codigo)
que irá determina-lo como único; o Grafo de distância (distancias); o Navio
(nav) que vai fazer o caminho; o conjunto de Rotas (rutas); a quantidade de
rotas que tem o conjunto rutas (CR); a hora de inicio (hora_inicio), que tem
por finalidade permitir que um Caminho comece em uma hora determinada
e não necessariamente na hora de inicio do planejamento, de forma que o
sistema se torne mais flexivel; a linha na matriz de seqüências de cada Rota
(nivel_en_ruta), este atributo é um vetor de distância igual à quantidade de
rotas existentes no caminho; a matriz que contem todas as possíveis combi-
38

Caminho
 codigo : int
 distancias : Grafo
 nav : Navio
 rutas : Rota*
 CR : int
 hora_inicio : int
 nivel_en_ruta : int*
 seq_rutas : Matriz
 nivel_en_seq_rutas : int
+ iniciar(cod : int, n : Navio, hora_ini : int, dist : Grafo)
+ getCodigo() : int
+ getRutaPos(pos : int) : Rota
+ getPosRuta(r : Rota) : int
+ getRuta(cod : int) : Rota
+ getNivelRuta(rut : Rota) : int
+ getNivelRutaPos(pos : int) : int
+ getHoraInicio() : int
+ getNavio() : Navio
+ getSeqRutas() : Matriz
+ getCantRutas() : int
+ getDistanciaTotal() : int
+ getPlataforma(cod : int) : Plataforma
+ getRefineria(cod : int) : Refinaria
+ getNivelSeqRuta() : int
+ getRutaPosSeq(pos_seq : int) : Rota
+ setCodigo(cod : int)
+ addRuta(rut : Rota)
+ setNivelRuta(rut : Rota, nivel : int)
+ setHoraInicio(t_inicio : int)
+ setNavio(n : Navio)
+ incSeqRutas()
+ es_plataforma(cod : int) : bool
+ es_refineria(cod : int) : bool
+ generar_secuencias() : Matriz
+ obtener_secuencia_del_camino() : Matriz
+ getGrafo() : Grafo
+ refineria_inicial(codigo : int, pos_seq : int) : bool
+ print()
+ printLatex()

Figura 4.11: Classe Caminho


39

nações de seqüências de rotas (seq_rutas), neste atributo, como se esclare-


ceu na seção 3.5, tem uma matriz com colunas iguais a quantidade de rotas
no caminho mais um, que é a primeira coluna onde armazena-se a distância
total, e linhas que é igual ao factorial da quantidade de rotas; e o atributo
nivel_en_seq_rutas que determina a linha na matriz seq_rutas, ou seja,
qual é a combinação de seqüências de rotas existentes.
Os métodos implementados nesta classe, além dos que permitem mani-
pular os atributos e o que permite imprimir a informação da classe, são: o
método getRutaPos o qual retorna a Rota que está no vetor de Rotas na
posição passada como parâmetro; o método getPosRuta o qual retorna a
posição no vetor de Rotas em que está a Rota passada como parâmetro; o
método getRuta o qual retorna a Rota cujo código coincide com o número
dado como parâmetro, no caso de não existir, retorna −1; o método getNivelRuta
que retorna a linha da matriz das possíveis combinações de seqüências da rota
passada como parâmetro; o método getNivelRutaPos o qual retorna a linha
da matriz das possíveis combinações de seqüências da Rota cujo código co-
incide com o número dado como parâmetro; o método getDistanciaTotal
o qual retorna a distância da seqüência de rotas que temos neste caminho,
ou seja, nos retorna o valor armazenado na matriz seq_rutas na posição [
nivel_en_seq_rutas , 1 ], ou seja linha = nivel_en_seq_rutas e coluna
= 1; o método getPlataforma, que retorna a Plataforma cujo código coincide
com o número dado como parâmetro, esta Plataforma tem que pertencer a
alguma Rota no Caminho, em caso contrario retorna o código −1; o método
getRefineria, que retorna a Refinaria cujo código coincide com o número
dado como parâmetro, esta Refinaria tem que pertencer a alguma Rota no
Caminho, em caso contrario retorna o código −1 ; o método getRutaPosSeq,
que retorna a Rota cujo código coincide com o código armazenado na matriz
seq_rutas na posição [ nivel_en_seq_rutas, pos_seq ], onde pos_seq
é o número dado como parâmetro; o método incSeqRutas, que incrementa
o nível na seqüência de rotas, no caso de ficar na última linha da matriz
seq_rutas, então reinicia o valor do atributo nivel_en_seq_rutas em 1 ou
seja na primeira linha; o método es_plataforma, que retorna se o número
dado como parâmetro coincide com o código de alguma Plataforma nas Rotas
do Caminho; o método es_refinaria o qual retorna se o número dado como
parâmetro coincide com o código de alguma Refinaria nas Rotas do Caminho;
o método generar_secuencias o qual gera a matriz seq_rutas e a ordena de
menor a maior com respeito à distância; o método obtener_secuencia_del
_camino o qual retorna uma matriz, a qual na segunda linha tem a seqüên-
cia das Plataformas e Refinarias que se segue no Caminho, baseando-se nos
40

níveis da seqüência nas Rotas e no nível da seqüência de Rotas, e na primeira


linha tem a quantidade que se carrega em cada Plataforma, a qual é deter-
minada pela segunda linha na mesma coluna, ou se fosse uma Refinaria irá
encontrar o valor −1 que determina que descarrega-se o navio por completo;
e o método refineria_inicial o qual retorna true no caso onde o código
dado como parâmetro coincida com uma Refinaria e além disto, que está, na
posição da seqüência do Caminho, seja uma Refinaria inicial de alguma Rota
do Caminho.
Capítulo 5

Diagrama de Classes

Os diagramas de classes são diagramas de estrutura estática que mostram as


classes do sistema e suas inter-relações. Os diagramas de classe são o pilar
básico de modelagem com UML, sendo utilizados tanto para mostrar o que o
sistema pode fazer, como para mostrar como pode ser construído.
Uma revisão sobre os conceitos de UML pode ser feito em Larman (2003).
O diagrama de classes apresenta como interagem as classes do sistema,
além de esclarecer a base da construção do software, se apresenta na Figura 5.1,
onde pode-se verificar que: um Porto é composto por um conjunto de Piers;
uma Refinaria é composta por um conjunto de Portos; uma Rota é composta
por duas Refinarias, uma de partida e outra de chegada, um conjunto de
Plataformas e uma Matriz que determina as possíveis seqüências como já se
explicou; um Navio é composto por um conjunto de Compartimentos e duas
matrizes, uma Matriz que determina o tempo de desatracação e outra que de-
termina o tempo de atracação do Navio nas Refinarias e Plataformas que es-
tão no Cenário; uma Frota é composta por um conjunto de Navios; um Grafo
é composto por uma Matriz, que é a matriz de adjacência do mesmo; e um
Caminho é composto por um conjunto de Rotas, uma Matriz que determina
as possíveis seqüências de Rotas no Caminho, um Grafo com as distâncias e
um Navio que está associado às Rotas no conjunto de Rotas do Caminho.

41
42

Navio Compartimento Frota


 codigo : int  codigo : int  codigo : int
+comp  descricao : string
 descricao : string  capacidade : float

 calado : float  tipoProduto : int  navios : Navio*

 comprimento : float  quantidadeProduto : float  CN : int

 velocidade : float
+navios
 t_atraco : Matriz

Caminho
 t_desatraco : Matriz
 v_descarrega : int
+nav  codigo : int
 comp : Compartimento*
 distancias : Grafo
Grafo
 quantidadeComp : int
 nav : Navio
 nodos : int* +distancias  rutas : Rota*
 aristas : Matriz  CR : int
 CN : int  hora_inicio : int
+t_atraco +t_desatraco  nivel_en_ruta : int*

Matriz +aristas
 seq_rutas : Matriz
 nivel_en_seq_rutas : int
 MaxX : int
+seq_rutas
 MaxY : int
 pMatriz : int* +secuencias

Rota
 codigo : int
Porto  partida : Refinaria
 codigo : int  llegada : Refinaria
+rutas
 nome : string  plataformas : Plataforma*
 cidade : string  CP : int
 estado : string  secuencias : Matriz
 pais : string  retardo : int
 piers : Piers*  carga : float*
 quantidadePiers : int
 amplitud : float
+plataformas
 MM : float
+partida +llegada Plataforma
+portos
Refinaria  codigo : int
 codigo : int  nome : string
+piers  nome : string  producao : float
Piers  cidade : string  capacidadeMax : float
 codigo : int  estado : string  v_carrega : int
 profundidade : float  pais : string  horaUD : int
 largo : float  descarregado : float  resto : float
 cumprimento : float  quantidadePortos : int

 ocupado : bool  portos : Porto*

Figura 5.1: Diagrama de Classes do Sistema


Capítulo 6

Funções para a solução do


problema

Nesta seção são apresentados os fundamentos utilizados no desenvolvimento


das funções para obtenção da solução do problema. Inicialmete define-se as
funções utilizadas, os dados de entrada e os dados de saída, e por último os
métodos e fundamentos.

6.1 Função obtener_secuencia


O objetivo desta função é obter as seqüências disponíveis que um navio, asso-
ciado a um Caminho, tem que fazer.

Dados de entrada
Os dados de entrada desta função é um objeto Caminho.

Dados de saída
O dado de saída desta função é um objeto Matriz, o qual tem duas linhas
e colunas que é igual à somatória de todas as plataformas e refinarias de
cada Rota. Na segunda linha encontram-se os códigos das Plataformas ou
Refinarias ás quais um Navio está associado a um Caminho para atracar. A
primeira linha representa a quantidade de petróleo bruto que o navio tem que
carregar (se o problema for de scheduling), se o código que se corresponde com
a coluna na segunda linha fosse o de uma Plataforma, ou um −1 se o código
que se corresponde com a coluna na segunda linha fosse o de uma Refinaria.

43
6.1. FUNÇÃO OBTENER_SECUENCIA 44

Métodos e fundamentos
Como apresentado na seção 3.5, a metodologia adotada para obter a seqüên-
cia das Rotas que um Navio, associado a um Caminho, deverá fazer, não é
algo trivial dado que depende de alguns fatores como por exemplo qual é a se-
qüência de cada Rota (no conjunto das possíveis seqüências) que compõe este
Caminho. Além disso se deve ter em conta que se em uma seqüência temos
por exemplo, Rota1 e Rota2 nessa ordem, e as distâncias de cada seqüência
nas Rotas são 555mn e 577mn respectivamente, a distância do caminho não
necessariamente é a soma de todas as distâncias das Rotas, ou seja 1132mn,
dado que isto só depende da combinação das Refinarias de chegada e partida
de cada Rota. Se por exemplo, tem-se o caso de que a Refinaria de chegada
da Rota Rota1 , é distinta da Refinaria de partida da Rota Rota2 , não tem sen-
tido que um navio translade-se de uma Refinaria a outra sem necessidade de
descarregar na segunda, já que isto implica gastos não necessários.
Para solução deste problema implementou-se uma função que retorna a
seqüência certa de Refinarias e Plataformas que o navio deve seguir. Mas
como é que esta função consegue obter a seqüência correta? A resposta é
dada pela metodologia que esta função segue. Esta metodologia é a que se
esclarece a continuação:

• No objeto Caminho se vê qual é a seqüência de Rotas para logo olhar se


tem-se o problema descrito com anterioridade, o qual é que a Refinaria
de chegada e partida de duas Rotas consecutivas sejam distintas;

• No caso de não ter o problema, os passos que a função segue são: por
cada Rota na seqüência de rotas no Caminho, olha-se qual é a seqüência
de plataformas nessa Rota, que é determinada pelo número armazenado
no atributo nivel_en_ruta na classe Caminho, este número diz que
linha na matriz de secuencias, na classe Rota, acha-se a seqüência a
seguir na Rota; desta forma pega-se a seqüência de cada Rota concate-
nando todas e obtendo deste jeito a seqüência total que o Navio tem que
fazer no Caminho;

• No caso de acontecer o problema de diferenças entre as Refinarias de


chegada e partida das Rotas, o que se faz é, à distância total (sem con-
siderar a soma das distâncias entre as Refinarias) resta-se a distância
entre a Refinaria de partida da segunda Rota em questão e a primeira
Plataforma na seqüência da mesma Rota, e suma-se a distância entre a
Refinaria de chegada da primeira Rota em questão à primeira Plataforma
na seqüência da segunda Rota em questão.
6.1. FUNÇÃO OBTENER_SECUENCIA 45

Para entender melhor a metodologia que a função segue, é melhor intro-


duzir um exemplo. Seja um cenário com 2 Refinarias, 4 Plataformas, um
Navio e duas Rotas que o Navio tem que fazer, pela definição de Caminho se
pode dizer que estas duas Rotas associadas ao Navio representam um Cami-
nho. Se representa-se, com uma instância do Grafo com as distâncias entre
os nós, que neste caso são as duas Refinarias e as quatro Plataformas, este
Grafo de distâncias pode-se representar por sua matriz de adjacência, como a
que se apresenta na Tabela 6.1, onde os números 10 e 20 correspondem aos
códigos das Refinarias e os números 1, 2, 3 e 4 correspondem aos códigos das
Plataformas.

Tabela 6.1: Matriz de adjacência (G)

10 20 1 2 3 4
10 0 400 101 102 103 104
20 400 0 201 202 203 204
1 101 201 0 120 130 140
2 102 202 120 0 230 240
3 103 203 130 230 0 340
4 104 204 140 240 340 0

Definem-se também as Rotas como:


ROTA 1 (Rota1 )
As Refinarias e Plataformas que compõem esta rota são:
< Ref _S : 20 > < P lat : 1 > < P lat : 2 > < P lat : 3 > < Ref _C : 10 >
E as combinações possíveis destas, com suas distâncias são:

Tabela 6.2: Possíveis seqüências da rota 1

Distância(mn) Ref _S P lat P lat P lat Ref _C


555 20 3 1 2 10
555 20 2 1 3 10
654 20 3 2 1 10
654 20 1 2 3 10
663 20 2 3 1 10
663 20 1 3 2 10

ROTA 2 (Rota2 )
As Refinarias e Plataformas que compõem esta rota são:
< Ref _S : 20 > < P lat : 1 > < P lat : 3 > < P lat : 4 > < Ref _C : 10 >
E as combinações possíveis destas, com suas distâncias são:
6.1. FUNÇÃO OBTENER_SECUENCIA 46

Tabela 6.3: Possíveis seqüências da rota 2

Distância(mn) Ref _S P lat P lat P lat Ref _C


577 20 4 1 3 10
577 20 3 1 4 10
775 20 4 3 1 10
775 20 1 3 4 10
784 20 3 4 1 10
784 20 1 4 3 10

Agora considere-se um Caminho composto por duas Rotas e um Navio,


representado pela seguinte seqüência,

Rota1 → Rota2

e no atributo nivel_en_ruta do Caminho tem-se [2, 1] que correspondem às


linhas nas matrices de seqüência das Rotas Rota1 e Rota2 respetivamente. En-
tão o resultado da seqüência total é:
3|8
2
2 - 1 - 3
6 6
7

1 4 4|9

6 
?
20 
5
10

Seqüência 1: 20 → 2 → 1 → 3 → 10 → 20 → 4 → 1 → 3 → 10

e a distância total desta seqüência encontra-se na Equeção 6.1:

Dist_total_bruto = Distancia_total + custo_arista(10, 20) (6.1)

ou
Dist_total_bruto = 1132 + G[10, 20] = 1132 + 400 = 1532

onde G é a matriz de adjacência apresentada na Tabela 6.1. Mas como já


mencionado com anterioridade não há sentido ir da Refinaria 10 à 20 (aresta
{10, 20, 5}, ou seja, a aresta que vai de 10 a 20 com o label 5 ) se o navio
não descarrega nesta última, é neste ponto que a função elimina as arestas
{10, 20, 5} e {20, 4, 6} anexando a este grafo a aresta {10, 4, 5}, com o qual o
grafo apresenta a seguinte forma (as arestas eliminadas estão marcadas por
6.2. FUNÇÃO IMPRIMIRRESULTADO 47

pontos)
3|7
2
2 - 1 - 3
6 6
6

1 4 4|8

p
pp I 5
@
pp @
p @ ?

p
20 p p p p p p p p p p p p p p p p p 10

Seqüência 2: 20 → 2 → 1 → 3 → 10 → 4 → 1 → 3 → 10

onde a distância total da seqüência é calculada da seguinte forma

Distancia = Distancia_total − custo_arista(20, 4) + custo_arista(10, 4) (6.2)

ou
Distancia = 1132 − G[20, 4] + G[10, 4] = 1132 − 204 + 104 = 1032

Com esta função, consegue-se eliminar o problema de que um navio tenha


que ir de uma refinaria a outra indevidamente.

6.2 Função ImprimirResultado


O objetivo desta função é a geração de um relatório final, apresentando-se o
resultado final do scheduling obtido, informando quais foram os estados finais
das Refinarias, Plataformas, Navios e Caminhos do sistema. Um relatório,
obtido da simulação, é apresentado no Apendice A. Este relatório corresponde
ao resultado do cenário que será apresentado na seção 7.

Dados de entrada
Os dados de entrada desta função são: um conjunto de Caminhos, os quais
já foram tratados e cumprem com todas as restrições do problema; o mesmo
conjunto de Caminhos, mas na sua forma original, ou seja, antes de serem
tratados; um valor inteiro que determina a quantidade de objetos Caminho as-
sociado a tempo de viagem, para o primeiro ou segundo conjunto; e um objeto
Matriz o qual armazena o Scheduling que cumpre com todas as restrições.

Dados de saída
Esta função tem por objetivo gerar os arquivos necessários para o relatório
final, gerando um arquivo com extensão tex e outros arquivos com extensão
6.2. FUNÇÃO IMPRIMIRRESULTADO 48

R, os quais serão explicados posteriormente.

Métodos e fundamentos
Para a implementação desta função utilizaram-se além da linguagem C++, as
outras linguagens:

• LATEX: esta é uma linguagem para a preparação de documentos, formado


por um conjunto de macros de TEX, escritas inicialmente por Leslie Lam-
port (LamportTeX) em 1984, com a intenção de facilitar o uso da lin-
guagem de composição tipográfica gerado por Donald Knuth. LATEX é
muito utilizado para a composição de artigos acadêmicos,dissertações
e livros técnicos, dado que a qualidade tipográfica dos documentos feitos
em LATEX é comparável à de uma editorial científica de primeira linha.
LATEX é um software livre sob licença LPPL. A página oficial para o sistema
operativo Windows www.miktex.org, e para sistemas Unix utiliza-se pa-
cotes como por exemplo teTex (www.tug.org/tetex) ou TexLive
(www.tug.org/texlive).

• R-Project: R é uma linguagem e entorno de programação para análise


estatística e gráfica. Trata-se de um projeto de software livre, resultado
da implementação GNU da premiada linguagem S. R e S-Plus (versão co-
mercial de S) são, provavelmente, as duas linguagens mais utilizadas em
pesquisa pela comunidade estatística, sendo assim muito populares no
campo da pesquisa biomédica, da bioinformática e da matemática finan-
ceira. A isto contribui a possibilidade de carregar diferentes livrarias ou
pacotes com finalidades específicas de cálculo ou gráfico. Pagina oficial
www.r-project.org.

Estas linguagens foram usadas para a geração de um relatório do schedul-


ing resultante da aplicação do software a um cenário específico. Esta função
gera: um arquivo com extensão tex o qual tem o relatório em formato LATEX
para logo ser compilado com o mesmo e gerando desta forma o relatório em
formato PDF ; e dois arquivos com extensão R que contêm os dados necessários
para a geração dos gráficos com R-Project.
Esta função não gera o relatório final em PDF, dado que só gera os arquivos,
não os compila. Para compilar os mesmos gerou-se um Script que primeiro
corre o software resultante desta dissertação, para logo compilar uma função
feita em R que carrega os dados armazenados nos arquivos, gerado pelo soft-
ware, e com estes gerar os gráficos que vão ser incorporadas no relatório fi-
nal. É muito importante esclarecer que estes gráficos são imagens vetoriais
6.3. FUNÇÃO CARGAR_LINHA_MATRIZ 49

(Arranz 2005). Depois de gerar os gráficos com R compila-se com LATEX o ar-
quivo de extensão tex gerando desta forma o relatório final em formato PDF.

6.3 Função cargar_linha_matriz


Esta função tem como objetivo a geração de um objeto Matriz, de uma linha e
a quantidade de colunas igual ao Horizonte (que é o tempo limite do schedul-
ing), o qual tem a descrição da localização do Navio em um tempo específico.

Dados de entrada
Os dados de entrada desta função são: o Caminho para um determinado
periodo de tempo e o Grafo de distância.

Dados de saída
O dado de saída desta função é: um objeto Matriz, de uma linha e a quantidade
de colunas igual ao Horizonte. Este objeto Matriz representa a discretização
do tempo do scheduling, ou seja, se os intervalos da discretização são em
horas, então na coluna 30 vai-se armazenar um 0 se o Navio do Caminho
está em viagem na hora 30 do começo do Scheduling, ou vai ter o código da
Plataforma ou Refinaria para um Navio em um determinado tempo.

Métodos e fundamentos
Esta função é um ponto essencial na integridade do sistema, dado que esta
é a encarregada da geração da linha do tempo de cada Navio associado a um
Caminho no scheduling, ou seja, esta função determina o estado da posição
do Navio em um tempo determinado, se o Navio fica numa Refinaria, Plata-
forma, em viagem ou se está atracando ou desatracando de uma das duas
mencionadas.
A idéia geral desta função baseia-se no fato que o tempo associado a um
scheduling pode ser discretizado, ou seja se o Horizonte do scheduling é
de uma semana (168 horas), isto pode-se discretizar em intervalos de horas,
dando como resultado um vetor de uma longitude igual a 168, para discretiza-
ção de uma unidade de tempo, onde em cada posição do vetor tem-se um
número que irá determinar o estado do Navio no tempo i, onde i é o índice da
posição no vetor. Agora, como se pode determinar o estado do Navio com um
número? A resposta a esta incógnita é dada devido aos códigos das Refinarias
6.4. FUNÇÃO ESPLATAFORMA 50

e Plataformas além de alguns números que se escolheram para determinar


diferentes estados, estes foram escolhidos como números negativos, mais o
cero, para não ter problemas de réplica com os códigos das Plataforma ou
Refinarias, estes são descritos a seguir:

• Quando um Navio está em viagem atribui-se o conceito 0;

• Quando um Navio está atracando atribui-se o conceito −2;

• Quando um Navio está desatracando atribui-se o conceito −3.

Além destas atribuições numéricas foram adicionadas dois outras:

• Para determinar uma margem de erro, ou seja na vida real um Navio pode
ter demoras que trará modificações no scheduling. Para esta margem de
erro, que chamaremos λ, se utilizou o número −4 ;

• Como se explicou na seção 4.11 um Caminho tem uma hora de início


que pode não necessariamente começar na hora inicial do Scheduling,
então precisa-se de um número que determine qual Caminho ainda não
começou ou que já tenha terminado, uma vez que isto também pode
acontecer, o número associado foi o −5.

O objeto desta função é unicamente ativar a função obtener_secuencia,


como apresentado na seção 6.1, passando como parâmetro o Caminho, para
desta forma obter-se a seqüência que o Navio, associado ao Caminho, deverá
fazer. Logo, obter-se a seqüência com os valores das velocidades do Navio e
o Grafo das distâncias, calcula-se qual o tempo de viagem o Navio de um nó
(Refinaria ou Plataforma) a outro, além disto, como apresentado na seção 4.4,
um Navio está associado a um tempo de atracação e desatracação de cada nó.
Para cada nó obtido será acrescido um tempo λ. O resultado será um vetor,
ou neste caso uma Matriz de uma linha, com a descrição do estado do Navio
na discretização do tempo.

6.4 Função esPlataforma


O objetivo desta função é determinar se um código (número inteiro) dado como
parâmetro corresponde a uma Plataforma em um conjunto de Caminhos da-
dos.
6.5. FUNÇÃO ESREFINERIA 51

Dados de entrada
Os dados de entrada desta função são: um conjunto de Caminhos; um valor
inteiro que determina a quantidade de Caminhos no conjunto dado como
parâmetro; e o código, o qual pretende-se determinar a correspondencia entre
uma Plataforma no conjunto de Caminhos.

Dados de saída
O dado de saída é um valor lógico, o qual será verdadeiro no caso do conjunto
de Caminhos ter uma Plataforma com o código igual ao número dado como
parâmetro.

Métodos e fundamentos
Esta função procura em todos os Caminhos, dados como parâmetros, se al-
guma das Plataformas nestes Caminhos tem o código que coincida com o
número dado como parâmetro.

6.5 Função esRefineria


O objetivo desta função é determinar se um código (numero inteiro) dado como
parâmetro corresponde a uma Refinaria em um conjunto de Caminhos dados.

Dados de entrada
Os dados de entrada desta função são: um conjunto de Caminhos; um valor
inteiro que determina a quantidade de Caminhos no conjunto dado como
parâmetro; e o código corresponde a uma Refinaria neste conjunto de Ca-
minhos.

Dados de saída
O dado de saída é um valor lógico, o qual será verdadeiro para o caso que
o conjunto de Caminhos tenha uma Refinaria com o código igual ao número
dado como parâmetro.
6.6. FUNÇÃO CONFLICTO_NAVIOS 52

Métodos e fundamentos
Esta função procura em todos os Caminhos, dados como parâmetros, se
alguma das Refinarias nestes Caminhos tem o código que coincida com o
número dado como parâmetro.

6.6 Função conflicto_navios


Esta função corresponde à restrição de não haver mais de um Navio em uma
Plataforma ao mesmo tempo.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que irá determinar a quantidade de objetos Caminhos que tem-se
no conjunto; e um objeto Matriz o qual terá o scheduling a ser avaliado pela
restrição.

Dados de saída
O dado de saída desta função é um objeto Matriz com uma linha e três colu-
nas. Na primeira coluna tem-se o tempo em que dois ou mais Navios ficam
na mesma Plataforma, na segunda e terceira posição encontra-se o código dos
Caminhos em que os Navios ficam na mesma Plataforma. No caso de não
haver conflito retorna o mesmo objeto, mas na primeira coluna tem-se o valor
−1.

Métodos e fundamentos
Esta função tem por objetivo percorrer cada coluna da Matriz passada como
parâmetro, a qual contem o scheduling a ser avaliado e identificar se o mesmo
cumpre com a restrição de não haver mais de dois Navios na mesma Plata-
forma ao mesmo tempo. Lembre-se que cada linha da Matriz passada como
parâmetro, a qual contem o scheduling, é o resultado da aplicação da função
cargar_linha _matriz apresentada na seção 6.3 a qual retorna uma matriz
de uma linha e colunas igual ao Horizonte, e que cada coluna representa
uma unidade de tempo, então desta forma pode-se procurar por cada coluna
associada a um código de Plataforma (neste caso é útil a função esPlataforma
apresentada na seção 6.4).Para este caso, observa-se se as mesmas são iguais.
6.7. FUNÇÃO PLATAFORMA_PARADA 53

Se forem iguais retorna-se uma Matriz com uma linha e três colunas, na
primeira tem-se o tempo em que dois ou mais Navios ficam na mesma Pla-
taforma, na segunda e terceira posição encontra-se o código dos Caminhos
em que os Navios ficam na mesma Plataforma. No caso de não haver conflito
retorna o mesmo objeto, mas na primeira coluna temos o valor −1.
Agora surge uma pergunta, que acontece quando tem-se os valores de
atracar, desatracar e λ que se apresentaram na seção 6.3? Para isto primeiro
necesita-se avaliar quais os casos envolvidos:

• Dois ou mais Navios estão no tempo λ;

• Um Navio está atracando em uma Plataforma no momento que outro está


no tempo λ;

• Dois ou mais Navios estão atracando ao mesmo tempo;

• Um Navio está atracando no momento que outro está sendo carregado


em uma Plataforma;

• Um Navio está atracando no momento que outro está desatracando.

Para solucionar estes problemas então identifica-se inicialmente qual a pla-


taforma associada a este Navio e a variável a ele associado no tempo λ, se
está atracando. Se estes valores foram semelhantes retorna a matriz com o
tempo na primeira coluna e os códigos dos Caminhos na segunda e terceira
coluna. Em caso contrário, dos valores não serem iguais, procura-se uma
nova alternativa.

6.7 Função plataforma_parada


Esta função tem como finalidade implementar a restrição que uma Plataforma
não poder armazenar produto, por estar com sua capacidade máxima de ar-
mazenamento, ou seu produto não pode ser procesado nesta unidade de pro-
dução: com isto quer-se dizer que uma Plataforma não pode armazenar mais
que sua capacidade máxima de armazenamento.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que vai determinar a quantidade de objetos Caminhos que há no
conjunto; e um objeto Matriz o qual terá o scheduling que será avaliado pela
restrição.
6.7. FUNÇÃO PLATAFORMA_PARADA 54

Dados de saída
O dado de saída desta função é um objeto Matriz com uma linha e duas colu-
nas. Na primeira coluna tem-se o código da Plataforma que chegou ao máximo
da sua capacidade de armazenamento, e na segunda coluna tem-se o tempo
em que aconteceu este fato. No caso de não haver nenhuma Plataforma asso-
ciada a esta produção, retorna o mesmo objeto, mas na primeira coluna temos
o valor −1.

Métodos e fundamentos
Nesta função inicialmente gera-se um conjunto, sem repetição, das Platafor-
mas que estão em algum Caminho do conjunto de Caminhos dados como
parâmetro. O objetivo é que nesta restrição não se pode considerar os Ca-
minhos por separado, dado que em diferentes Caminhos pode haver mesma
Plataforma e que isto gere Caminhos em separado. Pode acontecer que uma
Plataforma chegue a sua capacidade máxima antes que um novo Caminho
seja concluido.
Depois de obter o conjunto de Plataformas que será associada a um cenário,
o passo seguinte é analizar o estado de todas as Plataforma em cada tempo, ou
seja observa-se na Matriz, que contem o scheduling, passada como parâmetro
e analiza-se da primeira coluna até a ultima desta Matriz, por todas as li-
nhas da mesma, e por cada posição visitada da matriz. Identifica-se se é uma
Plataforma, caso afirmativo, então se resta da quantidade de petróleo dessa
Plataforma, no conjunto sem repetição, a quantidade de petróleo que a mesma
carrega em um Navio em uma unidade de tempo (esta velocidade é dada pelo
atributo v_carrega da classe Plataforma), fazendo referencia à unidade de
tempo com uma unidade da discretização. Uma vez tendo todas as linhas
da Matriz (por cada coluna) incrementa-se a quantidade de petróleo de cada
Plataforma com a quantidade que a plataforma produz em uma unidade de
tempo (esta é dada pelo atributo producao na classe Plataforma). Neste mo-
mento observa-se se a quantidade de petróleo armazenada na Plataforma é
maior que a capacidade máxima da mesma, caso afirmativo, retorna-se uma
Matriz com uma linha e dois colunas, na primeira coluna tem-se o código da
Plataforma e na segunda coluna tem-se o tempo (ou seja o índice da coluna)
em que esta Plataforma chegou ao máximo da sua capacidade de armazena-
mento. No caso de não haver nenhuma Plataforma que chegou ao máximo da
sua capacidade de armazenamento, retorna o mesmo objeto, mas na primeira
coluna tem-se o valor −1.
6.8. FUNÇÃO ATRACARENREFINERIA 55

6.8 Função atracarEnRefineria


Esta função implementa a restrição de que em uma Refinaria não pode ser
permitido que novos Navios sejam atracados nos portos a este associado, além
disto, um Navio poderá atracar ou desatracar em um Pier se a altura da maré
mais a profundidade do Pier é menor que o calado do Navio.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que vai determinar a quantidade de objetos Caminhos que temos
no conjunto; e um objeto Matriz o qual terá o scheduling que será avaliado
pela restrição.

Dados de saída
O dado de saída desta função, é um objeto Matriz de uma linha e três colunas,
onde no caso de não cumprir-se a restrição, retornar na primeira coluna o
código da Refinaria, na segunda coluna o código do Caminho, e na terceira
coluna o tempo em que não pode-se atracar. No caso de cumprir-se a restrição
retorna o mesmo objeto mas na primeira coluna tem um −1.

Métodos e fundamentos
Nesta função o que se faz é percorrer a Matriz, que contem o scheduling
que será avaliado pela restrição, procurando em cada posição da Matriz se
o número que armazena é um código de uma Refinaria (razão esta da imple-
mentação da função esRefineria apresentada na seção 6.5). No caso de uma
coluna ter mais de um código de Refinaria procede-se quase da mesma forma
que na função conflicto_navios, apresentado na seção 6.6, só que nesta
função se for encontrado, numa coluna, dois ou mais códigos de Refinaria
iguais. Isto é realizado observando-se se em uma Refinaria, à qual pertence
o código, tem disponibilidade de Piers para que os dois ou mais Navios po-
dam atracar. Além de disto, avalia-se se os Navios podem atracar nos Piers
ou não invocando a função puedeAtracar apresentada na classe Refinaria na
pagina 33, onde esta função toma como parâmetros o Navio a ser atracado e
o tempo em que deve atracar (que é a coluna). Com a informação do Navio
e o tempo, o método procura em todos os Piers e identifica-se ao menos em
um deles pode atracar, no caso de que nem todos os Navios possam atracar
na Refinaria, retorna-se uma Matriz de uma linha e três colunas, onde na
6.9. FUNÇÃO ESCOJER_COMBINACION 56

primeira coluna tem o código da Refinaria, na segunda coluna o código do


Caminho e na terceira coluna o tempo em que não se pode atracar. No caso de
ter disponibilidade de Piers e que todos os Navios possam atracar retorna-se
a mesma Matriz, mas na primeira coluna tem um −1.

6.9 Função escojer_combinacion


Esta função é encarregada de achar um scheduling em que não exista conflito
dos Navios como apresentado na seção 6.6.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que vai determinar a quantidade de objetos Caminhos que tem-se
no conjunto; e um objeto Grafo o qual no tem-se a informação das distâncias
entre os nós (Refinarias e Plataformas).

Dados de saída
O dado de saída desta função é um objeto Matriz com linhas igual à quan-
tidade de Caminhos que foram dados como parâmetros, e a quantidade de
colunas igual ao Horizonte, cada linha desta matriz será o resultado de ter
aplicado a função cargar_linha_matriz que foi apresentada na seção 6.3.

Métodos e fundamentos
Esta função é a encarregada de procurar um Scheduling que não tenha confli-
tos de Navios. Nesta o que se faz é ir procurando diferentes combinações das
seqüências dos Caminhos até achar uma que não tenha conflito de navios,
para assim avaliar o restante das restrições.
O método usado nesta função baseia-se na teoria da programação GREEDY,
a qual é aquela que, para resolver um determinado problema, segue uma
metaheurística baseada em escolher a opção ótima em cada passo local com a
esperança de chegar a uma solução geral ótima. Normalmente aplica-se aos
problemas de optimização. Os algoritmos GREEDY mais conhecidos são:

Algoritmo de Dijkstra: A idéia neste algoritmo consiste em ir explorando to-


dos os caminhos mais curtos que partem do vértice origem e que levam a
todos os demais vértices; quando obtém-se o caminho mais curto desde
o vértice origem, ao resto de vértices que compõem o grafo, o algoritmo
6.9. FUNÇÃO ESCOJER_COMBINACION 57

detém-se. O algoritmo não funciona em grafos com arestas de custo ne-


gativo.

Algoritmo de Kruskal: O algoritmo de Kruskal é um algoritmo da teoria de


grafos para encontrar uma árvore geradora mínima em um grafo conexo
e ponderado, ou seja que de um nó posso chegar a qualquer outro nó
no grafo e que toda aresta no grafo tenha um custo. Em outras palavras
o algoritmo procura um subconjunto de arestas que, formando uma ár-
vore, incluem todos os vértices e onde o valor total de todas as arestas da
árvore é mínimo.

Algoritmo de Prim: O algoritmo de Prim é um algoritmo da teoria de grafos


para achar uma árvore cobertor mínimo em um grafo conexo e ponde-
rado, não dirigido. Em outras palavras o algoritmo acha um subconjunto
de arestas que formam uma árvore com todos os vértices, onde o peso
total de todas as arestas na árvore é o mínimo possível.

Seguindo a idéia da programação GREEDY e o significado de metaheurís-


tica, a qual vem do griego “Meta”=“mais lá” e “heurística”=“encontrar” o que
interpreta-se como “mais lá que não seja otimo global achar ...”, é que encontra-
se a solução para esta função, a idéia desta solução é, sempre tomar a se-
qüência de distância mínima que cumpra com as restrições, obtendo desta
forma um valor da distância total que se não é ótimo aproxima-se muito a
este. Agora, porque usar um método que pode não dar o ótimo global? A
resposta a isto basea-se na complexidade computacional do problema, dado
que em teoria é possível fazer um algoritmo de backtracking, divide & con-
quers, programação dinâmica ou um modelo matemático, entre outros, que
apresente solução a este problema, mas na hora de implementar isto em um
computador torna-se impossível de calcular, dado que este problema cai em
um problema de NP-Completo (NP-Hard) que segundo a quantidade de dados
é possível chegar a uma solução ou não. Artigos relacionados a complexidade
computacional podem ser encontrados em Hartley (1987), Jones (1997) e Cut-
land (1997). Diante deste fato optou-se por uma metodologia que não fosse
exaustivas como as mencionadas com anterioridade, que se baseara em um
fundamento de escolha, como é o fundamento de escolher sempre a seqüência
da distância mínima.
Alguns conceitos utilizados para fazer a explicação o menos ambígüa pos-
sível, são apresentados a seguir.
Seja C um objeto da classe Caminho e R1, R2, R3 objetos da classe Rota os
quais estão no conjunto de rotas no C, então define-se o nivel da rota R1 no
6.9. FUNÇÃO ESCOJER_COMBINACION 58

Caminho C como NC,R1 e define-se o sucesor do nivel, ou seja o nivel incre-


mentado em um, como SNC,R1 . O nivel da rota é o atributo nivel_en_rutas
da classe Caminho apresentada na seção 4 que determina a linha na matriz
de seqüências de cada rota.
Sejam C1, C2 e C3 três Caminhos e R1, R2, R3, R4, R5 e R6 seis rotas, onde:

• C1 tem as Rotas R1, R3 e R5;

• C2 tem as Rotas R2, R4 e R6;

• C3 tem as rotas R1, R2 e R5.

onde os respectivos níveis nas rotas são:

• C1 tem os seguintes niveis NC1,R1 , NC1,R3 e NC1,R5 ;

• C2 tem os seguintes niveis NC2,R2 , NC2,R4 e NC2,R6 ;

• C3 tem os seguintes niveis NC3,R1 , NC3,R2 e NC3,R5 .

E sejam as seqüências de rotas com distância mínima em cada Caminho como


se apresentou, ou seja:

• No C1 a seqüência de rotas com a distância mínima é R1 → R3 → R5;

• No C2 a seqüência de rotas com a distância mínima é R2 → R4 → R6;

• No C3 a seqüência de rotas com a distância mínima é R1 → R2 → R5.

Então, o conjunto de Caminhos que serão passados como dados de entrada


para esta função serão C1, C2 e C3, e o ordem a ser conduzido no scheduling
que se gera a partir deste conjunto de Caminhos é:

Tabela 6.4: Ordem do conjunto de caminhos

C1 R1 R3 R5
C2 R2 R4 R6
C3 R1 R2 R5

Agora, considera-se que haja conflito entre os Caminhos C1 e C3 na Rota


R1, então, o que se faz, é encontrar a combinação de distância mínima na qual
não exista conflito, e no caso de que todas as combinações tenham conflito,
então pega-se a de menor distância e faze-se recursivamente o mesmo até
chegar a uma combinação sem conflitos. Mas quais são as combinações que
podem ser obtidas? Estas são:
6.9. FUNÇÃO ESCOJER_COMBINACION 59

• Incrementar o nível da Rota que tem conflito no primeiro Caminho e


deixar a Rota do segundo Caminho sem modificação. Então o nível das
Rotas seguindo a ordem das mesmas por cada Caminho seria o seguinte:

Tabela 6.5: Nível de rota 1

C1 SNC1,R1 NC1,R3 NC1,R5


C2 NC2,R2 NC2,R4 NC2,R6
C3 NC3,R1 NC3,R2 NC3,R5

• Incrementar o nível da Rota que tem conflito no segundo Caminho e


deixar a Rota do primeiro Caminho sem modificação. Então o nível das
Rotas seguindo o ordem das mesmas por cada Caminho seria o seguinte:

Tabela 6.6: Nível de rota 2

C1 NC1,R1 NC1,R3 NC1,R5


C2 NC2,R2 NC2,R4 NC2,R6
C3 SNC3,R1 NC3,R2 NC3,R5

• Incrementar o nível da Rota que tem conflito no primeiro e segundo Ca-


minho. Então o nível das Rotas seguindo o ordem das mesmas por cada
Caminho seria o seguinte:

Tabela 6.7: Nível de rota 3

C1 SNC1,R1 NC1,R3 NC1,R5


C2 NC2,R2 NC2,R4 NC2,R6
C3 SNC3,R1 NC3,R2 NC3,R5
Capítulo 7

Estudos de casos

Nesta seção será apresentado um cenário, o qual foi construido com a fina-
lidade de testar o software desenvolvido, não correspondendo a um cenário
real. Nele considerou-se que temos 4 Plataformas, 2 Refinarias, 5 Rotas, 3
Navios os quais tem associados Rotas, para o qual tem-se 3 Caminhos.
Nesta seção será apresentado parte do relatorio final gerado pelo software,
o qual apresenta-se no Apendice A onde pode observar-se com muito mais
detalhes os dados de entrada e saida.

7.1 Dados de entrada

7.1.1 Estado inicial das plataformas


PLATAFORMA 1
Nome: ESPF
Produção: 311 m3 /h
Capacidade máxima de armazenamento: 110000 m3
Hora da última descarga: 0 h
Volume residual de produto no tanque: 100 m3

PLATAFORMA 2
Nome: FPSO-RJ
Produção: 322 m3 /h
Capacidade máxima de armazenamento: 120000 m3
Hora da última descarga: 0 h
Volume residual de produto no tanque: 100 m3

PLATAFORMA 3

60
7.1. DADOS DE ENTRADA 61

Nome: FPSO-FLU
Produção: 333 m3 /h
Capacidade máxima de armazenamento: 130000 m3
Hora da última descarga: 0 h
Volume residual de produto no tanque: 100 m3

PLATAFORMA 4
Nome: FPSO-BR
Produção: 344 m3 /h
Capacidade máxima de armazenamento: 140000 m3
Hora da última descarga: 0 h
Volume residual de produto no tanque: 100 m3

7.1.2 Estado inicial das refinarias


REFINARIA 10
Nome: Refinaria Duque de Caixas
Quantidade de Portos: 1
Cidade: Duque de Caixas
Estado: RJ
Pais: Brasil
Volume inicial: 500 m3

REFINARIA 20
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Volume inicial: 700 m3

7.1.3 Rotas
ROTA 1
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 10 > < P lat : 1 > < P lat : 2 > < P lat : 3 > < P lat : 4 > < Ref _C : 20 >
As quantidades a serem carregadas em cada plataforma são:
7.1. DADOS DE ENTRADA 62

Tabela 7.1: Quantidades carregadas nas plataformas


na rota 1

Na plataforma 1 carrega-se: 3110 m3


Na plataforma 2 carrega-se: 3210 m3
Na plataforma 3 carrega-se: 3310 m3
Na plataforma 4 carrega-se: 3410 m3

ROTA 2
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 20 > < P lat : 1 > < P lat : 3 > < P lat : 4 > < Ref _C : 10 >
As quantidades a serem carregadas em cada plataforma são:

Tabela 7.2: Quantidades carregadas nas plataformas


na rota 2

Na plataforma 1 carrega-se: 4120 m3


Na plataforma 3 carrega-se: 4320 m3
Na plataforma 4 carrega-se: 4420 m3

ROTA 3
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 10 > < P lat : 1 > < P lat : 2 > < P lat : 4 > < Ref _C : 20 >
As quantidades a serem carregadas em cada plataforma são:

Tabela 7.3: Quantidades carregadas nas plataformas


na rota 3

Na plataforma 1 carrega-se: 3130 m3


Na plataforma 2 carrega-se: 3230 m3
Na plataforma 4 carrega-se: 3430 m3

ROTA 4
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 20 > < P lat : 1 > < P lat : 2 > < P lat : 3 > < Ref _C : 10 >
As quantidades a serem carregadas em cada plataforma são:
7.1. DADOS DE ENTRADA 63

Tabela 7.4: Quantidades carregadas nas plataformas


na rota 4

Na plataforma 1 carrega-se: 4140 m3


Na plataforma 2 carrega-se: 4240 m3
Na plataforma 3 carrega-se: 4340 m3

ROTA 5
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 10 > < P lat : 3 > < P lat : 4 > < Ref _C : 20 >
As quantidades a serem carregadas em cada plataforma são:

Tabela 7.5: Quantidades carregadas nas plataformas


na rota 5

Na plataforma 3 carrega-se: 2350 m3


Na plataforma 4 carrega-se: 2450 m3

7.1.4 Navios
NAVIO 1
Descrição: Navio uno
Calado: 18 m
Comprimento: 71.9 m
Velocidade: 11 nós
Vazão de bombeamento do produto: 1100 m3 /h
Tempo de atracacamento:

Tabela 7.6: Tempo de atracamento do navio 1

Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo (h): 1 2 1 1 2 1

Tempo de desatracacamento:

Tabela 7.7: Tempo de desatracamento do navio 1

Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo (h): 1 2 1 1 2 1

Capacidade de carga do navio: 14000 m3


Carga total do navio é: 0 m3
7.1. DADOS DE ENTRADA 64

NAVIO 2
Descrição: Navio dois
Calado: 16 m
Comprimento: 52 m
Velocidade: 12 nós
Vazão de bombeamento do produto: 1200 m3 /h
Tempo de atracamento:

Tabela 7.8: Tempo de atracamento do navio 2

Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 1 2 2 2 2 1

Tempo de desatracamento:

Tabela 7.9: Tempo de desatracamento do navio 2

Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 1 2 2 2 2 1

Capacidade de carga do navio: 24000 m3


Carga total do navio é: 400 m3

NAVIO 3
Descrição: Navio três
Calado: 17 m
Comprimento: 73.9 m
Velocidade: 13 nós
Vazão de bombeamento do produto: 1300 m3 /h
Tempo de atracamento:

Tabela 7.10: Tempo de atracamento do navio 3

Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 2 2 1 1 1 1

Tempo de desatracamento:
7.1. DADOS DE ENTRADA 65

Tabela 7.11: Tempo de desatracamento do navio 3

Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 2 2 1 1 1 1

Capacidade de carga do navio: 18000 m3


Carga total do navio é: 300 m3

7.1.5 Caminhos
CAMINHO 1
Navio associado: Navio 1
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho é: 4 h

CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 6 h

CAMINHO 3
Navio associado a este caminho: Navio 3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h

7.1.6 Distâncias entre as refinarias e plataformas


Grafo com as distâncias entre as refinarias e plataformas
7.2. RESULTADO 66

Tabela 7.12: Matriz de adjacência (G)

10 20 1 2 3 4
10 0 400 101 102 103 104
20 400 0 201 202 203 204
1 101 201 0 120 130 140
2 102 202 120 0 230 240
3 103 203 130 230 0 340
4 104 204 140 240 340 0

7.2 Resultado
Os Caminhos resultantes obtidos do software desenvolvido foram os que estão
apresentados nas tabelas a seguir, junto com o gráfico do scheduling, o qual
se apresenta na Figura 7.1 (na pagina 68). Este gráfico basea-se no Diagrama
de Gantt.

7.2.1 Caminhos resultantes


CAMINHO 1
Navio associado a este caminho: Navio 1
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho: 4 h


A seqüência que o navio 1 segue é apresentado na Tabela 7.13:

Tabela 7.13: Seqüência de plataformas e refinarias


que segue o navio 1 do caminho 1

Desatraca Ref _10


Carrega 3410 m3 P lat_4
Carrega 3210 m3 P lat_2
Carrega 3110 m 3
P lat_1
Carrega 3310 m3 P lat_3
Descarrega-se Ref _20
Desatraca Ref _20
Carrega 4420 m 3
P lat_4
Carrega 4120 m 3
P lat_1
7.2. RESULTADO 67

Carrega 4320 m3 P lat_3


Descarrega-se Ref _10
Desatraca Ref _10
Carrega 3430 m3 P lat_4
Carrega 3130 m 3
P lat_1
Carrega 3230 m3 P lat_2
Descarrega-se Ref _20

Distância total desta seqüência = 1940 mn

CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 6 h


A seqüência que o navio 2 segue é apresentado na Tabela 7.14:

Tabela 7.14: Seqüência de plataformas e refinarias


que segue o navio 2 do caminho 2

Desatraca Ref _20


Carrega 4240 m 3
P lat_2
Carrega 4140 m3 P lat_1
Carrega 4340 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 4420 m 3
P lat_4
Carrega 4120 m3 P lat_1
Carrega 4320 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 3430 m 3
P lat_4
Carrega 3130 m3 P lat_1
Carrega 3230 m 3
P lat_2
Descarrega-se Ref _20

Distância total desta seqüência = 1598 mn


marítimas
Figura 7.1: Diagrama do scheduling de escoamento de petróleo bruto de plataformas

7.2. RESULTADO
Caminhos Scheduling do escoamento de petroleo bruto de plataformas maritimas

Factor lambda
Tempo de Atraco
Tempo de Desatraco
Refinaria 10
Refinaria 20
3 Plataforma 1
Plataforma 2
Plataforma 3
Plataforma 4

0 10 20 30 40 50 60 70 80 90100110120130140150160170180190200210220230240250260270280290300310320330340350360
Horas

68
7.2. RESULTADO 69

CAMINHO 3
Navio associado a este caminho: Navio 3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h


A seqüência que o navio 3 segue é apresentado na Tabela 7.15:

Tabela 7.15: Seqüência de plataformas e refinarias


que segue o navio 3 do caminho 3

Desatraca Ref _10


Carrega 3230 m3 P lat_2
Carrega 3130 m3 P lat_1
Carrega 3430 m 3
P lat_4
Descarrega-se Ref _20
Desatraca Ref _20
Carrega 4340 m3 P lat_3
Carrega 4140 m 3
P lat_1
Carrega 4240 m 3
P lat_2
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 4420 m3 P lat_4
Carrega 4120 m 3
P lat_1
Carrega 4320 m3 P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 2450 m3 P lat_4
Carrega 2350 m 3
P lat_3
Descarrega-se Ref _20

Distância total desta seqüência = 2245 mn


Capítulo 8

Conclusão

Como conclusão desta parte do trabalho pode-se dizer que a metodologia


usada foi satisfatória, obtendo uma solução ao problema em um curto tempo,
dado que a metodologia da resolução não foi exaustiva (método GREEDY). O
scheduling obtido cumpre com as restrições que o sistema demanda, além
disto a saída do software apresenta muitas informações importantes, facili-
tando a comprensão do scheduling e permitindo desta forma avaliar os resul-
tados e até usar estes dados como entrada de outro dados para um cenário.
A escolha da ferramenta foi correta, dado que apresenta resultados satis-
fatórios, e, caso necessite de inserir novas restrições, só é preciso implementar
esta como uma nova função no sistema conseguindo desta forma flexibilidade
e reutilização do sistema como poderá ser observado na próxima seção, onde
o codigo fonte escrito para este software será reutilizado para dar solução ou
problema do Scheduling de atendimento a centros consumidores.

70
Parte III

Scheduling de atendimento a
centros consumidores

71
72

Nesta terceira parte do trabalho, será apresentado o problema de realizar


um scheduling de atendimento a centros consumidores. As refinarias provêem
de diferentes produtos, derivados de petróleo, que devem ser transportados a
diferentes centros consumidores, onde se deve atender uma demanda em um
tempo já especificado.
Para a solução deste problema, tomou-se como ponto de partida o trabalho
de Soletti (2006), no qual se formula um modelo matemático que permite o
planejamento de uma frota de navios que transportam grandes quantidades
de petróleo e seus derivados. O problema principal de que trata o trabalho
apresentado por Soletti é a obtenção de rotas que permitam aos navios a mi-
nimização de custos de logística e de riscos, para o qual utilizaram-se ferra-
mentas clássicas de pesquisa operacional, tentando obter resultados ótimos
ou próximos a este. Neste, desenvolveram-se dois modelos, um para gerar
as rotas viáveis e o outro foi formulado como um problema de Programação
Linear Inteira Mista (PLIM), onde, neste último, leva-se em conta a demanda
dos centros consumidores às refinarias. O modelo proposto, nesse trabalho, é
capaz de identificar, entre um conjunto de navios, qual o melhor e mais capa-
citado para a transportação de produtos petroleiros, assim como também qual
a melhor rota para a viagem em questão, e assim, ter um custo de transpore
mínimo.
A metodologia a ser utilizada nesta seção será semelhante a apresentada
na Parte II, onde, mesmo conhecendo as rotas que um navio deveria seguir,
não se sabia qual a seqüência a ser adotada pelo navio nestas rotas. Além das
restrições já apresentadas, para este problema é necessaria a inclusão de no-
vas restrições relacionadas ao fato que um navio só poderá atracar em um pier
se este possuir profundidade suficiente, se houver disponibilidade, se o calado
do navio, a depender da altura da maré, for suficiente. Estas restrições foram
descritas na seção 4 na classe Refinaria, com o método puedeAtracar. To-
das as demais restrições, assim como o método de solução e ferramentas que
foram utilizados na Parte II, serão também utilizados nesta seção. Algo muito
importante a destacar é que nesta parte do trabalho o conceito de rota seguirá
a mesma estrutura, só que agora uma rota, para o problema de scheduling
de atendimento a centros consumidores, é aquela que começa em uma refi-
naria, passa por um conjunto não vazio de centros consumidores para chegar
à mesma ou outra refinaria.
No desenvolvimento desta parte do trabalho, seguem-se os seguintes pas-
sos:

• Definir o problema;
73

• Introduzir os conceitos prévios, ou seja, redefinir os conceitos de Rota e


Caminho;

• Apresentar as novas classes implementadas e as classes que foram re-


utilizadas e modificadas;

• Apresentar o Diagrama de classes do sistema;

• Explicar como se resolveu o problema;

• Esboçar um cenário para avaliar os resultados do software desenvolvido;

• Conclusão parcial.
Capítulo 9

Problema a resolver

Considerando que um planejamento sobre a entrega de produto, e que cada


navio tem associado um conjunto de rotas nas quais já há determinado a de-
manda a ser entregue em cada centro consumidor, o problema a ser resolvido
consiste em se encontrar a seqüência de refinarias e centros consumidores
que cada navio terá que seguir para minimizar a distância total percorrida por
todos os navios, garantindo que as restrições, que se seguem, sejam satis-
feitas. Estas restrições são:

• Um navio só pode atracar num pier se o calado do mesmo é menor que a


profundidade do pier mais a altura da maré;

• Não é permitido que haja mais de um navio por cada piers ao mesmo
tempo;

• Um centro consumidor tem que ser atendido no tempo determinado pela


demanda, ou seja não pode acontecer que um centro consumidor fique
sem produto em um tempo de planejamento pré-definido.

74
Capítulo 10

Conceitos prévios

No problema para realizar um Scheduling de atendimento a centros consumi-


dores, a idéia de uma rota é basicamente a mesma apresentada na seção 3,
diferenciando no fato que em lugar de ter um conjunto de plataformas maríti-
mas, vai-se ter um conjunto de centros consumidores.
Assim, redefinindo o conceito de rota, pode se dizer que: Uma rota é aquela
que começa em uma refinaria, passa por um conjunto não vazio de centros con-
sumidores para chegar à mesma ou outra refinaria.
Para a obtenção da matriz de todas as possíveis seqüências de centros
consumidores, tem-se a mesma idéia, só que agora vai-se ter códigos que
correspondem a centros consumidores e não a plataformas.
Neste trabalho considerou-se que um navio pode transportar os produ-
tos, a serem entregues aos centros consumidores, em qualquer refinaria, ou
seja, acontece o caso de ter-se duas rotas consecutivas onde as refinarias de
chegada e partida são diferentes. Assim, como apresentado na seção 6.1, um
produto é transportado de uma refinaria a outra, ou de volta para a mesma,
passando por um ou vários centros consumidores através de rotas, que podem
ser iguais ou não. Este conceito de caminho é semelhante ao apresentado na
Parte II. É por esta razão que o conceito de caminho para este problema, não
muda.
Na seguinte seção serão apresentadas novas classes específicas deste pro-
blema. As demais serão as mesmas apresentadas na seção 4 e não mudaram.

75
Capítulo 11

Classes

Nesta seção serão apresentadas as classes que pertencem ao sistema as quais


tiveram que ser alteradas com respeito ao sistema apresentado na Parte II
além das novas classes incorporadas no sistema. Nas classes alteradas, só
serão apresentadas as mudanças realizadas assim como sua justificativa.

Classe Refinaria
Esta classe apresenta, Figura 11.1, no novo sistema, uma refinaria que tem
que prover aos centros consumidores, pelo fato que agora uma refinaria re-
aliza a tarefa de abastecer os navios e não mais receber produtos. Assim, foi
incorporado mais um atributo (VelCarga) o qual contém a velocidade com a
qual se carrega os produtos a serem transportados nos navios, das refinarias
aos centros consumidores, e além deste atributo, foram implementados dois
métodos de manipulação das informações, chamadas de getVelCarga para
obter a informação do atributo e setVelCarga para adicionar a informação
no atributo.

Classe CConsumidor
Esta classe tem por objetivo incorporar ao sistema dados de armazenamento
dos objetos que irão representar os centros consumidores. Ela tem um com-
portamento parecido com o da classe Refinaria, dado que nela consta um
conjunto de portos, fato este necessario, pois considera-se que um centro
consumidor pode ter mais de um porto associado, esta é a causa principal do
desenvolvimento deste modelo, o qual pode-se adaptar a um maior número de
cenários possíveis.

76
77

Refinaria
 codigo : int
 nome : string
 cidade : string
 estado : string
 pais : string
 VelCarga : float
 descargado : float
 quantidadePortos : int
 portos : Porto*
+ iniciar(codP : int, nP : string, cP : string, estP : string, paisP : string)
+ getCodigo() : int
+ getNome() : string
+ getCidade() : string
+ getEstado() : string
+ getPais() : string
+ getPorto(i : int) : Porto
+ getVelCarga() : float
+ getDescargado() : float
+ getQuantidadePortos() : int
+ getCantPiers() : int
+ setCodigo(cod : int)
+ setNome(nomeP : string)
+ setCidade(cidadeP : string)
+ setEstado(estadoP : string)
+ setPais(paisP : string)
+ setVelCarga( : float)
+ setDescargado(des : float)
+ addPorto(port : Porto)
+ puedeAtracar(n : Navio, t : int) : bool
+ print()
+ printLatex()

Figura 11.1: Classe Refinaria


78

CConsumidor
 codigo : int
 nome : string
 cidade : string
 estado : string
 pais : string
 portos : Porto*
 quantidadePortos : int
 demanda : float
 HoraUD : int
 resto : float
 descargado : float
+ iniciar(codP : int, nP : string, cidP : string, estP : string, paisP : string, dem : float, tem : float)
+ getCodigo() : int
+ getNome() : string
+ getCidade() : string
+ getEstado() : string
+ getPais() : string
+ getPorto(i : int) : Porto
+ getDescargado() : float
+ getQuantidadePortos() : int
+ getCantPiers() : int
+ getHoraUD() : int
+ getResto() : float
+ getDemanda() : float
+ setCodigo(cod : int)
+ setNome(nomeP : string)
+ setCidade(cidadeP : string)
+ setEstado(estadoP : string)
+ setPais(paisP : string)
+ setDescargado( : float)
+ addPorto(port : Porto)
+ setHoraUD(t : int)
+ setResto(res : float)
+ setDemanda(dem : float)
+ puedeAtracar(n : Navio, t : int) : bool
+ print()
+ printLatex()

Figura 11.2: Classe CConsumidor


79

Na classe CConsumidor, apresentada na Figura 11.2, os atributos são: o


código (codigo) o qual vai a determinar o centro consumidor, sendo este,
único; o nome (nome); a cidade na qual o navio se encontra (cidade); o estado
no qual se encontra (estado); o país (pais); o conjunto de portos (portos);
a quantidade de portos no conjunto portos (quantidadePortos); a demanda
(demanda); a hora da última descarga dos navios (HoraUD) ou como também
pode ser chamada da hora do último atendimento ao centro consumidor; o
resto do último atendimento (resto) ou para dize-lo de outra maneira, a quan-
tidade de produto que tem o centro consumidor depois da entrega do último
atendimento do navio; e a quantidade total do produto descarregado no centro
consumidor (descargado). Os métodos implementados como get_Atributo
são os que permitem obter a informação do atributo, e set_Atributo, os que
permitem adicionar informação no atributo, e os que permitem imprimir a
informação da classe, são: o método getCantPiers o qual retorna a quan-
tidade de Piers associados a este centro consumidor, ou seja, é a soma dos
Piers pertencentes aos Portos associados aos centros consumidores; o método
que determina se um navio pode atracar ou não neste centro consumidor, este
método (puedeAtracar) toma como parâmetros o navio (n) e o tempo (t), com
as informação respetivas, o método procura em todos os portos, do conjunto
portos, e olha se, ao menos, um deles pode atracar procurando em todos os
piers destes portos; 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
demanda (dem) e a quantidade de produto que o centro consumidor possui no
inicio (tem).

Classe Rota
Nesta classe, com relação ao apresentado na seção 4, (página 35) as platafor-
mas são subsituidas por centros consumidores. Assim se tem um conjunto de
centros consumidores (cconsumidores) e um atributo que determina a quan-
tidade de centros consumidores deste conjunto (CCC), e um atributo que irá
determinar a quantidade de produto que o navio tem ao descarregar em cada
centro consumidor associado a uma rota, este atributo é descarrega. Os
outros atributos são os mesmos que na classe Rota apresentada na Parte II.
Além dos métodos descritos na seção 4 (página 35), incorporam-se: um
método que permite imprimir a informação da classe, dado que agora a infor-
mação desta é diferente; e um método que permite determinar se um número
dado como parâmetro corresponde a um centro consumidor (esCConsumi-
80

Rota
 codigo : int
 retardo : int
 partida : Refinaria
 llegada : Refinaria
 cconsumidores : CConsumidor*
 descarrega : float*
 secuencias : Matriz
 CCC : int
+ iniciar(cod : int)
+ getCodigo() : int
+ getRetardo() : int
+ getPartida() : Refinaria
+ getChegada() : Refinaria
+ getCConsumidor(i : int) : CConsumidor
+ getDescarrega(nodo : int) : float
+ getSecuencias() : Matriz
+ setRetardo(r : int)
+ setPartida(RP : Refinaria)
+ setChegada(RC : Refinaria)
+ addCConsumidor(p : CConsumidor)
+ setDescarrega(des : float, nodo : int)
+ generar_secuencias(dist : Grafo) : Matriz
+ getDistancia(i : int) : int
+ getCantNodos() : int
+ sePuedeIncrementar(inc : int) : bool
+ esCConsumidor(cod : int) : bool
+ print()
+ printLatex()

Figura 11.3: Classe Rota


81

dor).

Classe Caminho
Nesta classe (Figura 11.4) a única modificação refere-se às funções que con-
têm as plataformas trocando estas por funções que contêm centros consumi-
dores. Estas funções são: o método getCConsumidor o qual retorna o centro
consumidor (CConsumidor) cujo código coincide com o número passado como
parâmetro. O CConsumidor tem que pertencer a alguma Rota no Caminho,
caso contrário retorna o código −1; o método es_CConsumidor retorna um
número que representa um parâmetro que coincide com o código de algum
CConsumidor associado às Rotas do Caminho; o método obtener_secuencia
_del_camino retorna uma matriz, que na segunda linha representa a seqüên-
cia dos centros consumidores e refinarias associadas ao Caminho, baseando-
se nos níveis da seqüência de cada Rota e no nível da seqüência de rotas.
Na primeira linha tem-se a quantidade a ser transportada para cada centro
consumidor, a qual é determinada pela segunda linha na mesma coluna, para
uma Refinaria determina-se a quantidade que o Navio irá carregar até os cen-
tros consumidores.
82

Caminho
 codigo : int
 distancias : Grafo
 nav : Navio
 rutas : Rota*
 CR : int
 hora_inicio : int
 nivel_en_ruta : int*
 seq_rutas : Matriz
 nivel_en_seq_rutas : int
+ iniciar(cod : int, n : Navio, hora_ini : int, dist : Grafo)
+ getCodigo() : int
+ getRutaPos(pos : int) : Rota
+ getPosRuta(r : Rota) : int
+ getRuta(cod : int) : Rota
+ getNivelRuta(rut : Rota) : int
+ getNivelRutaPos(pos : int) : int
+ getHoraInicio() : int
+ getNavio() : Navio
+ getSeqRutas() : Matriz
+ getCantRutas() : int
+ getDistanciaTotal() : int
+ getCConsumidor(cod : int) : CConsumidor
+ getRefineria(cod : int) : Refinaria
+ getNivelSeqRuta() : int
+ getRutaPosSeq(pos_seq : int) : Rota
+ setCodigo(cod : int)
+ addRuta(rut : Rota)
+ setNivelRuta(rut : Rota, nivel : int)
+ setHoraInicio(t_inicio : int)
+ setNavio(n : Navio)
+ incSeqRutas()
+ decSeqRutas()
+ es_CConsumidor(cod : int) : bool
+ es_refineria(cod : int) : bool
+ sePuedeIncrementar() : bool
+ generar_secuencias() : Matriz
+ obtener_secuencia_del_camino() : Matriz
+ getGrafo() : Grafo
+ refineria_inicial(codigo : int, pos_seq : int) : bool
+ print()
+ printLatex()

Figura 11.4: Classe Caminho


Capítulo 12

Diagrama de classes

O diagrama de classes que apresenta como interagem as classes do sistema,


além de esclarecer a base da construção do software do sistema, é o que se
apresenta na Figura 12.1, estando representado por: um Porto composto por
um conjunto de Piers; uma Refinaria composta por um conjunto de Portos;
um CConsumidor composto por um conjunto de Portos; uma Rota composta
por duas Refinarias, uma de partida e outra de chegada, um conjunto de
CConsumidores e uma Matriz que determina as possíveis seqüências; um
Navio composto por um conjunto de Compartimentos e duas matrizes, uma
que determina o tempo de descarregamento e outra que determina o tempo
de atracamento do Navio das Refinarias e CConsumidores associados a um
Cenário; uma Frota composta por um conjunto de Navios; um Grafo com-
posto por uma Matriz, que é a matriz de adjacência do mesmo; e um Caminho
composto por um conjunto de Rotas, uma Matriz que determina as possíveis
seqüências de Rotas no Caminho, um Grafo com as distâncias e um Navio que
esta associado às Rotas no conjunto de Rotas do Caminho.

83
84

Frota Navio
 codigo : int  codigo : int
 descricao : string  descricao : string
+navios
 navios : Navio*  calado : float
 CN : int  comprimento : float
 velocidade : float
 t_atraco : Matriz
+nav  t_desatraco : Matriz
 v_descarrega : int
 comp : Compartimento*
Caminho  quantidadeComp : int
 codigo : int
 distancias : Grafo
 nav : Navio Grafo
 nodos : int +comp
 rutas : Rota*
 nivel_en_ruta : int*
distancias
 aristas : Matriz Compartimento
 CR : int  CN : int  codigo : int

 hora_inicio : int  capacidade : float

 seq_rutas : Matriz  tipoProduto : int

 nivel_en_seq_rutas : int  quantidadeProduto : float

seq_rutas
+aristas
Piers
+t_atraco
 codigo : int
Matriz  profundidade : float
 MaxX : int
+t_desatraco  largo : float
 MaxY : int
+secuencias  cumprimento : float
 pMatriz : int*
Rota +marea  ocupado : bool

 codigo : int
+piers
 retardo : int
 partida : Refinaria
 llegada : Refinaria
+cconsumidores
Porto
 cconsumidores : CConsumidor*  codigo : int
 descarrega : float*
CConsumidor  nome : string
 secuencias : Matriz  cidade : string
 codigo : int
 CCC : int  estado : string
 nome : string
 cidade : string +portos  pais : string

 estado : string  quantidadePiers : int

 pais : string  marea : Matriz


+partida
 portos : Porto*  piers : Piers*
+llegada
 quantidadePortos : int  MM : float
Refinaria  demanda : float  amplitud : float
 codigo : int  HoraUD : int
 nome : string +portos
 resto : float
 cidade : string  descargado : float
 estado : string
 pais : string
 VelCarga : float
 descargado : float
 quantidadePortos : int
 portos : Porto*

Figura 12.1: Diagrama de Classes do Sistema


Capítulo 13

Funções para a solução do


problema

Nesta seção serão apresentadas as funções que foram utilizadas na resolução


do problema de realizar um scheduling de atendimento a centro consumido-
res. Para solucionar este problema, reutilizou-se parte do código usado para
a Parte II deste trabalho,assim serão apresentados somente os dados de en-
trada e saída de cada função uma vez que os métodos e fundamentos já foram
descritos anteriormente.

13.1 Função obtener_secuencia


O objetivo desta função é obter a seqüência total que um Navio, associado a
um Caminho, deverá fazer.

Dados de entrada
O dado de entrada desta função é um objeto Caminho.

Dados de saída
O dado de saída desta função é um objeto Matriz, o qual tem duas linhas e
colunas iguais ao somatório de todos os CConsumidores e Refinarias de cada
Rota. Na segunda linha encontram-se os códigos dos CConsumidores ou Refi-
narias aos quais o Navio associado ao Caminho terá que atracar, e na primeira
linha tem-se a quantidade de produto que o Navio tem que descarregar, se o
código que se corresponde com a coluna na segunda linha for um CConsu-
midor, ou carregar se o código que se corresponde com a coluna na segunda
linha for uma Refinaria.

85
13.2. FUNÇÃO IMPRIMIRRESULTADO 86

13.2 Função ImprimirResultado


O objetivo desta função é a geração de um relatório final, onde é apresentado
o resultado final do scheduling, informando quais foram os estados finais das
Refinarias, CConsumidores, Navios e Caminhos do sistema. Um relatório ge-
rado pelo software é apresentado no Apendice B, este relatório corresponde ao
resultado do Cenário apresentado na seção 14.

Dados de entrada
Os dados de entrada desta função são: um conjunto de Caminhos, obtidos no
problema de planejamento e cumprem todas as restrições importantes do pro-
blema; o mesmo conjunto de Caminhos, mas sem serem tratados; um valor in-
teiro que determina a quantidade de objetos Caminho que tem-se no primeiro
ou segundo conjunto; e um objeto Matriz, o qual armazena o scheduling que
cumpre com todas as restrições.

Dados de saída
Gera os arquivos necessários para o relatório final, tex e outros arquivos com
extensão R.

13.3 Função cargar_linha_matriz


Esta função tem como objetivo a geração de um objeto Matriz, de uma linha e
a quantidade de colunas igual ao Horizonte (que é o tempo limite do schedul-
ing), o qual descreve a posição do Navio, em um tempo especifico.

Dados de entrada
Os dados de entrada desta função são: o Caminho percorrido em função do
tempo e o Grafo de distância.

Dados de saída
O dado de saída desta função é um objeto Matriz, de uma linha e o número
de colunas que representa o Horizonte que almacena a posição do navio no
percorrer do tempo.
13.4. FUNÇÃO ESCCONSUMIDOR 87

13.4 Função esCConsumidor


O objetivo desta função é determinar se um código dado como parâmetro co-
rresponde a um CConsumidor em um conjunto de Caminhos dados.

Dados de entrada
Os dados de entrada desta função são: um conjunto de Caminhos; um valor
inteiro que determina a quantidade de Caminhos no conjunto dado como
parâmetro; e o código, que será avaliado para determinar se corresponde a
um CConsumidor neste conjunto de Caminhos.

Dados de saída
O dado de saída é um valor de verdade, o qual vai ser verdadeiro no caso do
conjunto de Caminhos ter um CConsumidor com o código igual ao número
dado como parâmetro.

Métodos e fundamentos
Esta função procura em todos os Caminhos, dados como parâmetros, se ex-
iste algum centro consumidor (CConsumidor) nestes Caminhos que tenha um
código que coincida com o número dado como parâmetro.

13.5 Função esRefineria


O objetivo desta função é determinar se um código (número inteiro) dado como
parâmetro corresponde a uma Refinaria em um conjunto de Caminhos dados.

Dados de entrada
Os dados de entrada desta função são: um conjunto de Caminhos; um valor
inteiro que determina a quantidade de Caminhos no conjunto passado como
parâmetro; e o código ao qual quer-se determinar a correspondencia de uma
Refinaria neste conjunto de Caminhos.

Dados de saída
O dado de saída é um valor de verdade, o qual vai ser verdadeiro no caso do
conjunto de Caminhos ter uma Refinaria com o código igual ao número dado
13.6. FUNÇÃO CONFLICTO_NAVIOS 88

como parâmetro.

13.6 Função conflicto_navios


Esta função é a implementação da restrição onde um navio só pode atracar
em um pier se o calado deste é menor que a profundidade do pier mais a altura
da maré, além do fato que deste pier estar disponível, ou seja não pode haver
outro navio atracado, atracando ou desatracando naquele período de tempo.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que determina a quantidade de objetos Caminhos que se tem no
conjunto; e um objeto Matriz o qual terá o scheduling que será avaliado pela
restrição.

Dados de saída
O dado de saída desta função é um objeto Matriz com uma linha e três co-
lunas. Na primeira coluna tem-se o tempo do conflito, na segunda e ter-
ceira posição encontra-se o código dos Caminhos onde existem conflitos com
os Navios. No caso de não haver conflito retorna o mesmo objeto, mas na
primeira coluna tem-se o valor −1.

13.7 Função cconsumidore_parado


Esta função tem como finalidade implementar a restrição onde um CConsu-
midor não pode ficar sem produto fornecido pelas Refinarias.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho;
um valor inteiro que determina a quantidade de objetos Caminhos que há no
conjunto; e um objeto Matriz o qual terá o scheduling que será avaliado pela
restrição.
13.7. FUNÇÃO CCONSUMIDORE_PARADO 89

Dados de saída
O dado de saída desta função é um objeto Matriz com uma linha e duas colu-
nas, na primeira coluna tem-se o código do centro consumidor (CConsumidor)
que ficou sem produto, e na segunda coluna tem-se o tempo em que o CCon-
sumidor ficou sem produto. No caso de não haver nenhum CConsumidor
que ficou sem produto, retorna-se o mesmo objeto, mas na primeira coluna
assume-se o valor −1.

Métodos e fundamentos
Nesta função inicialmente gera-se um conjunto, sem repetição, dos centros
consumidores (CConsumidor) que estão em algum Caminho do conjunto de
Caminhos dados como parâmetro. O motivo deste procedimento é pelo fato
que nesta restrição não pode haver Caminhos por separado, ou seja, em di-
ferentes Caminhos pode existir o mesmo CConsumidor e isto produz que se
considera-se por separado estes Caminho, pode acontecer que um CConsumi-
dor fique sem produto neste Caminho, mas em outro, esse mesmo CConsu-
midor foi atendido em um tempo anterior, e desta forma não teria ficado sem
produto, pelo qual não teria conflito.
Depois de obtido o conjunto de CConsumidores associados a este cenário,
o passo seguinte é observar se há conflito durante a operação com relação ao
tempo, ou seja, observa-se na Matriz, que contém o scheduling, dada como
parâmetro e analiza-se da primeira coluna até a última desta Matriz, em to-
das as linhas da mesma, e para cada posição visitada da Matriz, observa-se
se é um CConsumidor, e assim o sendo, adiciona-se na quantidade de pro-
duto transportado a este CConsumidor, no conjunto sem repetição, a quan-
tidade de produto que o Navio descarrega em uma unidade de tempo (isto
é calculado atributo v_descarrega na classe Navio), fazendo referência a
unidade de tempo com uma unidade da discretização. Uma vez avaliadas
toas as linhas da Matriz (por cada coluna) decrementa-se a quantidade de
produto de cada CConsumidor com a quantidade que o CConsumidor con-
sume em uma unidade de tempo (este consumo é dado pelo atributo demanda
na classe CConsumidor). Nesta etapa observa-se se a quantidade de produto
armazenado no CConsumidor é menor que zero, e para este caso, retorna-
se uma Matriz com uma linha e dois colunas. Na primeira coluna tem-se o
código do CConsumidor, que ficou sem produto, e na segunda coluna tem-se
o tempo (ou seja o índice da coluna) em que isto aconteceu. No caso de não
haver nenhum CConsumidor sem produto, retorna o mesmo objeto, mas na
13.8. FUNÇÃO ATRACARENREFINERIA 90

primeira coluna tem-se o valor −1.

13.8 Função atracarEnRefineria


Esta função implementa a restrição que em uma Refinaria não podem ficar
atracados mais Navios que o permitido pelos Portos a esta associados, além
disto, um Navio só poderá atracar ou desatracar em um Piers se a altura da
maré, mais a profundidade do Piers for menor que o calado do Navio.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que vai determinar a quantidade de objetos Caminhos que tem-se
no conjunto; e um objeto Matriz o qual tem-se o scheduling que será avaliado
pela restrição.

Dados de saída
O dado de saída desta função, é um objeto Matriz de uma linha e três colunas,
onde no caso de não cumprir-se a restrição retornar-se na primeira coluna o
código da Refinaria na que não pode atracar, na segunda coluna o código do
Caminho em que não pode atracar na Refinaria, e na terceira coluna o tempo
em que não pode atracar. No caso de cumprir-se a restrição retorna o mesmo
objeto mas na primeira coluna tem um −1.

13.9 Função escojer_combinacion


Esta função é a encarregada de achar um Scheduling em que não tenha-se o
conflito dos Navios que se apresentaram na seção 13.6.

Dados de entrada
Os dados de entrada desta função são: um conjunto de objetos Caminho; um
valor inteiro que irá determinar a quantidade de objetos Caminhos que tem-se
no conjunto; e um objeto Grafo o qual terá a informação das distâncias entre
os nós (Refinarias e CConsumidores).
13.9. FUNÇÃO ESCOJER_COMBINACION 91

Dados de saída
O dado de saída desta função é um objeto Matriz com linhas iguais à quan-
tidade de Caminhos que foram passados como parâmetros, e a quantidade
de colunas igual ao Horizonte, cada linha desta matriz será o resultado da
aplicação da função cargar_linha_matriz, apresentada na seção 13.3.
Capítulo 14

Estudo de casos

Nesta seção será apresentado um cenário, o qual foi construído com a fina-
lidade de testar o software desenvolvido. O cenário avaliadonão corresponde
a um cenário real e os dados foram escolhidos objetivando avaliar as inter-
relações entre variáveis e soluções obtidas. Nele considera-se a existencia de
4 CConsumidores, 2 Refinarias, 5 Rotas, 3 Navios os quais tem associados
Rotas, pelo qual há 3 Caminhos.
Nesta seção só será apresentada parte do relatorio final gerado pelo soft-
ware, o qual apresenta-se no Apendice B, onde pode se avliar com muito mais
detalhe os dados de entrada e saída obtidos.

14.1 Dados de Entrada

14.1.1 Estado inicial dos Centros Consumidores


CENTRO CONSUMIDOR 10
Nome: Centro Consumidor de Maceió
Quantidade de Portos: 1
Cidade: Maceió
Estado: Alagoas
Pais: Brasil
Demanda: 110 m3 /h
Volume inicialmente disponível: 35100 m3
Porto 100. Este Porto tem 2 piers:

• pier 1

• pier 2

92
14.1. DADOS DE ENTRADA 93

CENTRO CONSUMIDOR 20
Nome: Centro Consumidor de Recife
Quantidade de Portos: 1
Cidade: Recife
Estado: Pernambuco
Pais: Brasil
Demanda: 120 m3 /h
Volume inicialmente disponível: 35200 m3
Porto 200. Este Porto tem 2 Piers:

• pier 3

• pier 4

CENTRO CONSUMIDOR 30
Nome: Centro Consumidor de Fortaleza
Quantidade de Portos: 1
Cidade: Fortaleza
Estado: Ceara
Pais: Brasil
Demanda: 130 m3 /h
Volume inicialmente disponivel: 35300 m3
Porto 300. Este Porto tem 2 Piers:

• pier 5

• pier 6

CENTRO CONSUMIDOR 40
Nome: Centro Consumidor de Rio de Janeiro
Quantidade de Portos: 1
Cidade: Rio de Janeiro
Estado: Rio
Pais: Brasil
Demanda: 140 m3 /h
Volume inicialmente disponivel: 35400 m3
Porto 400. Este Porto tem 2 piers:

• pier 7

• pier 8
14.1. DADOS DE ENTRADA 94

14.1.2 Estado inicial das refinarias


REFINARIA 60
Nome: Refinaria Duque de Caixas
Quantidade de Portos: 1
Cidade: Duque de Caixas
Estado: RJ
Pais: Brasil
Porto 600.
Este Porto tem 2 piers:

• pier 11

• pier 12

REFINARIA 70
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Porto 700.
Este Porto tem 2 piers:

• pier 13

• pier 14

14.1.3 Rotas
ROTA 1
As refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores
(CC) que compõem esta rota são:
< Ref _S : 60 > < CC : 10 > < CC : 20 > < CC : 30 > < CC : 40 > < Ref _C : 70 >
A quantidade a ser transportada para cada centro consumidor é:

Tabela 14.1: Descargas nos centros consumidores na


rota 1

No centro consumidor 10 descarrega-se: 3110 m3


No centro consumidor 20 descarrega-se: 3210 m3
No centro consumidor 30 descarrega-se: 3310 m3
No centro consumidor 40 descarrega-se: 3410 m3
14.1. DADOS DE ENTRADA 95

ROTA 2
As refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores
(CC) que compõem esta rota são:
< Ref _S : 70 > < CC : 10 > < CC : 30 > < CC : 40 > < Ref _C : 60 >
A quantidade a ser tranportada para cada centro consumidor é:

Tabela 14.2: Descargas nos centros consumidores na


rota 2

No centro consumidor 10 descarrega-se: 4120 m3


No centro consumidor 30 descarrega-se: 4320 m3
No centro consumidor 40 descarrega-se: 4420 m3

ROTA 3
As refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores
(CC) que compõem esta rota são:
< Ref _S : 60 > < CC : 10 > < CC : 20 > < CC : 40 > < Ref _C : 70 >
A quantidade a ser transportada para cada centro consumidor é:

Tabela 14.3: Descargas nos centros consumidores na


rota 3

No centro consumidor 10 descarrega-se: 3130 m3


No centro consumidor 20 descarrega-se: 3230 m3
No centro consumidor 40 descarrega-se: 3430 m3

ROTA 4
As refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores
(CC) que compõem esta rota são:
< Ref _S : 70 > < CC : 10 > < CC : 20 > < CC : 30 > < Ref _C : 60 >
A quantidade que tem-se que descarregar em cada centro consumidor é:

Tabela 14.4: Descargas nos centros consumidores na


rota 4

No centro consumidor 10 descarrega-se: 4140 m3


No centro consumidor 20 descarrega-se: 4240 m3
No centro consumidor 30 descarrega-se: 4340 m3

ROTA 5
As refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores
(CC) que compõem esta rota são:
14.1. DADOS DE ENTRADA 96

< Ref _S : 60 > < CC : 30 > < CC : 40 > < Ref _C : 70 >
A quantidade que tem-se que descarregar em cada centro consumidor é:

Tabela 14.5: Descargas nos centros consumidores na


rota 5

No centro consumidor 30 descarrega-se: 2350 m3


No centro consumidor 40 descarrega-se: 2450 m3

14.1.4 Navios
NAVIO 1
Descrição: Navio uno
Calado: 15 m
Comprimento: 71.9 m
Velocidade: 11 nós
Velocidade de descarrega: 1100 m3 /h
Tempo de atracamento:

Tabela 14.6: Tempo de atracamento do navio 1

Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 1 2 1 2

Tempo de desatracamento:

Tabela 14.7: Tempo de desatracamento do navio 1

Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 1 2 1 2

Capacidade de carga do navio: 23040 m3


Carga inicial do navio: 0 m3

NAVIO 2
Descrição: Navio dois
Calado: 14 m
Comprimento: 52 m
Velocidade: 12 nós
Velocidade de descarga: 1200 m3 /h
Tempo de atracamento:
14.1. DADOS DE ENTRADA 97

Tabela 14.8: Tempo de atracamento do navio 2

Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 2 2 1 1

Tempo de desatracamento:

Tabela 14.9: Tempo de desatracamento do navio 2

Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 2 2 1 1

Capacidade de carga do navio: 40940 m3


Carga inicial do navio: 400 m3

NAVIO 3
Descrição: Navio três
Calado: 13 m
Comprimento: 73.9 m
Velocidade: 13 nós
Velocidade de descarga: 1300 m3 /h
Tempo de atracamento:

Tabela 14.10: Tempo de atracamento do navio 3

Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 2 2 1 1 1 1

Tempo de desatracamento:

Tabela 14.11: Tempo de desatracamento do navio 3

Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 2 2 1 1 1 1

Capacidade de carga do navio: 29600 m3


Carga inicial do navio: 300 m3
14.1. DADOS DE ENTRADA 98

14.1.5 Caminhos
CAMINHO 1
Navio associado a este caminho: Navio 1
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho: 0 h

CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho são:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 0 h

CAMINHO 3
Navio associado a este caminho: Navio 3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h

14.1.6 Distâncias entre as refinarias e centros consumido-


res
Grafo com as distâncias entre as refinarias e centros consumidores

Tabela 14.12: Matriz de adjacência (G)

60 70 10 20 30 40 50
60 0 400 101 102 103 104 105
70 400 0 201 202 203 204 205
10 101 201 0 120 130 140 150
20 102 202 120 0 230 240 250
30 103 203 130 230 0 340 350
14.2. RESULTADO 99

40 104 204 140 240 340 0 450


50 105 205 150 250 350 450 0

14.2 Resultado
Os caminhos resultantes que retornou o software foram os que são apre-
sentados a seguir, juntamente com o gráfico do scheduling, apresentado na
Figura 14.1, na página 100.

14.2.1 Caminhos resultantes


CAMINHO 1
Navio associado a este caminho: Navio 1
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho: 0 h Seqüência que o navio 1 segue:

Tabela 14.13: Seqüência de centros consumidores e


refinarias que segue o navio 1 do caminho 1

Carrega-se Ref _70


Descarrega 4420 m3 CC_40
Descarrega 4320 m 3
CC_30
Descarrega 4120 m3 CC_10
Atraca Ref _60
Carrega-se Ref _60
Descarrega 3430 m3 CC_40
Descarrega 3130 m 3
CC_10
Descarrega 3230 m3 CC_20
Atraca Ref _70
Carrega-se Ref _70
Descarrega 3410 m 3
CC_40
Descarrega 3210 m 3
CC_20
Descarrega 3110 m3 CC_10
Descarrega 3310 m 3
CC_30
Atraca Ref _70
14.2. RESULTADO
Caminhos Scheduling do Atendimento a Centros Consumidores
Figura 14.1: Diagrama do scheduling do atendimento a centros consumidores

Factor lambda
Tempo de Atraco
Tempo de Desatraco
Refinaria 60
Refinaria 70
3 Centro Consumidor 10
Centro Consumidor 20
Centro Consumidor 30
Centro Consumidor 40

100
0 10 20 30 40 50 60 70 80 90 100110120130140150160170180190200210220230240250260270280290300310320
Horas
14.2. RESULTADO 101

Distância total desta seqüência = 2238 mn


CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 0 h


Seqüência que o navio 2 segue:

Tabela 14.14: Seqüência de centros consumidores e


refinarias que segue o navio 2 do caminho 2

Carrega-se Ref _70


Descarrega 4340 m3 CC_30
Descarrega 4240 m3 CC_20
Descarrega 4140 m 3
CC_10
Atraca Ref _60
Carrega-se Ref _60
Descarrega 4420 m3 CC_40
Descarrega 4120 m 3
CC_10
Descarrega 4320 m 3
CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 3430 m3 CC_40
Descarrega 3130 m 3
CC_10
Descarrega 3230 m3 CC_20
Atraca Ref _70

Distância total desta seqüência = 1697 mn


CAMINHO 3
Navio asociado a este caminho: Navio 3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h


Seqüência que o navio 3 segue:
14.2. RESULTADO 102

Tabela 14.15: Seqüência de centros consumidores e


refinarias que segue o navio 3 do caminho 3

Carrega-se Ref _60


Descarrega 3430 m3 CC_40
Descarrega 3130 m3 CC_10
Descarrega 3230 m 3
CC_20
Atraca Ref _70
Carrega-se Ref _70
Descarrega 4340 m3 CC_30
Descarrega 4140 m 3
CC_10
Descarrega 4240 m3 CC_20
Atraca Ref _60
Carrega-se Ref _60
Descarrega 4420 m3 CC_40
Descarrega 4120 m 3
CC_10
Descarrega 4320 m3 CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 2450 m3 CC_40
Descarrega 2350 m 3
CC_30
Atraca Ref _70

Distância total desta seqüência = 2245 mn


Capítulo 15

Conclusão

Como conclusão desta parte do trabalho pode-se dizer que a metodologia


adaptada foi satisfatória, obtendo uma solução ao problema em um tempo
curto de compilação, dado que a metodologia da resolução não foi exaustiva,
mas sim foi baseada em um método GREEDY. O scheduling obtido cumpre
com as restrições que o sistema demanda, além disto a saída do software apre-
senta muitas informações importantes, facilitando à compreensão do schedul-
ing e permitindo desta forma avaliar os resultados.
Através do procedimento adatado é possível, caso haja necessidade a adição
de novas restrições onde as mesmas seriam acescidas com uma nova função
no sistema, tornando o sistema bastante flexivel.

103
Parte IV

Conclusão geral do trabalho

104
105

Neste trabalho conseguiu-se fazer um sistema que consegue, mediante


uma combinação de diferentes métodos como a programação lineal inteira
mista (PLIM), método GREEDY, sistemas de permutações e clusterização de
caminhos, fazer um scheduling dos problemas de escoamento de petróleo
bruto de plataformas marítimas e atendimento a centros consumidores, ga-
rantindo com este scheduling que as restrições sejam satisfeitas, como por
exemplo, a restrição de que não pode-se ter mais de um navio em uma pla-
taforma no mesmo tempo para o problema de escoamento de petróleo, ou o
problema da janela de tempo em que os navios podem atracar em um pier
para o problema de atendimento a centros consumidores.
Concluindo, pode-se dizer que para este trabalho específico a combinação
dos métodos com a programação orientada a objetos resultou em um sistema,
o qual retorna uma solução em um tempo bastante curto, além das vantagens
da programação orientada a objetos a qual permite uma fácil ampliação com
bibliotecas ou funcionalidades. A tudo isto anexa-se a vantagem que o sis-
tema desenvolvido usa só software livre de código aberto e está desenvolvido
em uma das linguagens de programação mais usadas por a comunidade com-
putacional, favorecendo desta forma a melhora contínua dos compiladores do
mesmo.
Como trabalhos futuros, propõe-se a implementação da solução destes
problemas com Algoritmos Genéticos, que no meio academico tem apresen-
tado excelentes resultados quando aplicados a problemas de otimizaao com-
binatória onde os valores obtidos são muito próximos do ótimo global e em
tempos menores em que aqueles baseados na procura exaustiva. Outra pro-
posta de trabalhos futuros é paralelizar o problema, conseguindo desta forma
diminuir o tempo de execução.
Parte V

Apêndice

106
Apêndice A

Relatório de scheduling do
escoamento de petróleo bruto de
plataformas marítimas

Neste anexo irão-se apresentar os dados obtidos como resultado da aplicação


do software ao estudo de casos apresentados na seção 7.

A.1 Estado inicial das plataformas


PLATAFORMA 1
Nome: ESPF
Produção: 311 m3 /h
Capacidade máxima de armazenamento: 110000 m3
Hora do último descarregamento: 0 h
Volume residual do produto no tanque: 100 m3

PLATAFORMA 2
Nome: FPSO-RJ
Produção: 322 m3 /h
Capacidade máxima de armazenamento: 120000 m3
Hora do último descarregamento: 0 h
Volume residual do produto no tanque: 100 m3

PLATAFORMA 3
Nome: FPSO-FLU
Produção: 333 m3 /h
Capacidade máxima de armazenamento: 130000 m3

107
A.2. ESTADO INICIAL DAS REFINARIAS 108

Hora do último descarregamento: 0 h


Volume residual do produto no tanque: 100 m3

PLATAFORMA 4
Nome: FPSO-BR
Produção: 344 m3 /h
Capacidade máxima de armazenamento: 140000 m3
Hora do último descarregamento: 0 h
Volume residual do produto no tanque: 100 m3

A.2 Estado inicial das refinarias


REFINARIA 10
Nome: Refinaria Duque de Caixas
Quantidade de Portos: 1
Cidade: Duque de Caixas
Estado: RJ
Pais: Brasil
Volume inicial: 500 m3

REFINARIA 20
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Volume inicial: 700 m3

A.3 Rotas
ROTA 1
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 10 > < P lat : 1 > < P lat : 2 > < P lat : 3 > < P lat : 4 > < Ref _C : 20 >
E as combinações possíveis destas, com suas distâncias são:
A.3. ROTAS 109

Tabela A.1: Combinações possíveis da rota 1

Distância(mn) Ref _S P lat P lat P lat P lat Ref _C


797 10 4 2 1 3 20
797 10 4 1 2 3 20
797 10 3 2 1 4 20
797 10 3 1 2 4 20
806 10 4 1 3 2 20
806 10 2 3 1 4 20
815 10 3 1 4 2 20
815 10 2 4 1 3 20
896 10 4 3 1 2 20
896 10 2 1 3 4 20
905 10 4 2 3 1 20
905 10 3 4 1 2 20
905 10 2 1 4 3 20
905 10 1 3 2 4 20
914 10 3 2 4 1 20
914 10 1 4 2 3 20
995 10 4 3 2 1 20
995 10 1 2 3 4 20
1004 10 3 4 2 1 20
1004 10 1 2 4 3 20
1013 10 2 4 3 1 20
1013 10 2 3 4 1 20
1013 10 1 4 3 2 20
1013 10 1 3 4 2 20

Quantidade de produto para carregar em cada plataforma:

Tabela A.2: Quantidades carregadas nas plataformas


na rota 1

Na plataforma 1 carrega-se: 3110 m3


Na plataforma 2 carrega-se: 3210 m3
Na plataforma 3 carrega-se: 3310 m3
Na plataforma 4 carrega-se: 3410 m3

ROTA 2
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
A.3. ROTAS 110

põem esta rota são:


< Ref _S : 20 > < P lat : 1 > < P lat : 3 > < P lat : 4 > < Ref _C : 10 >
E as combinações possíveis destas, com suas distâncias são:

Tabela A.3: Combinações possíveis da rota 2

Distância(mn) Ref _S P lat P lat P lat Ref _C


577 20 4 1 3 10
577 20 3 1 4 10
775 20 4 3 1 10
775 20 1 3 4 10
784 20 3 4 1 10
784 20 1 4 3 10

Quantidade de produto para carregar em cada plataforma:

Tabela A.4: Quantidades carregadas nas plataformas


na rota 2

Na plataforma 1 carrega-se: 4120 m3


Na plataforma 3 carrega-se: 4320 m3
Na plataforma 4 carrega-se: 4420 m3

ROTA 3
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 10 > < P lat : 1 > < P lat : 2 > < P lat : 4 > < Ref _C : 20 >
E as combinações possíveis destas, com suas distâncias são:

Tabela A.5: Combinações possíveis da rota 3

Distância(mn) Ref _S P lat P lat P lat Ref _C


566 10 4 1 2 20
566 10 2 1 4 20
665 10 4 2 1 20
665 10 1 2 4 20
683 10 2 4 1 20
683 10 1 4 2 20

Quantidade de produto para carregar em cada plataforma:


A.3. ROTAS 111

Tabela A.6: Quantidades carregadas nas plataformas


na rota 3

Na plataforma 1 carrega-se: 3130 m3


Na plataforma 2 carrega-se: 3230 m3
Na plataforma 4 carrega-se: 3430 m3

ROTA 4
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 20 > < P lat : 1 > < P lat : 2 > < P lat : 3 > < Ref _C : 10 >
E as combinações possíveis destas, com suas distâncias são:

Tabela A.7: Combinações possíveis da rota 4

Distância(mn) Ref _S P lat P lat P lat Ref _C


555 20 3 1 2 10
555 20 2 1 3 10
654 20 3 2 1 10
654 20 1 2 3 10
663 20 2 3 1 10
663 20 1 3 2 10

Quantidade de produto para carregar em cada plataforma:

Tabela A.8: Quantidades carregadas nas plataformas


na rota 4

Na plataforma 1 carrega-se: 4140 m3


Na plataforma 2 carrega-se: 4240 m3
Na plataforma 3 carrega-se: 4340 m3

ROTA 5
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
põem esta rota são:
< Ref _S : 10 > < P lat : 3 > < P lat : 4 > < Ref _C : 20 >
E as combinações possíveis destas, com suas distâncias são:

Tabela A.9: Combinações possíveis da rota 5

Distância(mn) Ref _S P lat P lat Ref _C


A.4. ESTADO INICIAL DOS NAVIOS 112

647 10 4 3 20
647 10 3 4 20

Quantidade de produto para carregar em cada plataforma:

Tabela A.10: Quantidades carregadas nas platafor-


mas na rota 1

Na plataforma 3 carrega-se: 2350 m3


Na plataforma 4 carrega-se: 2450 m3

A.4 Estado inicial dos navios


NAVIO 1
Descrição: Navio uno
Calado: 18 m
Comprimento: 71.9 m
Velocidade: 11 nós
Vazão de bombeamento de produto: 1100 m3 /h
Tempo de atracamento:

Tabela A.11: Tempo de atracamento do navio 1

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 1 1 2 1 2 2

Tempo de desatracamento:

Tabela A.12: Tempo de desatracamento do navio 1

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 1 1 2 1 2 2

Capacidade de carga do navio: 14000 m3


Carga total do navio: 0 m3

NAVIO 2
Descrição: Navio dos
Calado: 16 m
Comprimento: 52 m
A.4. ESTADO INICIAL DOS NAVIOS 113

Velocidade: 12 nós
Vazão de bombeamento de produto: 1200 m3 /h
Tempo de atracamento:

Tabela A.13: Tempo de atracamento do navio 2

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 2 2 2 1 1 1

Tempo de desatracamento:

Tabela A.14: Tempo de desatracamento do navio 2

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 2 2 2 1 1 1

Capacidade de carga do navio: 24000 m3


Carga total do navio: 400 m3

NAVIO 3
Descrição: Navio três
Calado: 17 m
Comprimento: 73.9 m
Velocidade: 13 nós
Vazão de bombeamento de produto: 1300 m3 /h
Tempo de atracamento:

Tabela A.15: Tempo de atracamento do navio 3

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 2 2 1 1 1 1 1 1

Tempo de desatracamento:

Tabela A.16: Tempo de desatracamento do navio 3

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 2 2 1 1 1 1 1 1

Capacidade de carga do navio: 18000 m3


Carga total do navio: 300 m3
A.5. ESTADO INICIAL DOS CAMINHOS 114

A.5 Estado inicial dos caminhos


CAMINHO 1
Navio asociado:
Código: 1
Velocidade: 11 nós
Capacidade: 14000 m3
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho: 4 h


Combinações das rotas:

Tabela A.17: Possíveis seqüências das rotas que


compõem o caminho 1

Distância(mn) Rota Rota Rota


1940 3 2 1
1940 1 2 3
2040 3 1 2
2040 2 3 1
2040 2 1 3
2040 1 3 2

Seqüência que o navio 1 segue:

Tabela A.18: Seqüência de plataformas e refinarias


que segue o navio 1 do caminho 1

Desatraca Ref _10


Carrega 3430 m3 P lat_4
Carrega 3130 m 3
P lat_1
Carrega 3230 m3 P lat_2
Descarrega-se Ref _20
Desatraca Ref _20
Carrega 4420 m 3
P lat_4
Carrega 4120 m 3
P lat_1
Carrega 4320 m3 P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
A.5. ESTADO INICIAL DOS CAMINHOS 115

Carrega 3410 m3 P lat_4


Carrega 3210 m3 P lat_2
Carrega 3110 m 3
P lat_1
Carrega 3310 m3 P lat_3
Descarrega-se Ref _20

Distância total desta seqüência = 1940 mn

CAMINHO 2
Navio associado a este caminho:
Código: 2
Velocidade: 12 nós
Capacidade: 24000 m3
Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 6 h


Combinações das rotas:

Tabela A.19: Possíveis seqüências das rotas que


compõem o caminho 2

Distância(mn) Rota Rota Rota


1598 4 2 3
1598 3 4 2
1598 3 2 4
1598 2 4 3
1698 4 3 2
1698 2 3 4

Seqüência que o navio 2 segue:

Tabela A.20: Seqüência de plataformas e refinarias


que segue o navio 2 do caminho 2

Desatraca Ref _20


Carrega 4340 m3 P lat_3
Carrega 4140 m 3
P lat_1
Carrega 4240 m3 P lat_2
A.5. ESTADO INICIAL DOS CAMINHOS 116

Descarrega-se Ref _10


Desatraca Ref _10
Carrega 4420 m 3
P lat_4
Carrega 4120 m3 P lat_1
Carrega 4320 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 3430 m 3
P lat_4
Carrega 3130 m3 P lat_1
Carrega 3230 m 3
P lat_2
Descarrega-se Ref _20

Distância total desta seqüência = 1598 mn

CAMINHO 3
Navio associado a este caminho:
Código: 3
Velocidade: 13 nós
Capacidade: 18000 m3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela A.21: Possíveis seqüências das rotas que


compõem o caminho 3

Distância(mn) Rota Rota Rota Rota


2245 3 4 2 5
2245 3 2 4 5
2245 5 4 2 3
2245 5 2 4 3
2345 3 5 4 2
2345 3 5 2 4
2345 3 4 5 2
2345 3 2 5 4
2345 5 3 4 2
A.5. ESTADO INICIAL DOS CAMINHOS 117

2345 5 3 2 4
2345 5 4 3 2
2345 5 2 3 4
2345 4 3 2 5
2345 4 5 2 3
2345 4 2 3 5
2345 4 2 5 3
2345 2 3 4 5
2345 2 5 4 3
2345 2 4 3 5
2345 2 4 5 3
2445 4 3 5 2
2445 4 5 3 2
2445 2 3 5 4
2445 2 5 3 4

Seqüência que o navio 3 segue:

Tabela A.22: Seqüência de plataformas e refinarias


que segue o navio3 do caminho 3

Desatraca Ref _10


Carrega 3430 m 3
P lat_4
Carrega 3130 m3 P lat_1
Carrega 3230 m 3
P lat_2
Descarrega-se Ref _20
Desatraca Ref _20
Carrega 4340 m 3
P lat_3
Carrega 4140 m3 P lat_1
Carrega 4240 m 3
P lat_2
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 4420 m 3
P lat_4
Carrega 4120 m3 P lat_1
Carrega 4320 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 2450 m3 P lat_4
A.7. SCHEDULING RESULTANTE 118

Carrega 2350 m3 P lat_3


Descarrega-se Ref _20

Distância total desta seqüência = 2245 mn

A.6 Distâncias entre as refinarias e plataformas


Grafo com as distâncias entre as refinarias e plataformas

Tabela A.23: Matriz de adjacência

10 20 1 2 3 4
10 0 400 101 102 103 104
20 400 0 201 202 203 204
1 101 201 0 120 130 140
2 102 202 120 0 230 240
3 103 203 130 230 0 340
4 104 204 140 240 340 0

A.7 Scheduling resultante


A Tabela A.24 e a Figura A.1 apresentam o scheduling do escoamento de
petróleo bruto de plataformas marítimas, resultante da simulação numérica.

Scheduling de 361 h
Caminho_1 Caminho_2 Caminho_3
Hora: 0 φ φ R_10
Hora: 1 φ φ TD
Hora: 2 φ φ TD
Hora: 3 φ φ λ
Hora: 4 R_10 φ –
Hora: 5 TD φ –
Hora: 6 λ R_20 –
Hora: 7 – R_20 –
Hora: 8 – TD –
Hora: 9 – TD –
Hora: 10 – λ –
Hora: 11 – – λ
Hora: 12 – – TA
Hora: 13 – – P _2
A.7. SCHEDULING RESULTANTE 119

Hora: 14 – – P _2
Hora: 15 – – P _2
Hora: 16 λ – P _2
Hora: 17 TA – P _2
Hora: 18 P _4 – P _2
Hora: 19 P _4 – P _2
Hora: 20 P _4 – P _2
Hora: 21 P _4 – TD
Hora: 22 P _4 – λ
Hora: 23 P _4 – –
Hora: 24 P _4 – –
Hora: 25 P _4 – –
Hora: 26 TD – –
Hora: 27 λ λ –
Hora: 28 – TA –
Hora: 29 – TA –
Hora: 30 – P _3 –
Hora: 31 – P _3 –
Hora: 32 – P _3 λ
Hora: 33 – P _3 TA
Hora: 34 – P _3 P _1
Hora: 35 – P _3 P _1
Hora: 36 – P _3 P _1
Hora: 37 – P _3 P _1
Hora: 38 – P _3 P _1
Hora: 39 – P _3 P _1
Hora: 40 – TD P _1
Hora: 41 – TD P _1
Hora: 42 – λ TD
Hora: 43 – – λ
Hora: 44 – – –
Hora: 45 – – –
Hora: 46 – – –
Hora: 47 – – –
Hora: 48 – – –
Hora: 49 λ – –
Hora: 50 TA – –
Hora: 51 P _2 – –
Hora: 52 P _2 – –
Hora: 53 P _2 – –
Hora: 54 P _2 – λ
Hora: 55 P _2 – TA
Hora: 56 P _2 – P _4
Hora: 57 P _2 – P _4
Hora: 58 P _2 – P _4
Hora: 59 TD – P _4
A.7. SCHEDULING RESULTANTE 120

Hora: 60 λ – P _4
Hora: 61 – – P _4
Hora: 62 – λ P _4
Hora: 63 – TA P _4
Hora: 64 – TA TD
Hora: 65 – P _2 λ
Hora: 66 – P _2 –
Hora: 67 – P _2 –
Hora: 68 – P _2 –
Hora: 69 – P _2 –
Hora: 70 – P _2 –
Hora: 71 λ P _2 –
Hora: 72 TA P _2 –
Hora: 73 P _1 P _2 –
Hora: 74 P _1 P _2 –
Hora: 75 P _1 TD –
Hora: 76 P _1 TD –
Hora: 77 P _1 λ –
Hora: 78 P _1 – –
Hora: 79 P _1 – –
Hora: 80 P _1 – –
Hora: 81 TD – λ
Hora: 82 λ – TA
Hora: 83 – – TA
Hora: 84 – – R_20
Hora: 85 – – R_20
Hora: 86 – – R_20
Hora: 87 – – R_20
Hora: 88 – λ R_20
Hora: 89 – TA R_20
Hora: 90 – TA R_20
Hora: 91 – P _1 R_20
Hora: 92 – P _1 R_20
Hora: 93 – P _1 TD
Hora: 94 λ P _1 TD
Hora: 95 TA P _1 λ
Hora: 96 TA P _1 –
Hora: 97 P _3 P _1 –
Hora: 98 P _3 P _1 –
Hora: 99 P _3 P _1 –
Hora: 100 P _3 P _1 –
Hora: 101 P _3 TD –
Hora: 102 P _3 TD –
Hora: 103 P _3 λ –
Hora: 104 P _3 – –
Hora: 105 TD – –
A.7. SCHEDULING RESULTANTE 121

Hora: 106 TD – –
Hora: 107 λ – –
Hora: 108 – – –
Hora: 109 – – –
Hora: 110 – – –
Hora: 111 – – λ
Hora: 112 – λ TA
Hora: 113 – TA P _3
Hora: 114 – R_10 P _3
Hora: 115 – R_10 P _3
Hora: 116 – R_10 P _3
Hora: 117 – R_10 P _3
Hora: 118 – R_10 P _3
Hora: 119 – R_10 P _3
Hora: 120 – R_10 P _3
Hora: 121 – R_10 P _3
Hora: 122 – R_10 P _3
Hora: 123 – R_10 TD
Hora: 124 – TD λ
Hora: 125 – λ –
Hora: 126 λ – –
Hora: 127 TA – –
Hora: 128 TA – –
Hora: 129 R_20 – –
Hora: 130 R_20 – –
Hora: 131 R_20 – –
Hora: 132 R_20 – –
Hora: 133 R_20 – –
Hora: 134 R_20 λ –
Hora: 135 R_20 TA λ
Hora: 136 R_20 P _4 TA
Hora: 137 R_20 P _4 P _1
Hora: 138 R_20 P _4 P _1
Hora: 139 R_20 P _4 P _1
Hora: 140 R_20 P _4 P _1
Hora: 141 R_20 P _4 P _1
Hora: 142 TD P _4 P _1
Hora: 143 TD P _4 P _1
Hora: 144 λ P _4 P _1
Hora: 145 – P _4 P _1
Hora: 146 – TD P _1
Hora: 147 – λ TD
Hora: 148 – – λ
Hora: 149 – – –
Hora: 150 – – –
Hora: 151 – – –
A.7. SCHEDULING RESULTANTE 122

Hora: 152 – – –
Hora: 153 – – –
Hora: 154 – – –
Hora: 155 – – –
Hora: 156 – – –
Hora: 157 – – –
Hora: 158 – – λ
Hora: 159 – λ TA
Hora: 160 – TA P _2
Hora: 161 – TA P _2
Hora: 162 – P _1 P _2
Hora: 163 λ P _1 P _2
Hora: 164 TA P _1 P _2
Hora: 165 P _4 P _1 P _2
Hora: 166 P _4 P _1 P _2
Hora: 167 P _4 P _1 P _2
Hora: 168 P _4 P _1 P _2
Hora: 169 P _4 P _1 P _2
Hora: 170 P _4 P _1 TD
Hora: 171 P _4 P _1 λ
Hora: 172 P _4 TD –
Hora: 173 P _4 TD –
Hora: 174 P _4 λ –
Hora: 175 TD – –
Hora: 176 λ – –
Hora: 177 – – –
Hora: 178 – – –
Hora: 179 – – λ
Hora: 180 – – TA
Hora: 181 – – TA
Hora: 182 – – R_10
Hora: 183 – – R_10
Hora: 184 – – R_10
Hora: 185 – λ R_10
Hora: 186 – TA R_10
Hora: 187 – TA R_10
Hora: 188 – P _3 R_10
Hora: 189 λ P _3 R_10
Hora: 190 TA P _3 R_10
Hora: 191 P _1 P _3 TD
Hora: 192 P _1 P _3 TD
Hora: 193 P _1 P _3 λ
Hora: 194 P _1 P _3 –
Hora: 195 P _1 P _3 –
Hora: 196 P _1 P _3 –
Hora: 197 P _1 P _3 –
A.7. SCHEDULING RESULTANTE 123

Hora: 198 P _1 TD –
Hora: 199 P _1 TD –
Hora: 200 P _1 λ –
Hora: 201 TD – –
Hora: 202 λ – λ
Hora: 203 – – TA
Hora: 204 – – P _4
Hora: 205 – – P _4
Hora: 206 – – P _4
Hora: 207 – – P _4
Hora: 208 – – P _4
Hora: 209 – λ P _4
Hora: 210 – TA P _4
Hora: 211 – R_10 P _4
Hora: 212 – R_10 P _4
Hora: 213 – R_10 P _4
Hora: 214 λ R_10 TD
Hora: 215 TA R_10 λ
Hora: 216 TA R_10 –
Hora: 217 P _3 R_10 –
Hora: 218 P _3 R_10 –
Hora: 219 P _3 R_10 –
Hora: 220 P _3 R_10 –
Hora: 221 P _3 R_10 –
Hora: 222 P _3 TD –
Hora: 223 P _3 λ –
Hora: 224 P _3 – –
Hora: 225 P _3 – –
Hora: 226 P _3 – λ
Hora: 227 TD – TA
Hora: 228 TD – P _1
Hora: 229 λ – P _1
Hora: 230 – – P _1
Hora: 231 – – P _1
Hora: 232 – λ P _1
Hora: 233 – TA P _1
Hora: 234 – P _4 P _1
Hora: 235 – P _4 P _1
Hora: 236 – P _4 P _1
Hora: 237 – P _4 P _1
Hora: 238 – P _4 TD
Hora: 239 λ P _4 λ
Hora: 240 TA P _4 –
Hora: 241 R_10 P _4 –
Hora: 242 R_10 TD –
Hora: 243 R_10 λ –
A.7. SCHEDULING RESULTANTE 124

Hora: 244 R_10 – –


Hora: 245 R_10 – –
Hora: 246 R_10 – –
Hora: 247 R_10 – –
Hora: 248 R_10 – –
Hora: 249 R_10 – –
Hora: 250 R_10 – λ
Hora: 251 R_10 – TA
Hora: 252 R_10 – P _3
Hora: 253 TD – P _3
Hora: 254 λ – P _3
Hora: 255 – λ P _3
Hora: 256 – TA P _3
Hora: 257 – TA P _3
Hora: 258 – P _1 P _3
Hora: 259 – P _1 P _3
Hora: 260 – P _1 P _3
Hora: 261 – P _1 P _3
Hora: 262 – P _1 TD
Hora: 263 – P _1 λ
Hora: 264 λ P _1 –
Hora: 265 TA P _1 –
Hora: 266 P _4 TD –
Hora: 267 P _4 TD –
Hora: 268 P _4 λ –
Hora: 269 P _4 – –
Hora: 270 P _4 – –
Hora: 271 P _4 – λ
Hora: 272 P _4 – TA
Hora: 273 P _4 – TA
Hora: 274 TD – R_10
Hora: 275 λ – R_10
Hora: 276 – – R_10
Hora: 277 – – R_10
Hora: 278 – – R_10
Hora: 279 – λ R_10
Hora: 280 – TA R_10
Hora: 281 – TA R_10
Hora: 282 – P _2 R_10
Hora: 283 – P _2 R_10
Hora: 284 – P _2 TD
Hora: 285 – P _2 TD
Hora: 286 – P _2 λ
Hora: 287 – P _2 –
Hora: 288 λ P _2 –
Hora: 289 TA P _2 –
A.7. SCHEDULING RESULTANTE 125

Hora: 290 P _1 TD –
Hora: 291 P _1 TD –
Hora: 292 P _1 λ –
Hora: 293 P _1 – –
Hora: 294 P _1 – –
Hora: 295 P _1 – λ
Hora: 296 P _1 – TA
Hora: 297 P _1 – P _4
Hora: 298 TD – P _4
Hora: 299 λ – P _4
Hora: 300 – – P _4
Hora: 301 – – P _4
Hora: 302 – – P _4
Hora: 303 – – TD
Hora: 304 – – λ
Hora: 305 – – –
Hora: 306 – – –
Hora: 307 – – –
Hora: 308 – – –
Hora: 309 – λ –
Hora: 310 λ TA –
Hora: 311 TA TA –
Hora: 312 P _2 φ –
Hora: 313 P _2 φ –
Hora: 314 P _2 φ –
Hora: 315 P _2 φ –
Hora: 316 P _2 φ –
Hora: 317 P _2 φ –
Hora: 318 P _2 φ –
Hora: 319 P _2 φ –
Hora: 320 TD φ –
Hora: 321 λ φ –
Hora: 322 – φ –
Hora: 323 – φ –
Hora: 324 – φ –
Hora: 325 – φ –
Hora: 326 – φ –
Hora: 327 – φ –
Hora: 328 – φ –
Hora: 329 – φ –
Hora: 330 – φ –
Hora: 331 – φ λ
Hora: 332 – φ TA
Hora: 333 – φ P _3
Hora: 334 – φ P _3
Hora: 335 – φ P _3
A.8. CAMINHOS RESULTANTES 126

Hora: 336 – φ P _3
Hora: 337 – φ P _3
Hora: 338 – φ TD
Hora: 339 – φ λ
Hora: 340 λ φ –
Hora: 341 TA φ –
Hora: 342 TA φ –
Hora: 343 φ φ –
Hora: 344 φ φ –
Hora: 345 φ φ –
Hora: 346 φ φ –
Hora: 347 φ φ –
Hora: 348 φ φ –
Hora: 349 φ φ –
Hora: 350 φ φ –
Hora: 351 φ φ –
Hora: 352 φ φ –
Hora: 353 φ φ –
Hora: 354 φ φ –
Hora: 355 φ φ λ
Hora: 356 φ φ TA
Hora: 357 φ φ TA
Hora: 358 φ φ φ
Hora: 359 φ φ φ
Hora: 360 φ φ φ

A.8 Caminhos resultantes


CAMINHO 1
Navio associado a este caminho:
Código: 1
Velocidade: 11 nós
Capacidade: 14000 m3
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho é: 4 h


Combinações das rotas:
marítimas
Figura A.1: Diagrama do scheduling do escoamento de petróleo bruto de plataformas

A.8. CAMINHOS RESULTANTES


Caminhos Scheduling do escoamento de petroleo bruto de plataformas maritimas

Factor lambda
Tempo de Atraco
Tempo de Desatraco
Refinaria 10
Refinaria 20
3 Plataforma 1
Plataforma 2
Plataforma 3
Plataforma 4

0 10 20 30 40 50 60 70 80 90100110120130140150160170180190200210220230240250260270280290300310320330340350360
Horas

127
A.8. CAMINHOS RESULTANTES 128

Tabela A.25: Possíveis seqüências das rotas que


compõem o caminho 1

Distância(mn) Rota Rota Rota


1940 3 2 1
1940 1 2 3
2040 3 1 2
2040 2 3 1
2040 2 1 3
2040 1 3 2

Seqüência que o navio 1 segue:

Tabela A.26: Seqüência de plataformas e refinarias


que segue o navio 1 do caminho 1

Desatraca Ref _10


Carrega 3410 m3 P lat_4
Carrega 3210 m 3
P lat_2
Carrega 3110 m 3
P lat_1
Carrega 3310 m3 P lat_3
Descarrega-se Ref _20
Desatraca Ref _20
Carrega 4420 m 3
P lat_4
Carrega 4120 m3 P lat_1
Carrega 4320 m3 P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 3430 m 3
P lat_4
Carrega 3130 m3 P lat_1
Carrega 3230 m 3
P lat_2
Descarrega-se Ref _20

Distância total desta seqüência = 1940 mn

CAMINHO 2
Navio associado a este caminho:
Código: 2
Velocidade: 12 nós
Capacidade: 24000 m3
A.8. CAMINHOS RESULTANTES 129

Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 6 h


Combinações das rotas:

Tabela A.27: Possíveis seqüências das rotas que


compõem o caminho 2

Distância(mn) Rota Rota Rota


1598 4 2 3
1598 3 4 2
1598 3 2 4
1598 2 4 3
1698 4 3 2
1698 2 3 4

Seqüência que o navio 2 segue:

Tabela A.28: Seqüência de plataformas e refinarias


que segue o navio 2 do caminho 2

Desatraca Ref _20


Carrega 4240 m 3
P lat_2
Carrega 4140 m3 P lat_1
Carrega 4340 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 4420 m 3
P lat_4
Carrega 4120 m3 P lat_1
Carrega 4320 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 3430 m 3
P lat_4
Carrega 3130 m3 P lat_1
Carrega 3230 m 3
P lat_2
Descarrega-se Ref _20

Distância total desta seqüência = 1598 mn


A.8. CAMINHOS RESULTANTES 130

CAMINHO 3
Navio associado a este caminho:
Código: 3
Velocidade: 13 nós
Capacidade: 18000 m3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela A.29: Possíveis seqüências das rotas que


compõem o caminho 3

Distância(mn) Rota Rota Rota Rota


2245 3 4 2 5
2245 3 2 4 5
2245 5 4 2 3
2245 5 2 4 3
2345 3 5 4 2
2345 3 5 2 4
2345 3 4 5 2
2345 3 2 5 4
2345 5 3 4 2
2345 5 3 2 4
2345 5 4 3 2
2345 5 2 3 4
2345 4 3 2 5
2345 4 5 2 3
2345 4 2 3 5
2345 4 2 5 3
2345 2 3 4 5
2345 2 5 4 3
2345 2 4 3 5
2345 2 4 5 3
2445 4 3 5 2
2445 4 5 3 2
A.9. ESTADO FINAL DAS PLATAFORMAS 131

2445 2 3 5 4
2445 2 5 3 4

Seqüência que o navio 3 segue:

Tabela A.30: Seqüência de plataformas e refinarias


que segue o navio 3 do caminho 3

Desatraca Ref _10


Carrega 3230 m 3
P lat_2
Carrega 3130 m3 P lat_1
Carrega 3430 m 3
P lat_4
Descarrega-se Ref _20
Desatraca Ref _20
Carrega 4340 m 3
P lat_3
Carrega 4140 m3 P lat_1
Carrega 4240 m 3
P lat_2
Descarrega-se Ref _10
Destraca Ref _10
Carrega 4420 m 3
P lat_4
Carrega 4120 m3 P lat_1
Carrega 4320 m 3
P lat_3
Descarrega-se Ref _10
Desatraca Ref _10
Carrega 2450 m3 P lat_4
Carrega 2350 m3 P lat_3
Descarrega-se Ref _20

Distância total desta seqüência = 2245 mn

A.9 Estado final das plataformas


PLATAFORMA 1
Nome: ESPF
Produção: 311 m3 /h
Capacidade máxima de armazenamento: 110000 m3
Hora do último descarregamento: 297 h
Volume residual de produto no tanque: 59327 m3
A.9. ESTADO FINAL DAS PLATAFORMAS 132

A Figura A.2 apresenta a quantidade de petróleo produzido com relação ao


tempo na plataforma 1.

Plataforma 1
30000
Volume de petróleo produzido (m³)
20000
10000
0

0 50 100 150 200 250 300 350


Tempo (hora)

Figura A.2: Quantidade de petróleo por tempo na plataforma 1

PLATAFORMA 2
Nome: FPSO-RJ
Produção: 322 m3 /h
Capacidade máxima de armazenamento: 120000 m3
Hora do último descarregamento: 319 h
Volume residual de produto no tanque: 81438 m3
A Figura A.3 apresenta a quantidade de petróleo produzido com relação ao
tempo na plataforma 2.

PLATAFORMA 3
Nome: FPSO-FLU
Produção: 333 m3 /h
Capacidade máxima de armazenamento: 130000 m3
Hora do último descarregamento: 337 h
Volume residual de produto no tanque: 85021 m3
A Figura A.4 apresenta a quantidade de petróleo produzido com relação ao
tempo na plataforma 3.
A.9. ESTADO FINAL DAS PLATAFORMAS 133

Plataforma 2
Volume de petróleo produzido (m³)
50000
30000
10000
0

0 50 100 150 200 250 300 350


Tempo (hora)

Figura A.3: Quantidade de petróleo por tempo na plataforma 2

Plataforma 3
Volume de petróleo produzido (m³)
50000
30000
10000
0

0 50 100 150 200 250 300 350


Tempo (hora)

Figura A.4: Quantidade de petróleo por tempo na plataforma 3


A.10. ESTADO FINAL DAS REFINARIAS 134

PLATAFORMA 4
Nome: FPSO-BR
Produção: 344 m3 /h
Capacidade máxima de armazenamento: 140000 m3
Hora do último descarregamento: 302 h
Volume residual de produto no tanque: 74578 m3
A Figura A.5 apresenta a quantidade de petróleo com relação ao tempo na
plataforma 4.

Plataforma 4
50000
Volume de petróleo produzido (m³)
40000
30000
20000
10000
0

0 50 100 150 200 250 300 350


Tempo (hora)

Figura A.5: Quantidade de petróleo por tempo na plataforma 4

A.10 Estado final das refinarias


REFINARIA 10
Nome: Refinaria Duque de Caixas
Quantidade de Portos: 1
Cidade: Duque de Caixas
Estado: RJ
Pais: Brasil
Volume descarregado: 64820 m3
A.11. ESTADO FINAL DOS NAVIOS 135

REFINARIA 20
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Volume descarregado: 23930 m3

A.11 Estado final dos navios


NAVIO 1
Descrição: Navio uno
Calado: 18 m
Comprimento: 71.9 m
Velocidade: 11 nós
Vazão de bombeamento de produto: 1100 m3 /h
Tempo de atracamento:

Tabela A.31: Tempo de atracamento do navio 1

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 1 1 2 1 2 2

Tempo de desatracamento:

Tabela A.32: Tempo de desatracamento do navio 1

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 1 1 2 1 2 2

Capacidade de carga do navio: 14000 m3


A carga total do navio: 9790 m3

NAVIO 2
Descrição: Navio dos
Calado: 16 m
Comprimento: 52 m
Velocidade: 12 nós
Vazão de bombeamento de produto: 1200 m3 /h
Tempo de atracamento:
A.11. ESTADO FINAL DOS NAVIOS 136

Tabela A.33: Tempo de atracamento do navio 2

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 2 2 2 1 1 1

Tempo de desatracamento:

Tabela A.34: Tempo de desatracamento do navio 2

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 2 2 2 1 1 1

Capacidade de carga do navio: 24000 m3


A carga total do navio é: 9790 m3

NAVIO 3
Descrição: Navio três
Calado: 17 m
Comprimento: 73.9 m
Velocidade: 13 nós
Vazão de bombeamento de produto: 1300 m3 /h
Tempo de atracamento:

Tabela A.35: Tempo de atracamento do navio 3

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 2 2 1 1 1 1 1 1

Tempo de desatracamento:

Tabela A.36: Tempo de desatracamento do navio 3

Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 2 2 1 1 1 1 1 1

Capacidade de carga do navio: 18000 m3


A carga total do navio é: 4800 m3
Apêndice B

Relatório de scheduling do
atendimento a centros
consumidores

Neste anexo irão-se apresentar os dados obtidos como resultado da aplicação


do software ao estudo de casos apresentados na seção 14

B.1 Estado inicial dos centros consumidores


CENTRO CONSUMIDOR 10
Nome: Centro Consumidor de Maceió
Quantidade de Portos: 1
Cidade: Maceió
Estado: Alagoas
Pais: Brasil
Demanda: 110 m3 /h
Volume inicial do reservatorio: 35100 m3
Porto 100. Este Porto tem 2 piers:

• pier 1

• pier 2

CENTRO CONSUMIDOR 20
Nome: Centro Consumidor de Recife
Quantidade de Portos: 1
Cidade: Recife
Estado: Pernambuco

137
B.2. ESTADO INICIAL DAS REFINARIAS 138

Pais: Brasil
Demanda: 120 m3 /h
Volume inicial do reservatorio: 35200 m3
Porto 200. Este Porto tem 2 piers:

• pier 3

• pier 4

CENTRO CONSUMIDOR 30
Nome: Centro Consumidor de Fortaleza
Quantidade de Portos: 1
Cidade: Fortaleza
Estado: Ceara
Pais: Brasil
Demanda: 130 m3 /h
Volume inicial do reservatorio: 35300 m3
Porto 300. Este Porto tem 2 piers:

• pier 5

• pier 6

CENTRO CONSUMIDOR 40
Nome: Centro Consumidor de Rio de Janeiro
Quantidade de Portos: 1
Cidade: Rio de Janeiro
Estado: Rio
Pais: Brasil
Demanda: 140 m3 /h
Volume inicial do reservatorio: 35400 m3
Porto 400. Este Porto tem 2 piers:

• pier 7

• pier 8

B.2 Estado inicial das refinarias


REFINARIA 60
Nome: Refinaria Duque de Caixas
Quantidade de Portos: 1
B.3. ROTAS 139

Cidade: Duque de Caixas


Estado: RJ
Pais: Brasil
Porto 600.
Este Porto tem 2 piers:

• pier 11

• pier 12

REFINARIA 70
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Porto 700.
Este Porto tem 2 piers:

• pier 13

• pier 14

B.3 Rotas
ROTA 1
Refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores (CC)
que compõem esta rota:
< Ref _S : 60 > < CC : 10 > < CC : 20 > < CC : 30 > < CC : 40 > < Ref _C : 70 >
E as combinações possíveis destas, com suas distâncias são:

Tabela B.1: Combinações possíveis da rota 1

Distância(mn) Ref _S CC CC CC CC Ref _C


797 60 40 20 10 30 70
797 60 40 10 20 30 70
797 60 30 20 10 40 70
797 60 30 10 20 40 70
806 60 40 10 30 20 70
806 60 20 30 10 40 70
815 60 30 10 40 20 70
B.3. ROTAS 140

815 60 20 40 10 30 70
896 60 40 30 10 20 70
896 60 20 10 30 40 70
905 60 40 20 30 10 70
905 60 30 40 10 20 70
905 60 20 10 40 30 70
905 60 10 30 20 40 70
914 60 30 20 40 10 70
914 60 10 40 20 30 70
995 60 40 30 20 10 70
995 60 10 20 30 40 70
1004 60 30 40 20 10 70
1004 60 10 20 40 30 70
1013 60 20 40 30 10 70
1013 60 20 30 40 10 70
1013 60 10 40 30 20 70
1013 60 10 30 40 20 70

Quantidade de produto para descarregar em cada centro consumidor:

Tabela B.2: Descargas nos centros consumidores da


rota 1

No centro consumidor 10 descarrega-se: 3110 m3


No centro consumidor 20 descarrega-se: 3210 m3
No centro consumidor 30 descarrega-se: 3310 m3
No centro consumidor 40 descarrega-se: 3410 m3

ROTA 2
Refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores (CC)
que compõem esta rota:
< Ref _S : 70 > < CC : 10 > < CC : 30 > < CC : 40 > < Ref _C : 60 >
E as combinações possíveis destas, com suas distâncias são:

Tabela B.3: Combinações possíveis da rota 2

Distância(mn) Ref _S CC CC CC Ref _C


577 70 40 10 30 60
577 70 30 10 40 60
B.3. ROTAS 141

775 70 40 30 10 60
775 70 10 30 40 60
784 70 30 40 10 60
784 70 10 40 30 60

Quantidade de produto para descarregar em cada centro consumidor:

Tabela B.4: Descargas nos centros consumidores da


rota 2

No centro consumidor 10 descarrega-se: 4120 m3


No centro consumidor 30 descarrega-se: 4320 m3
No centro consumidor 40 descarrega-se: 4420 m3

ROTA 3
Refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores (CC)
que compõem esta rota:
< Ref _S : 60 > < CC : 10 > < CC : 20 > < CC : 40 > < Ref _C : 70 >
E as combinações possíveis destas, com suas distâncias são:

Tabela B.5: Possíveis combinações da rota 3

Distância(mn) Ref _S CC CC CC Ref _C


566 60 40 10 20 70
566 60 20 10 40 70
665 60 40 20 10 70
665 60 10 20 40 70
683 60 20 40 10 70
683 60 10 40 20 70

Quantidade de produto para descarregar em cada Centro Consumidor:

Tabela B.6: Descargas nos centros consumidores na


rota 3

No centro consumidor 10 descarrega-se: 3130 m3


No centro consumidor 20 descarrega-se: 3230 m3
No centro consumidor 40 descarrega-se: 3430 m3

ROTA 4
Refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores (CC)
B.3. ROTAS 142

que compõem esta rota são:


< Ref _S : 70 > < CC : 10 > < CC : 20 > < CC : 30 > < Ref _C : 60 >
E as combinações possíveis destas, com suas distâncias são:

Tabela B.7: Possíveis combinações da rota 4

Distância(mn) Ref _S CC CC CC Ref _C


555 70 30 10 20 60
555 70 20 10 30 60
654 70 30 20 10 60
654 70 10 20 30 60
663 70 20 30 10 60
663 70 10 30 20 60

Quantidade de produto para descarregar em cada Centro Consumidor:

Tabela B.8: Descargas nos centros consumidores da


rota 4

No centro consumidor 10 descarrega-se: 4140 m3


No centro consumidor 20 descarrega-se: 4240 m3
No centro consumidor 30 descarrega-se: 4340 m3

ROTA 5
Refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores (CC)
que compõem esta rota:
< Ref _S : 60 > < CC : 30 > < CC : 40 > < Ref _C : 70 >
E as combinações possíveis destas, com suas distâncias são:

Tabela B.9: Possíveis combinações da rota 5

Distância(mn) Ref _S CC CC Ref _C


647 60 40 30 70
647 60 30 40 70

Quantidade de produto para descarregar em cada Centro Consumidor:

Tabela B.10: Descargas nos centros consumidores


da rota 5

No centro consumidor 30 descarrega-se: 2350 m3


No centro consumidor 40 descarrega-se: 2450 m3
B.4. ESTADO INICIAL DOS NAVIOS 143

B.4 Estado inicial dos navios


NAVIO 1
Descrição: Navio uno
Calado: 15 m
Comprimento: 71.9 m
Velocidade: 11 nós
Vazão de bazamento de produto: 1100 m3 /h
Tempo de atracamento:

Tabela B.11: Tempo de atracamento do navio 1

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 1 1 2 1 2

Tempo de desatracamento:

Tabela B.12: tempo de desatracamento do navio 1

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 1 1 2 1 2

Capacidade de carga do navio: 23040 m3


Carga inicial existente no navio: 0 m3

NAVIO 2
Descrição: Navio dois
Calado: 14 m
Comprimento: 52 m
Velocidade: 12 nós
Vazão de bazamento de produto: 1200 m3 /h
Tempo de atracamento:

Tabela B.13: Tempo de atracamento do navio 2

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1

Tempo de desatracamento:
B.5. ESTADO INICIAL DOS CAMINHOS 144

Tabela B.14: Tempo de desatracamento do navio 2

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1

Capacidade de carga do navio: 40940 m3


Carga inicial existente do navio é: 400 m3

NAVIO 3
Descrição: Navio três
Calado: 13 m
Comprimento: 73.9 m
Velocidade: 13 nós
Vazão de bazamento de produto: 1300 m3 /h
Tempo de atracamento:

Tabela B.15: Tempo de atracamento do navio 3

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 2 2 1 1 1 1 1

Tempo de desatracamento:

Tabela B.16: Tempo de desatracamento do navio 3

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 2 2 1 1 1 1 1

Capacidade de carga do navio: 29600 m3


Carga inicial existente no navio: 300 m3

B.5 Estado inicial dos caminhos


CAMINHO 1
Navio associado: Navio 1
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >


B.5. ESTADO INICIAL DOS CAMINHOS 145

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela B.17: Possíveis seqüências de rotas que segue


o navio 1

Distância(mn) Rota Rota Rota


1940 3 2 1
1940 1 2 3
2040 3 1 2
2040 2 3 1
2040 2 1 3
2040 1 3 2

Seqüência que o Navio 1 segue:

Tabela B.18: Seqüência de centros consumidores e


refinarias que segue o navio 1 do caminho 1

Carrega-se Ref _60


Descarrega 3430 m 3
CC_40
Descarrega 3130 m3 CC_10
Descarrega 3230 m 3
CC_20
Atraca Ref _70
Carrega-se Ref _70
Descarrega 4420 m 3
CC_40
Descarrega 4120 m3 CC_10
Descarrega 4320 m 3
CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 3410 m 3
CC_40
Descarrega 3210 m3 CC_20
Descarrega 3110 m 3
CC_10
Descarrega 3310 m3 CC_30
Atraca Ref _70

Distância total desta seqüência = 1940 mn


CAMINHO 2
Navio associado: Navio 2
B.5. ESTADO INICIAL DOS CAMINHOS 146

Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela B.19: Possíveis seqüências de rotas que segue


o navio 2

Distância(mn) Rota Rota Rota


1598 4 2 3
1598 3 4 2
1598 3 2 4
1598 2 4 3
1698 4 3 2
1698 2 3 4

Seqüência que o Navio 2 segue:

Tabela B.20: Seqüência de centros consumidores e


refinarias que segue o navio 2 do caminho 2

Carrega-se Ref _70


Descarrega 4340 m3 CC_30
Descarrega 4140 m 3
CC_10
Descarrega 4240 m3 CC_20
Atraca Ref _60
Carrega-se Ref _60
Descarrega 4420 m3 CC_40
Descarrega 4120 m 3
CC_10
Descarrega 4320 m3 CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 3430 m 3
CC_40
Descarrega 3130 m 3
CC_10
Descarrega 3230 m3 CC_20
Atraca Ref _70

Distância total desta seqüência = 1598 mn


CAMINHO 3
B.5. ESTADO INICIAL DOS CAMINHOS 147

Navio associado: Navio 3


Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela B.21: Possíveis seqüências de rotas que segue


o navio 3

Distância(mn) Rota Rota Rota Rota


2245 3 4 2 5
2245 3 2 4 5
2245 5 4 2 3
2245 5 2 4 3
2345 3 5 4 2
2345 3 5 2 4
2345 3 4 5 2
2345 3 2 5 4
2345 5 3 4 2
2345 5 3 2 4
2345 5 4 3 2
2345 5 2 3 4
2345 4 3 2 5
2345 4 5 2 3
2345 4 2 3 5
2345 4 2 5 3
2345 2 3 4 5
2345 2 5 4 3
2345 2 4 3 5
2345 2 4 5 3
2445 4 3 5 2
2445 4 5 3 2
2445 2 3 5 4
2445 2 5 3 4

Seqüência que o Navio 3 segue:


B.6. DISTÂNCIAS ENTRE AS REFINARIAS E CENTROS CONSUMIDORES148

Tabela B.22: Seqüência de centros consumidores e


refinarias que segue o navio 3 do caminho 3

Carrega-se Ref _60


Descarrega 3430 m3 CC_40
Descarrega 3130 m3 CC_10
Descarrega 3230 m 3
CC_20
Atraca Ref _70
Carrega-se Ref _70
Descarrega 4340 m3 CC_30
Descarrega 4140 m 3
CC_10
Descarrega 4240 m3 CC_20
Atraca Ref _60
Carrega-se Ref _60
Descarrega 4420 m3 CC_40
Descarrega 4120 m 3
CC_10
Descarrega 4320 m3 CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 2450 m3 CC_40
Descarrega 2350 m 3
CC_30
Atraca Ref _70

Distância total desta seqüência = 2245 mn

B.6 Distâncias entre as refinarias e centros con-


sumidores
Grafo com as distâncias entre as refinarias e centros consumidores

Tabela B.23: Matriz de adjacência

60 70 10 20 30 40 50
60 0 400 101 102 103 104 105
70 400 0 201 202 203 204 205
10 101 201 0 120 130 140 150
20 102 202 120 0 230 240 250
30 103 203 130 230 0 340 350
40 104 204 140 240 340 0 450
B.7. SCHEDULING RESULTANTE 149

50 105 205 150 250 350 450 0

B.7 Scheduling resultante


A Tabela B.24 e a Figura B.1 apresentam o scheduling do atendimento a centro
consumidor, resultante da simulação numérica.

Scheduling de 321 h
Caminho_1 Caminho_2 Caminho_3
Hora: 0 R_70 R_70 R_60
Hora: 1 R_70 R_70 R_60
Hora: 2 R_70 R_70 R_60
Hora: 3 R_70 R_70 R_60
Hora: 4 R_70 R_70 R_60
Hora: 5 R_70 R_70 R_60
Hora: 6 R_70 R_70 R_60
Hora: 7 R_70 R_70 R_60
Hora: 8 R_70 R_70 R_60
Hora: 9 R_70 R_70 TD
Hora: 10 R_70 R_70 λ
Hora: 11 R_70 R_70 –
Hora: 12 TD TD –
Hora: 13 TD λ –
Hora: 14 λ – –
Hora: 15 – – –
Hora: 16 – – –
Hora: 17 – – –
Hora: 18 – – –
Hora: 19 – – λ
Hora: 20 – – TA
Hora: 21 – – CC_40
Hora: 22 – – CC_40
Hora: 23 – – CC_40
Hora: 24 – – TD
Hora: 25 – – λ
Hora: 26 – – –
Hora: 27 – – –
Hora: 28 – – –
Hora: 29 – – –
Hora: 30 – λ –
Hora: 31 – TA –
Hora: 32 – TA –
Hora: 33 λ CC_30 –
Hora: 34 TA CC_30 –
Hora: 35 CC_40 CC_30 –
B.7. SCHEDULING RESULTANTE 150

Hora: 36 CC_40 CC_30 λ


Hora: 37 CC_40 TD TA
Hora: 38 CC_40 TD TA
Hora: 39 TD λ CC_10
Hora: 40 λ – CC_10
Hora: 41 – – TD
Hora: 42 – – TD
Hora: 43 – – λ
Hora: 44 – – –
Hora: 45 – – –
Hora: 46 – – –
Hora: 47 – – –
Hora: 48 – – –
Hora: 49 – – –
Hora: 50 – – –
Hora: 51 – – –
Hora: 52 – – –
Hora: 53 – – λ
Hora: 54 – – TA
Hora: 55 – – TA
Hora: 56 – – CC_20
Hora: 57 – – CC_20
Hora: 58 – – TD
Hora: 59 – λ TD
Hora: 60 – TA λ
Hora: 61 – TA –
Hora: 62 – CC_20 –
Hora: 63 – CC_20 –
Hora: 64 – CC_20 –
Hora: 65 – CC_20 –
Hora: 66 – TD –
Hora: 67 – TD –
Hora: 68 – λ –
Hora: 69 – – –
Hora: 70 – – –
Hora: 71 λ – –
Hora: 72 TA – –
Hora: 73 CC_30 – –
Hora: 74 CC_30 – –
Hora: 75 CC_30 – –
Hora: 76 CC_30 – λ
Hora: 77 TD – TA
Hora: 78 λ – R_70
Hora: 79 – λ R_70
Hora: 80 – TA R_70
Hora: 81 – CC_10 R_70
B.7. SCHEDULING RESULTANTE 151

Hora: 82 – CC_10 R_70


Hora: 83 – CC_10 R_70
Hora: 84 – TD R_70
Hora: 85 – λ R_70
Hora: 86 – – R_70
Hora: 87 – – R_70
Hora: 88 – – R_70
Hora: 89 – – R_70
Hora: 90 λ – TD
Hora: 91 TA – λ
Hora: 92 CC_10 – –
Hora: 93 CC_10 – –
Hora: 94 CC_10 λ –
Hora: 95 CC_10 TA –
Hora: 96 TD R_60 –
Hora: 97 λ R_60 –
Hora: 98 – R_60 –
Hora: 99 – R_60 –
Hora: 100 – R_60 –
Hora: 101 – R_60 –
Hora: 102 – R_60 –
Hora: 103 – R_60 –
Hora: 104 – R_60 –
Hora: 105 – R_60 –
Hora: 106 – R_60 –
Hora: 107 λ R_60 λ
Hora: 108 TA R_60 TA
Hora: 109 R_60 TD CC_30
Hora: 110 R_60 λ CC_30
Hora: 111 R_60 – CC_30
Hora: 112 R_60 – TD
Hora: 113 R_60 – λ
Hora: 114 R_60 – –
Hora: 115 R_60 – –
Hora: 116 R_60 – –
Hora: 117 R_60 – –
Hora: 118 TD – –
Hora: 119 λ λ –
Hora: 120 – TA –
Hora: 121 – TA –
Hora: 122 – CC_40 –
Hora: 123 – CC_40 –
Hora: 124 – CC_40 λ
Hora: 125 – CC_40 TA
Hora: 126 – TD TA
Hora: 127 – TD CC_10
B.7. SCHEDULING RESULTANTE 152

Hora: 128 – λ CC_10


Hora: 129 λ – CC_10
Hora: 130 TA – TD
Hora: 131 CC_40 – TD
Hora: 132 CC_40 – λ
Hora: 133 CC_40 – –
Hora: 134 TD – –
Hora: 135 λ – –
Hora: 136 – – –
Hora: 137 – – –
Hora: 138 – – –
Hora: 139 – – –
Hora: 140 – λ –
Hora: 141 – TA –
Hora: 142 – CC_10 λ
Hora: 143 – CC_10 TA
Hora: 144 – CC_10 TA
Hora: 145 – TD CC_20
Hora: 146 – λ CC_20
Hora: 147 – – CC_20
Hora: 148 λ – TD
Hora: 149 TA – TD
Hora: 150 CC_10 – λ
Hora: 151 CC_10 – –
Hora: 152 CC_10 – –
Hora: 153 TD – –
Hora: 154 λ – –
Hora: 155 – – –
Hora: 156 – – –
Hora: 157 – λ –
Hora: 158 – TA λ
Hora: 159 – TA TA
Hora: 160 – CC_30 R_60
Hora: 161 – CC_30 R_60
Hora: 162 – CC_30 R_60
Hora: 163 – CC_30 R_60
Hora: 164 – TD R_60
Hora: 165 λ TD R_60
Hora: 166 TA λ R_60
Hora: 167 TA – R_60
Hora: 168 CC_20 – R_60
Hora: 169 CC_20 – R_60
Hora: 170 CC_20 – R_60
Hora: 171 TD – R_60
Hora: 172 TD – R_60
Hora: 173 λ – TD
B.7. SCHEDULING RESULTANTE 153

Hora: 174 – – λ
Hora: 175 – λ –
Hora: 176 – TA –
Hora: 177 – R_60 –
Hora: 178 – R_60 –
Hora: 179 – R_60 –
Hora: 180 – R_60 –
Hora: 181 – R_60 –
Hora: 182 – R_60 –
Hora: 183 – R_60 λ
Hora: 184 – R_60 TA
Hora: 185 – R_60 CC_40
Hora: 186 – TD CC_40
Hora: 187 – λ CC_40
Hora: 188 – – TD
Hora: 189 – – λ
Hora: 190 – – –
Hora: 191 – – –
Hora: 192 λ – –
Hora: 193 TA – –
Hora: 194 TA – –
Hora: 195 R_70 – –
Hora: 196 R_70 λ –
Hora: 197 R_70 TA –
Hora: 198 R_70 TA –
Hora: 199 R_70 CC_40 –
Hora: 200 R_70 CC_40 λ
Hora: 201 R_70 CC_40 TA
Hora: 202 R_70 TD TA
Hora: 203 R_70 TD CC_10
Hora: 204 R_70 λ CC_10
Hora: 205 R_70 – CC_10
Hora: 206 TD – TD
Hora: 207 TD – TD
Hora: 208 λ – λ
Hora: 209 – – –
Hora: 210 – – –
Hora: 211 – – –
Hora: 212 – – –
Hora: 213 – – –
Hora: 214 – – –
Hora: 215 – – –
Hora: 216 – λ –
Hora: 217 – TA –
Hora: 218 – CC_10 –
Hora: 219 – CC_10 λ
B.7. SCHEDULING RESULTANTE 154

Hora: 220 – CC_10 TA


Hora: 221 – TD CC_30
Hora: 222 – λ CC_30
Hora: 223 – – CC_30
Hora: 224 – – TD
Hora: 225 – – λ
Hora: 226 – – –
Hora: 227 λ – –
Hora: 228 TA – –
Hora: 229 CC_40 – –
Hora: 230 CC_40 – –
Hora: 231 CC_40 – –
Hora: 232 TD – –
Hora: 233 λ λ λ
Hora: 234 – TA TA
Hora: 235 – TA R_60
Hora: 236 – CC_20 R_60
Hora: 237 – CC_20 R_60
Hora: 238 – CC_20 R_60
Hora: 239 – TD R_60
Hora: 240 – TD TD
Hora: 241 – λ λ
Hora: 242 – – –
Hora: 243 – – –
Hora: 244 – – –
Hora: 245 – – –
Hora: 246 – – –
Hora: 247 – – –
Hora: 248 – – –
Hora: 249 – – –
Hora: 250 – – λ
Hora: 251 – – TA
Hora: 252 – – CC_40
Hora: 253 – – CC_40
Hora: 254 – – TD
Hora: 255 λ – λ
Hora: 256 TA – –
Hora: 257 TA – –
Hora: 258 CC_20 λ –
Hora: 259 CC_20 TA –
Hora: 260 CC_20 φ –
Hora: 261 TD φ –
Hora: 262 TD φ –
Hora: 263 λ φ –
Hora: 264 – φ –
Hora: 265 – φ –
B.7. SCHEDULING RESULTANTE 155

Hora: 266 – φ –
Hora: 267 – φ –
Hora: 268 – φ –
Hora: 269 – φ –
Hora: 270 – φ –
Hora: 271 – φ –
Hora: 272 – φ –
Hora: 273 – φ –
Hora: 274 λ φ –
Hora: 275 TA φ –
Hora: 276 CC_10 φ –
Hora: 277 CC_10 φ –
Hora: 278 CC_10 φ –
Hora: 279 TD φ –
Hora: 280 λ φ –
Hora: 281 – φ –
Hora: 282 – φ λ
Hora: 283 – φ TA
Hora: 284 – φ CC_30
Hora: 285 – φ CC_30
Hora: 286 – φ TD
Hora: 287 – φ λ
Hora: 288 – φ –
Hora: 289 – φ –
Hora: 290 – φ –
Hora: 291 – φ –
Hora: 292 λ φ –
Hora: 293 TA φ –
Hora: 294 CC_30 φ –
Hora: 295 CC_30 φ –
Hora: 296 CC_30 φ –
Hora: 297 TD φ –
Hora: 298 λ φ –
Hora: 299 – φ –
Hora: 300 – φ –
Hora: 301 – φ –
Hora: 302 – φ –
Hora: 303 – φ λ
Hora: 304 – φ TA
Hora: 305 – φ φ
Hora: 306 – φ φ
Hora: 307 – φ φ
Hora: 308 – φ φ
Hora: 309 – φ φ
Hora: 310 – φ φ
Hora: 311 – φ φ
B.8. CAMINHOS RESULTANTES 156

Hora: 312 – φ φ
Hora: 313 – φ φ
Hora: 314 – φ φ
Hora: 315 – φ φ
Hora: 316 – φ φ
Hora: 317 λ φ φ
Hora: 318 TA φ φ
Hora: 319 TA φ φ
Hora: 320 φ φ φ

B.8 Caminhos resultantes


CAMINHO 1
Navio associado: Navio 1
Rotas que compõem o caminho:

< Rota 1 > < Rota 2 > < Rota 3 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela B.25: Possíveis seqüências de rotas que segue


o navio 1

Distância(mn) Rota Rota Rota


1940 3 2 1
1940 1 2 3
2040 3 1 2
2040 2 3 1
2040 2 1 3
2040 1 3 2

Seqüência que o Navio 1 segue:

Tabela B.26: Seqüência de centros consumidores e


refinarias que segue o navio 1 do caminho 1

Carrega-se Ref _70


Descarrega 4420 m3 CC_40
Descarrega 4320 m 3
CC_30
Descarrega 4120 m3 CC_10
B.8. CAMINHOS RESULTANTES 157

Atraca Ref _60


Carrega-se Ref _60
Descarrega 3430 m 3
CC_40
Descarrega 3130 m3 CC_10
Descarrega 3230 m 3
CC_20
Atraca Ref _70
Carrega-se Ref _70
Descarrega 3410 m 3
CC_40
Descarrega 3210 m3 CC_20
Descarrega 3110 m 3
CC_10
Descarrega 3310 m3 CC_30
Atraca Ref _70

Distância total desta seqüência = 2238 mn


CAMINHO 2
Navio associado: Navio 2
Rotas que compõem o caminho:

< Rota 2 > < Rota 3 > < Rota 4 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela B.27: Possíveis seqüências de rotas que segue


o navio 2

Distância(distancia) Rota Rota Rota


1598 4 2 3
1598 3 4 2
1598 3 2 4
1598 2 4 3
1698 4 3 2
1698 2 3 4

Seqüência que o Navio 2 segue:

Tabela B.28: Seqüência de centros consumidores e


refinarias que segue o navio 2 do caminho 2

Carrega-se Ref _70


B.8. CAMINHOS RESULTANTES 158

Descarrega 4340 m3 CC_30


Descarrega 4240 m3 CC_20
Descarrega 4140 m3
CC_10
Atraca Ref _60
Carrega-se Ref _60
Descarrega 4420 m3 CC_40
Descarrega 4120 m3 CC_10
Descarrega 4320 m3
CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 3430 m3 CC_40
Descarrega 3130 m3
CC_10
Descarrega 3230 m3 CC_20
Atraca Ref _70

Distância total desta seqüência = 1697 mn


CAMINHO 3
O Navio associado: Navio 3
Rotas que compõem o caminho:

< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >

Horario de início deste caminho: 0 h


Combinações das rotas:

Tabela B.29: Possíveis seqüências de rotas que segue


o navio 3

Distância(mn) Rota Rota Rota Rota


2245 3 4 2 5
2245 3 2 4 5
2245 5 4 2 3
2245 5 2 4 3
2345 3 5 4 2
2345 3 5 2 4
2345 3 4 5 2
2345 3 2 5 4
2345 5 3 4 2
2345 5 3 2 4
B.8. CAMINHOS RESULTANTES 159

2345 5 4 3 2
2345 5 2 3 4
2345 4 3 2 5
2345 4 5 2 3
2345 4 2 3 5
2345 4 2 5 3
2345 2 3 4 5
2345 2 5 4 3
2345 2 4 3 5
2345 2 4 5 3
2445 4 3 5 2
2445 4 5 3 2
2445 2 3 5 4
2445 2 5 3 4

Seqüência que o Navio 3 segue:

Tabela B.30: Sequencia de centros consumidores e


refinarias que segue o navio 3 do caminho 3

Carrega-se Ref _60


Descarrega 3430 m3 CC_40
Descarrega 3130 m 3
CC_10
Descarrega 3230 m3 CC_20
Atraca Ref _70
Carrega-se Ref _70
Descarrega 4340 m3 CC_30
Descarrega 4140 m 3
CC_10
Descarrega 4240 m3 CC_20
Atraca Ref _60
Carrega-se Ref _60
Descarrega 4420 m 3
CC_40
Descarrega 4120 m 3
CC_10
Descarrega 4320 m3 CC_30
Atraca Ref _60
Carrega-se Ref _60
Descarrega 2450 m 3
CC_40
Descarrega 2350 m3 CC_30
B.9. ESTADO FINAL DOS CENTROS CONSUMIDORES 160

Atraca Ref _70

Distância total desta seqüência = 2245 mn

B.9 Estado final dos centros consumidores


CENTRO CONSUMIDOR 10
Nome: Centro Consumidor de Maceió
Quantidade de Portos: 1
Cidade: Maceió
Estado: Alagoas
Pais: Brasil
Demanda: 110 m3 /h
Volume final do tanque: 98820 m3
Porto 100. Este Porto tem 2 piers:

• pier 1

• pier 2

A Figura B.2 apresenta a quantidade de produto com relação ao tempo no


centro consumidor 10.
CENTRO CONSUMIDOR 20
Nome: Centro Consumidor de Recife
Quantidade de Portos: 1
Cidade: Recife
Estado: Pernambuco
Pais: Brasil
Demanda: 120 m3 /h
Volume final do tanque: 87780 m3
Porto 200. Este Porto tem 2 piers:

• pier 3

• pier 4

A Figura B.3 apresenta a quantidade de produto com relação ao tempo no


ccntro consumidor 20.
CENTRO CONSUMIDOR 30
Nome: Centro Consumidor de Fortaleza
Quantidade de Portos: 1
B.9. ESTADO FINAL DOS CENTROS CONSUMIDORES
Caminhos Scheduling do Atendimento a Centros Consumidores
Figura B.1: Diagrama do scheduling do atendimento a centro consumidor

Factor lambda
Tempo de Atraco
Tempo de Desatraco
Refinaria 60
Refinaria 70
3 Centro Consumidor 10
Centro Consumidor 20
Centro Consumidor 30
Centro Consumidor 40

161
0 10 20 30 40 50 60 70 80 90 100110120130140150160170180190200210220230240250260270280290300310320
Horas
B.9. ESTADO FINAL DOS CENTROS CONSUMIDORES 162

34000 Centro Consumidor 10


Volume de produto estocado (m³)
32000
30000
28000

0 50 100 150 200 250 300


Tempo (horas)

Figura B.2: Volume de produto estocado no centro consumidor 10

Centro Consumidor 20
35000
Volume de produto estocado (m³)
30000
25000
20000

0 50 100 150 200 250 300


Tempo (horas)

Figura B.3: Volume de produto estocado no centro consumidor 20


B.9. ESTADO FINAL DOS CENTROS CONSUMIDORES 163

Cidade: Fortaleza
Estado: Ceara
Pais: Brasil
Demanda: 130 m3 /h
Volume final do tanque: 101080 m3
Porto 300. Este Porto tem 2 piers:

• pier 5

• pier 6

A Figura B.4 apresenta a quantidade de produto com relação ao tempo no


centro consumidor 30.

Centro Consumidor 30
35000
Volume de produto estocado (m³)
30000
25000
20000

0 50 100 150 200 250 300


Tempo (horas)

Figura B.4: Volume de produto estocado no centro consumidor 30

CENTRO CONSUMIDOR 40
Nome: Centro Consumidor de Rio de Janeiro
Quantidade de Portos: 1
Cidade: Rio de Janeiro
Estado: Rio
Pais: Brasil
Demanda: 140 m3 /h
B.10. ESTADO FINAL DAS REFINARIAS 164

Volume final do tanque: 100230 m3


Porto 400. Este Porto tem 2 piers:

• pier 7

• pier 8

A Figura B.5 apresenta a quantidade de produto com relaçãoa o tempo no


centro consumidor 40.

Centro Consumidor 40
35000
Volume de produto estocado (m³)
30000
25000
20000

0 50 100 150 200 250 300


Tempo (horas)

Figura B.5: Volume de produto estocado no centro consumidor 40

B.10 Estado final das refinarias


REFINARIA 60
Nome: Refinaria Duque de Caixas
Quantidade de Portos: 1
Cidade: Duque de Caixas
Estado: RJ
Pais: Brasil
Porto 600.
Este Porto tem 2 piers:
B.11. ESTADO FINAL DOS NAVIOS 165

• pier 11

• pier 12

REFINARIA 70
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Porto 700.
Este Porto tem 2 piers:

• pier 13

• pier 14

B.11 Estado final dos navios


NAVIO 1
Descrição: Navio uno
Calado: 15 m
Comprimento: 71.9 m
Velocidade: 11 nós
Velocidade de descarga: 1100 m3 /h
Tempo de atracamento:

Tabela B.31: Tempo de atracamento do navio 1

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 1 1 2 1 2

Tempo de desatracamento:

Tabela B.32: Tempo de desatracamento do navio 1

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo (h): 1 2 1 1 2 1 2

Capacidade de carga do navio: 23040 m3


Volume final de produto no navio: 0 m3
B.11. ESTADO FINAL DOS NAVIOS 166

NAVIO 2
Descrição: Navio dois
Calado: 14 m
Comprimento: 52 m
Velocidade: 12 nós
Velocidade de descarga: 1200 m3 /h
Tempo de atracamento:

Tabela B.33: Tempo de atracamento do navio 2

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1

Tempo de desatracamento:

Tabela B.34: Tempo de desatracamento do navio 2

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1

Capacidade de carga do navio: 40940 m3


Volume final de produto no navio é: 400 m3

NAVIO 3
Descrição: Navio três
Calado: 13 m
Comprimento: 73.9 m
Velocidade: 13 nós
Velocidade de descarga: 1300 m3 /h
Tempo de atracamento:

Tabela B.35: Tempo de atracamento do navio 3

Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 2 2 1 1 1 1 1

Tempo de desatracamento:

Tabela B.36: Tempo de desatracamento do navio 3

Ref ou CC: 10 20 30 40 50 60 70
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 167

Unidade de Tempo(h): 2 2 1 1 1 1 1

Capacidade de carga do navio: 29600 m3


Volume final no navio: 300 m3

B.12 Gráficos dos tempos de atracação nos piers


PIER 11
Profundidade: 14 m
Largura: 34 m
Comprimento: 74 m
A Figura B.6 apresenta o tempo que os navios podem atracar no pier 11.

Navios Os navios podem atracar no Piers 11

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.6: Gráficos dos tempos que os navios podem atracar no pier 11

PIER 12
Profundidade: 15 m
Largura: 35 m
Comprimento: 75 m
A Figura B.7 apresenta o tempo que os navios podem atracar no pier 12.
PIER 13
Profundidade: 16 m
Largura: 36 m
Comprimento: 76 m
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 168

Navios Os navios podem atracar no Piers 12

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.7: Gráficos dos tempos que os navios podem atracar no pier 12

Navios Os navios podem atracar no Piers 13

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.8: Gráficos dos tempos que os navios podem atracar no pier 13
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 169

A Figura B.8 apresenta o tempo que os navios podem atracar no pier 13.
PIER 14
Profundidade: 17 m
Largura: 37 m
Comprimento: 77 m
A Figura B.9 apresenta o tempo que os navios podem atracar no pier 14.

Navios Os navios podem atracar no Piers 14

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.9: Gráficos dos tempos que os navios podem atracar no pier 14

PIER 1
Profundidade: 11 m
Largura: 31 m
Comprimento: 71 m
A Figura B.10 apresenta o tempo que os navios podem atracar no pier 1.
PIER 2
Profundidade: 12 m
Largura: 32 m
Comprimento: 72 m
A Figura B.11 apresenta o tempo que os navios podem atracar no pier 2.
PIER 3
Profundidade: 13 m
Largura: 33 m
Comprimento: 73 m
A Figura B.12 apresenta o tempo que os navios podem atracar no pier 3.
PIER 4
Profundidade: 14 m
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 170

Navios Os navios podem atracar no Piers 1

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.10: Gráficos dos tempos que os navios podem atracar no pier 1

Navios Os navios podem atracar no Piers 2

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.11: Gráficos dos tempos que os navios podem atracar no pier 2
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 171

Navios Os navios podem atracar no Piers 3

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.12: Gráficos dos tempos que os navios podem atracar no pier 3

Largura: 34 m
Comprimento: 74 m
A Figura B.13 apresenta o tempo que os navios podem atracar no pier 4.

Navios Os navios podem atracar no Piers 4

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.13: Gráficos dos tempos que os navios podem atracar no pier 4

PIER 5
Profundidade: 15 m
Largura: 35 m
Comprimento: 75 m
A Figura B.14 apresenta o tempo que os navios podem atracar no pier 5.
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 172

Navios Os navios podem atracar no Piers 5

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.14: Gráficos dos tempos que os navios podem atracar no pier 5

PIER 6
Profundidade: 16 m
Largura: 36 m
Comprimento: 76 m
A Figura B.15 apresenta o tempo os navios podem atracar no pier 6.

Navios Os navios podem atracar no Piers 6

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.15: Gráficos dos tempos que os navios podem atracar no pier 6

PIER 7
Profundidade: 17 m
Largura: 37 m
B.12. GRÁFICOS DOS TEMPOS DE ATRACAÇÃO NOS PIERS 173

Comprimento: 77 m
A Figura B.16 apresenta o tempo que os navios podem atracar no pier 7.

Navios Os navios podem atracar no Piers 7

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.16: Gráficos dos tempos que os navios podem atracar no pier 7

PIER 8
Profundidade: 11 m
Largura: 31 m
Comprimento: 71 m
A Figura B.17 apresenta o tempo que os navios podem atracar no pier 8.

Navios Os navios podem atracar no Piers 8

Pode atracar
Nao pode atracar
3

0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320
Tempo (horas)

Figura B.17: Gráficos dos tempos que os navios podem atracar no pier 8
Referências Bibliográficas

Al-Yakoob, S. M. (1997), Mixed-Integer Mathematical Programming Optimiza-


tion Models and Algorithms for an Oil Tanker Routing and Scheduling
Problem, PhD thesis, Virginia Polytechnic Institute and State University.

Almeida Lima, C. A. d. (2002), Riscos de atrasos na cadeia logística de supri-


mento de petróleo, Master dissertation, Universidade Federal de Santa
Catarina.

Arranz, L. (2005), Imágenes vectoriales y mapas de bits, Centro Nacional de In-


formación y Comunicación Educativa, Madrid. Ultima visita: 11/8/2008.
URL: http://observatorio.cnice.mec.es/modules.php?op=modload&name
=News&file=article&sid=293

Augusto, O. B. & Kawano, A. (1998), ‘A mixed continuous and discrete non-


linear constrained algorithm for optimizing ship hull structural design’,
Ocean Engng. 25, 793–811.

Boardman, B. S., Malstrom, E. M., Butler, D. P. & Cole, M. H. (1997), Com-


puter assisted routing of intermodal shipments, in ‘Proceedings of the
21st International Conference on Computers and Industrial Engineering’,
Elsevier Science Publishers Ltd., Essex, UK, pp. 311–314.

Calégari, P. R. (1999), Parallelization of Population-Based Evolutionary Algo-


rithms for Combinatorial Optimization Problems, PhD thesis, École Poly-
technique Fédérale de Lausanne.

Cutland, N. (1997), Computability: An Introduction to Recursive Function The-


ory, Cambridge University Press.

Fagerholt, K. (2001), ‘Ship scheduling with soft time windows: An optimisation


based approach’, European Journal of Operational Research 13, 559–571.

Fagerholt, K. & Christiansen, M. (2000), ‘A travelling salesman problem with


allocation, time window and precedence constraints - an application

174
REFERÊNCIAS BIBLIOGRÁFICAS 175

to ship scheduling’, International Transactions in Operational research


7, 231–244.

González Vargas, G. & González Aristizábal, F. (2007), ‘Metaheurísticas apli-


cadas al ruteo de vehículos. un caso de estudio. parte 2: algoritmo
genético, comparación con una solución heurística’, Revista Ingeniería
e Investigación 27, 149–157.

Hartley, R. (1987), Theory of Recursive Functions and Effective Computability,


McGraw–Hill Book Copany.

Iskendar, Suprayogi & Yamato, H. (2001), ‘Ship routing design for the oily
liquid waste collection’, The Japan Society of Naval Architects and Ocean
Engineers 190, 325–335.

Jones, N. D. (1997), Computability and Complexity: From a Programming Per-


spective, Foundation of Computing Series.

Kim, D. & Barnhart, C. (1997), ‘Multimodal express shipment service design:


Models and algorithms’, Computer Industrie and Engineering 33, 685–688.

Larman, C. (2003), UML y Patrones – Introducción al Análisis y Diseño Orien-


tado a Objetos, Addison Wesley Longman.

Lippman, S. B. (2002), Essential C++, Addison Wesley.

Malandraki, C. & Daskin, M. S. (1992), ‘Time dependent vehicle routing prob-


lems: Formulations, properties and heuristic algorithms’, Transportation
Science 6–3, 185–198.

Paolucci, M., Sacile, R. & Boccalatte, A. (2002), ‘Allocating crude oil supply
to port and refinery tanks: a simulation–based decision support system’,
Decision Support Systems 33, 39–54.

Pereira Motta Franco, K. (2003), Desenvolvimento de um sistema inteligente


para auxiliar a escolha de sistema para produção no mar, Master disser-
tation, Universidade Estadual de Campinas.

Persson, J. A. & Gothe-Lundgren, M. (2004), ‘Shipment planning at oil refiner-


ies using column generation and valid inequalities’, European Journal of
Operational Research pp. 2–22.

Pinto Junior, O. P. F. (2001), Simulação e otimização; desenvolvimento de


uma ferramenta de análise de decisão para suprimento de refinarias de
REFERÊNCIAS BIBLIOGRÁFICAS 176

petróleo através de uma rede de oleodutos, Master dissertation, Universi-


dade Federal de Santa Catarina.

Reis da Silva, P. (2004), Transporte marítimo de petróleo e derivados na costa


brasileira: Estrutura e implicações ambientais, Master dissertation, Uni-
versidade Federal de Rio de Janeiro.

Resende, M. G. & González Velarde, J. L. (2003), ‘Grasp: Greedy randomized


adaptive search procedures’, Revista Iberoamericana de Inteligencia Artifi-
cial 19, 61–76.

Ronen, D. (1983), ‘Cargo ships routing and scheduling: Survey of models and
problems’, European Journal of Operational Reserch 2, 119–126.

Rumbaugh, J., Jacobson, I. & Booch, G. (2004), The Unified Modeling Lan-
guage Reference Manual, Addison Wesley.

Schut, M. C. (2005), ‘Distributed ship scheduling with partially known time


windows’, Vrije Universiteit, Amsterdam (The Netherlands).

Shih, L.-H. (1997), ‘Planning of fuel coal imports using a mixed integer
programming method’, International Journal of Production Economics
51(3), 243–249.

Soares de Medeiros, E. (1999), Metodologia para implementação do sistema de


custeio baseado em atividades (ABC) nos serviços logísticos da industria
de exploração e produção de petróleo: Aplicação no provedor de trans-
porte do órgão de exploração e produção da Petrobras na bacia de Cam-
pos, Master dissertation, Universidade Federal de Santa Catarina.

Soletti, J. I., Carvalho, S. H. V., Luna, H. P. L. & Soletti, L. (2007), ‘Plane-


jamento e distribuição de derivados de petroleo via transporte marítimo’,
XXVIII Congresso ìbero Latino Americano Sobre Métodos Computacionais
em Engenharia - CILAMCE, 2007. Porto - Portugal: CD ROM, 2007.

Soletti, J. I., Carvalho, S. H. V., Soletti, L., Carvalho, D. & Pucu, P. A. B. (2007),
‘Simulação numérica de transporte naval para distribuição de produtos
petroquímicos’, Anais do X Simpósio de Pesquisa Operacional e Logística
da Marinha. Rio de Janeiro: CD ROM, 2007.

Soletti, J. I., Carvalho, S. H. V., Soletti, L. & Costa, C. A. P. (2004a), ‘Estudo


do dimensionamento de uma frota de navios para o transporte de deriva-
dos de petróleo por cabotagem’, XV Congresso Brasileiro de Engenharia
Química. Curitiba - PR. Anais do XV COBEQ: CD-ROM, 2004.
REFERÊNCIAS BIBLIOGRÁFICAS 177

Soletti, J. I., Carvalho, S. H. V., Soletti, L. & Costa, C. A. P. (2004b), ‘Maritime


transportation scheduling of petrochemical products’, XXV Iberian Latin
American Congress on Computational Methods in Engineering. Recife -
PE. Anais do XXV CILAMCE: CD-ROM, 2004.

Soletti, L. (2006), Planejamento e distribuição de derivados de petróleo


via transporte marítimo, Master dissertation, Universidade Federal de
Alagoas.

Terumichi Ono, R. (2001), Estudo de viabilidade do transporte marítimo de


contêiners por cabotagem na costa brasileira, Master dissertation, Uni-
versidade de São Paulo.
Livros Grátis
( http://www.livrosgratis.com.br )

Milhares de Livros para Download:

Baixar livros de Administração


Baixar livros de Agronomia
Baixar livros de Arquitetura
Baixar livros de Artes
Baixar livros de Astronomia
Baixar livros de Biologia Geral
Baixar livros de Ciência da Computação
Baixar livros de Ciência da Informação
Baixar livros de Ciência Política
Baixar livros de Ciências da Saúde
Baixar livros de Comunicação
Baixar livros do Conselho Nacional de Educação - CNE
Baixar livros de Defesa civil
Baixar livros de Direito
Baixar livros de Direitos humanos
Baixar livros de Economia
Baixar livros de Economia Doméstica
Baixar livros de Educação
Baixar livros de Educação - Trânsito
Baixar livros de Educação Física
Baixar livros de Engenharia Aeroespacial
Baixar livros de Farmácia
Baixar livros de Filosofia
Baixar livros de Física
Baixar livros de Geociências
Baixar livros de Geografia
Baixar livros de História
Baixar livros de Línguas
Baixar livros de Literatura
Baixar livros de Literatura de Cordel
Baixar livros de Literatura Infantil
Baixar livros de Matemática
Baixar livros de Medicina
Baixar livros de Medicina Veterinária
Baixar livros de Meio Ambiente
Baixar livros de Meteorologia
Baixar Monografias e TCC
Baixar livros Multidisciplinar
Baixar livros de Música
Baixar livros de Psicologia
Baixar livros de Química
Baixar livros de Saúde Coletiva
Baixar livros de Serviço Social
Baixar livros de Sociologia
Baixar livros de Teologia
Baixar livros de Trabalho
Baixar livros de Turismo

Você também pode gostar