Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientadores:
João Inacio Soletti. DSc
Sandra Helena Vieira de Carvalho. DSc
Orientadores:
i
Resumen
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
iv
SUMÁRIO v
Sumário
I Introdução 1
1 Estado da arte 4
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
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
8 Conclusão 70
10 Conceitos prévios 75
11 Classes 76
12 Diagrama de classes 83
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
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
Lista de Figuras
Lista de Tabelas
Introdução
1
2
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;
Estado da arte
4
5
Scheduling de escoamento de
petróleo bruto de plataformas
marítimas
7
8
Problema a resolver
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
Conceitos prévios
Uma pergunta que se pode fazer neste momento é, como calcular todas as
12
3.2. CÁLCULO DE TODAS AS ROTAS POSSÍVEIS 13
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.
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
Quantidade_Colunas = CP + 2 ∗ CR (3.2)
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
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
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
Desta forma a quantidade de divisões de cada coluna é dada pela Equação 3.5
2CP
Elementos[NC] = (3.6)
Div[NC]
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
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
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.
CPn = n! (3.7)
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
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
Classes
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()
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
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()
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()
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()
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()
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()
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()
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()
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
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()
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()
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()
Diagrama de Classes
41
42
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
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 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;
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
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
Rota1 → Rota2
1 4 4|9
6
?
20
5
10
Seqüência 1: 20 → 2 → 1 → 3 → 10 → 20 → 4 → 1 → 3 → 10
ou
Dist_total_bruto = 1132 + G[10, 20] = 1132 + 400 = 1532
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
ou
Distancia = 1132 − G[20, 4] + G[10, 4] = 1132 − 204 + 104 = 1032
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
Métodos e fundamentos
Para a implementação desta função utilizaram-se além da linguagem C++, as
outras linguagens:
(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.
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
• 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 ;
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.
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.
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:
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
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
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:
C1 R1 R3 R5
C2 R2 R4 R6
C3 R1 R2 R5
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.
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
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
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:
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:
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
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:
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:
Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo (h): 1 2 1 1 2 1
Tempo de desatracacamento:
Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo (h): 1 2 1 1 2 1
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:
Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 1 2 2 2 2 1
Tempo de desatracamento:
Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 1 2 2 2 2 1
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:
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
Plat ou Ref: 10 20 1 2 3 4
Unidade de Tempo(h): 2 2 1 1 1 1
7.1.5 Caminhos
CAMINHO 1
Navio associado: Navio 1
Rotas que compõem o caminho:
CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho:
CAMINHO 3
Navio associado a este caminho: Navio 3
Rotas que compõem o caminho:
< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >
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.
CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho:
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 >
Conclusão
70
Parte III
Scheduling de atendimento a
centros consumidores
71
72
• Definir o problema;
73
• Conclusão parcial.
Capítulo 9
Problema a resolver
• Não é permitido que haja mais de um navio por cada piers ao mesmo
tempo;
74
Capítulo 10
Conceitos prévios
75
Capítulo 11
Classes
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()
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()
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()
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()
Diagrama de classes
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
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
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
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.
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
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.
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.
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.
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
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.
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.
• 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
• 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 é:
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 é:
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 é:
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 é:
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 é:
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:
Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 1 2 1 2
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 1 2 1 2
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
Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 2 2 1 1
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 1 2 2 2 1 1
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:
Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 2 2 1 1 1 1
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 60 70
Unidade de Tempo: 2 2 1 1 1 1
14.1.5 Caminhos
CAMINHO 1
Navio associado a este caminho: Navio 1
Rotas que compõem o caminho:
CAMINHO 2
Navio associado a este caminho: Navio 2
Rotas que compõem o caminho são:
CAMINHO 3
Navio associado a este caminho: Navio 3
Rotas que compõem o caminho:
< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >
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
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.
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
< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >
Conclusão
103
Parte IV
104
105
Apêndice
106
Apêndice A
Relatório de scheduling do
escoamento de petróleo bruto de
plataformas marítimas
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
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
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
ROTA 2
As refinarias de saída e chegada (Ref_S e Ref_C) e plataformas (Plat) que com-
A.3. ROTAS 110
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:
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:
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:
647 10 4 3 20
647 10 3 4 20
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:
Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 1 1 2 1 2 2
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:
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:
Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 2 2 2 1 1 1
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:
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:
Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 2 2 1 1 1 1 1 1
CAMINHO 2
Navio associado a este caminho:
Código: 2
Velocidade: 12 nós
Capacidade: 24000 m3
Rotas que compõem o caminho:
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 >
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
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
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: 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 φ φ φ
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
CAMINHO 2
Navio associado a este caminho:
Código: 2
Velocidade: 12 nós
Capacidade: 24000 m3
A.8. CAMINHOS RESULTANTES 129
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 >
2445 2 3 5 4
2445 2 5 3 4
Plataforma 1
30000
Volume de petróleo produzido (m³)
20000
10000
0
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
Plataforma 3
Volume de petróleo produzido (m³)
50000
30000
10000
0
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
REFINARIA 20
Nome: Refinaria Landulpho Alves
Quantidade de Portos: 1
Cidade: São Francisco do Conde
Estado: BA
Pais: Brasil
Volume descarregado: 23930 m3
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:
Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 1 1 2 1 2 2
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
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:
Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 1 2 2 2 2 1 1 1
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:
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:
Plat ou Ref: 10 20 1 2 3 4 5 6
Unidade de Tempo(h): 2 2 1 1 1 1 1 1
Relatório de scheduling do
atendimento a centros
consumidores
• 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
• 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:
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
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:
775 70 40 30 10 60
775 70 10 30 40 60
784 70 30 40 10 60
784 70 10 40 30 60
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:
ROTA 4
Refinarias de saída e chegada (Ref_S e Ref_C) e os centros consumidores (CC)
B.3. ROTAS 142
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:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 1 1 2 1 2
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 1 1 2 1 2
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:
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
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1
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:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 2 2 1 1 1 1 1
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 2 2 1 1 1 1 1
< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >
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
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: 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: 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 φ φ φ
< Rota 2 > < Rota 4 > < Rota 5 > < Rota 3 >
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
• pier 1
• pier 2
• pier 3
• pier 4
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
Centro Consumidor 20
35000
Volume de produto estocado (m³)
30000
25000
20000
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
Centro Consumidor 30
35000
Volume de produto estocado (m³)
30000
25000
20000
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
• pier 7
• pier 8
Centro Consumidor 40
35000
Volume de produto estocado (m³)
30000
25000
20000
• 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
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 1 1 2 1 2
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo (h): 1 2 1 1 2 1 2
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:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1
Tempo de desatracamento:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 1 2 2 2 2 1 1
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:
Ref ou CC: 10 20 30 40 50 60 70
Unidade de Tempo(h): 2 2 1 1 1 1 1
Tempo de desatracamento:
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
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
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
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.
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
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
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
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.
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
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.
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.
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.
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
174
REFERÊNCIAS BIBLIOGRÁFICAS 175
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.
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.
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.
Shih, L.-H. (1997), ‘Planning of fuel coal imports using a mixed integer
programming method’, International Journal of Production Economics
51(3), 243–249.
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.