Buscar

Trabalho de Orientação a Objetos

Prévia do material em texto

Universidade Federal de Juiz de Fora 
Departamento de Ciência da Computação 
 
 
Trabalho de Orientação a Objetos 
 
1. Descrição do problema 
 
O governo brasileiro está interessado em mapear o mar sob seus domínios em busca de possíveis lugares para prospecção de 
petróleo. Dada a grande extensão territorial marítima do Brasil, o governo propõe que empresas privadas realizem a análise 
da viabilidade de extração de petróleo desse território. A proposta do governo foi organizar uma disputa entre as empresas 
interessadas. Para a competição, as empresas fazem uso de robôs submarinos. Estes são lançados ao mar, a partir de um 
helicóptero, sore uma região onde se acredita haver petróleo. Esses robôs atingem o solo submarino em posições aleatórias. 
Duas companhias competidoras lançam robôs semelhantes para competir por poços na mesma região. Vence a disputa a 
companhia cujos robôs conseguirem produzir mais petróleo durante um período pré-determinado. Os robôs são esquipados 
com diferentes sensores que fornecem, constantemente, informações como posição do robô, pressão subterrânea no local, 
coeficiente de dureza do solo, profundidade do leito submarino, etc. As empresas fazem uso de robôs de análise, perfuração 
e prospecção. Os primeiros são responsáveis por analisar o espaço ao seu redor, verificando a profundidade, pressão e 
dureza do solo. Sabe-se que a produção de petróleo em um local é, na teoria, diretamente proporcional à pressão subterrânea 
no local. Isso quer dizer que locais profundos possuem mais chances de ter quantidades maiores de petróleo. Contudo, isso 
não é garantia. Sabe-se, também, que quanto mais duro for o local, mais tempo demorará a perfurar. Após analisar tudo isso, 
um robô de perfuração é enviado ao local. O tipo de robô de perfuração a ser enviado dependerá da análise do tipo de solo. 
Solos duros exigem um robô de broca de diamante. Solos intermediários exigem um robô com broca de titânio. Já solos 
macios exigem um robô de broca de aço temperado. Dependendo do tipo de solo, se gastará mais tempo para perfurar. Os 
robôs perfuradores só podem atuar nos seus tipos específicos de solo. Após a perfuração, um robô de prospecção é enviado 
para realizar a extração do petróleo. O objetivo dele é, dentro do tempo restante para finalizar a disputa, extrair a maior 
quantidade possível de petróleo. 
 
Seu trabalho é (i) desenvolver o cenário onde os robôs atuarão e (ii) manipular os robôs e controlar a disputa. 
 
2. Criação do Terreno Submarino 
 
Nessa primeira etapa do projeto, seu objetivo será o de criar o cenário de terreno submarino. Um terreno consiste de uma 
região quadrada/retangular, com variações de profundidade, pressão e dureza do solo. Os limites extremos do terreno 
funcionam como paredes – ou seja, robôs não podem ultrapassar esses limites. O terreno é dividido em pequenas unidades 
quadradas de espaço, chamadas de células. As células são identificadas por suas coordenadas cartesianas. Cada célula é 
identificada por quatro coordenadas [(x1,y1) (x2,y2) (x3,y3) (x4,y4)] – sendo todo “x” e todo “y” números naturais. A 
origem do terreno é a célula no canto inferior esquerdo do terreno, com coordenadas [(0,0) (1,0) (1,1) (0,1)]. Cada célula 
possui um conjunto de propriedades associadas: 
 
 Profundidade: um valor aleatório entre [0, 1.000] (medido em metros) 
 Dureza: um valor aleatório entre [0, 10] 
 Pressão subterrânea: um valor calculado em função da profundidade 
 
O valor da profundidade de cada célula deve ser determinado de forma randômica. O mesmo vale para o coeficiente de 
dureza. A pressão subterrânea, para simplificação, deve ser considerada da seguinte forma: para cada 10 metros de 
profundidade, a pressão sobe em 1 unidade. Na profundidade 0, a pressão é, também, 0. Para começar a editar o terreno, é 
preciso saber as dimensões do mesmo. Para isso, será informado, via arquivo TXT (“medidasTerreno.txt”), a largura e o 
comprimento do terreno, ambos em metros. De posse desses valores, deve-se dividir o terreno em células quadradas de igual 
tamanho. Para cada célula, o sistema deve gerar, aleatoriamente, uma quantidade de petróleo (em litros) para ela. Uma 
célula pode possuir, no mínimo, 0 litro e, no máximo, 10.000 litros de petróleo. Embora seja um processo aleatório, os 
valores devem seguir à teoria de que regiões com maior pressão possuem maiores chances de terem maiores quantidades de 
petróleo. Assim, deve ser definida uma fórmula que relacione a pressão de uma célula com o volume de petróleo 
possivelmente existente na mesma. A definição dos volumes de petróleo nas células devem seguir a estratégia abaixo: 
 
 Aleatoriamente, seleciona-se uma célula X do terreno. 
 Randomicamente, define-se um valor de volume de petróleo para ela, no intervalo [0, 10.000]. 
 Aleatoriamente, pega-se uma outra célula do terreno, Y 
 Se Y tiver pressão menor que a célula X, o seu volume de petróleo será definido randomicamente. 
 Se Y tiver pressão maior, haverá mais possibilidade de ela possuir mais petróleo que X 
Essa possibilidade deve ser calculada da seguinte forma: 
 
o Pressão de Y é [0,30]% maior que X: Y tem 20% de chance de possuir mais petróleo que X. 
o Pressão de Y é [31,60]% maior que X: Y tem 40% de chance de possuir mais petróleo que X. 
o Pressão de Y é [61,90]% maior que X: Y tem 60% de chance de possuir mais petróleo que X. 
o Pressão de Y é [91,100]% maior que X: Y tem 80% de chance de possuir mais petróleo que X. 
o Pressão de Y é [101,∞]% maior que X: Y tem 100% de chance de possuir mais petróleo que X. 
 
 O processo retorna para o terceiro passo, onde outra célula é selecionada e comparada com X 
 O processo continua até que todas as células sejam analisadas e tenha a quantidade de petróleo definida 
 
Exemplo: X possui pressão de 30. Y possui pressão de 45. Logo, Y possui 50% mais pressão que X. De outra forma, a 
pressão em Y é 50% maior que a pressão de X. Isso quer dizer que Y possui 40% de chance de possuir mais petróleo que X. 
Deve-se definir uma estratégia para calcular essa probabilidade. Se esse cálculo de probabilidade cair dentro desses 40%, a 
quantidade de petróleo deverá ser calculada randomicamente, mas deverá, obrigatoriamente, ser maior que a quantidade 
em X – até o limite máximo de 10.000 litros. Se o cálculo de probabilidade ficar fora desses 40%, então a quantidade de 
petróleo em Y será calculada randomicamente, mas podendo ser menor, igual ou maior que a quantidade em X. 
 
OBS: Uma descrição completa do terreno deve ser salva em formato TXT (“terreno.txt”). Essa descrição é o resultado 
dessa primeira parte do projeto e será utilizada na segunda parte. Se quiser, o grupo pode criar uma apresentação em 
interface gráfica do terreno. Contudo, isso não desobriga a criação do arquivo TXT. O arquivo deve ser salvo em um lugar 
que possa ser facilmente recuperado posteriormente. A segunda parte do projeto deve ser capaz de ler o arquivo TXT e 
recriar o terreno, de acordo com as informações presentes no arquivo. 
 
OBS: Um relatório deve ser emitido, também em formato TXT (“relatório.txt”), informando a quantidades de células 
geradas, bem como as características de cada uma. Esse relatório serve apenas para acompanhamento do trabalho. Esse 
relatório, diferentemente do arquivo de descrição do terreno, deve ser de fácil leitura por qualquer pessoa. Se desejar, o 
grupo pode criar uma representação gráfica do terreno, com suas células e suas respectivas especificações. No caso de uso 
de interface gráfica, dispensa-se a geração do relatório TXT. 
 
Abaixo, uma ideia de terreno e suas respectivas células. 
 
 
Exemplo de divisão de terreno 
Coordenadas [(0,0) (1,0) (1,1) (0,1)] 
 
Observações 
 
 Uso de interface gráfica é recomendado,embora não obrigatório. 
 
 Para iniciar a criação e configuração do terreno, o usuário deve apertar um único botão (no caso de uso de interface 
gráfica) ou realizar uma única chamada ao método MAIN. Isso facilitará a execução, teste e avaliação dessa 
primeira parte do projeto. Ao final da execução, a descrição e o relatório devem ser gerados e armazenados. 
 
3. Gestão da Prospecção 
 
A ideia dessa segunda parte do projeto é tentar fazer com que os robôs encontrem os locais com maior potencial de 
produção de petróleo. O sistema deve ser capaz de ler o arquivo com a descrição do terreno submarino (“terreno.txt”). Em 
seguida, o sistema deve configurar a disputa. Deve ser capaz de definir um tempo para a disputa. Isso deve ser feito via 
arquivo TXT (“tempo.txt”). O tempo total de disputa deve ser informado em minutos, mas convertido pelo sistema em 
segundos. Cada empresa possui um nome e um identificador. Cada empresa conta com três robôs de análise, três robôs de 
perfuração (sendo um robô para cada tipo de broca) e três robôs de prospecção. Todos os robôs devem ser identificados com 
código e deve ser possível identificar os robôs de cada empresa. 
 
3.1. Posicionamento dos Robôs 
 
Ao começar a disputa, um robô de analise da primeira empresa é distribuído aleatoriamente no terreno. Em seguida, um 
robô da segunda empresa também é distribuído aleatoriamente no terreno. Depois, um segundo robô da primeira empresa é 
distribuído, e o processo continua até que todos os robôs de análise das duas empresas sejam distribuídos. Dois robôs de 
uma mesma empresa nunca podem ocupar a mesma célula em um mesmo instante. Contudo, robôs de empresas diferentes 
podem (desconsidere do fato de robôs em uma mesma célula entrarem em contato físico). Logo que um robô for distribuído 
em uma célula, esta deve ser marcada como ocupada. Assim, o sistema não pode deixar que um segundo robô de uma 
mesma empresa ocupe essa célula, no mesmo instante de tempo. Os limites extremos do terreno funcionam como paredes – 
ou seja, os robôs não podem sair desses limites. Uma vez que todos os robôs estejam posicionados, estes dão início às suas 
estratégias de ação. Os robôs devem fazer a análise das células e decidir se compensa ou não realizar uma perfuração na 
mesma. Os robôs não sabem a quantidade de petróleo existente em cada célula. Seu grupo deverá definir uma estratégia, 
válida para as duas empresas, para que o robô de análise diga se vale a pena ou não perfurar a célula onde ele se encontra. 
Se o robô decidir que não vale a pena, ele poderá analisar outras células, até o limite de 5. Contudo, essas células precisam 
concentradas em uma área quadrada, chamada seção, de até 25 células, sendo a sua célula de origem a célula central da 
seção (a célula onde o robô foi inserido inicialmente). Contudo, se o robô decidir analisar outra célula, a célula corrente 
(onde ele se encontra) é descartada por ele. Dentro da sua seção, o robô precisa saber quais células ele já analisou, para 
evitar desobedecer essa regra. Além disso, os robôs devem manter um registro das células analisadas de forma a evitar que 
um robô da mesma empresa volte a analisar a mesma célula já analisada por um outro robô da empresa. Robôs de empresas 
diferentes não se comunicam. Logo, um robô de uma empresa pode analisar um célula já analisada por um robô de outra 
empresa. 
 
 
Exemplo de seções de exploração 
 
Existe um custo para os robôs realizarem a análise do solo da célula. Esse custo é de 10% do tempo total da disputa para 
cada análise. Isso quer dizer que cada análise deve consumir 10% do tempo total definido para a disputa. Somente após esse 
tempo, o robô pode mudar de célula ou enviar um comando de autorização de perfuração. Crie uma estratégia para controlar 
a passagem desse tempo. 
 
3.2 Perfuração 
 
Após o robô de análise decidir que uma célula deva ser perfurada, ele envia um comando para algum robô de perfuração. O 
robô a ser escolhido dependerá do tipo de solo (macio/duro/intermediário). A perfuração consome uma porcentagem do 
tempo total da disputa. Essa porcentagem depende do tipo de solo. Terrenos macios (dureza entre [0,3]) consomem, no 
máximo, 16% do tempo total da disputa; terrenos médios (dureza entre [3.1, 6]) consomem, no máximo, 24% do tempo 
total; terrenos duros (dureza entre [6.1, 10]) consomem, no máximo, 36% do tempo total. Desconsidere o tempo que o robô 
pode levar para chegar ao local de perfuração. Um robô de perfuração só pode perfurar uma única vez. A perfuração sempre 
é feita considerando-se toda a profundidade da célula. Logo, o tempo total de perfuração vai variar conforme a profundidade 
da célula. Para terrenos macios, o tempo de perfuração é de 4% do tempo total a cada 250m. Para terrenos intermediários, o 
tempo de perfuração é de 6% do tempo total a cada 250m. Para terrenos duros, o tempo é de 9% do tempo total a cada 
250m. Se a profundidade de uma célula for abaixo de 250m, deve-se considerar o consumo de 4%, 6% ou 9% do tempo, 
dependendo do solo. Se uma célula for perfurada, então não pode haver outra perfuração nessa célula. Portanto, os robôs 
precisam verificar se há um poço perfurado na célula. Crie uma estratégia para controlar a passagem do tempo de 
perfuração. Observe que quanto mais profundo, mas o tempo gasto. Logo, isso deve ser considerado na sua estratégia que 
verifica se um poço vale ou não a pena ser perfurado. 
 
3.2 Prospecção 
 
Após a perfuração, o robô de perfuração envia um comando para o robô de extração. Desconsidere o tempo gasto para esse 
robô chegar ao local da perfuração. A prospecção (extração de petróleo do poço) realizada por um robô consome o restante 
do tempo total da disputa – ou seja, o tempo total menos o tempo gasto pelo robô de análise e pelo robô de perfuração. O 
robô de extração possui capacidade de sugar 100 litros por segundo. O robô deve sugar o petróleo até que ele acabe ou até 
que o tempo total de disputa seja atingido – o que ocorrer primeiro. Terminado do tempo da disputa, todos os robôs de 
extração devem parar suas atividades e manter registrado a quantidade de petróleo obtido. 
 
Observação 
 
 Para iniciar a disputa, o usuário (segunda parte do projeto), deve ser possível apertar um único botão (no caso de 
uso de interface gráfica) ou realizar uma única chamada ao método MAIN. Isso facilitará a execução, teste e 
avaliação dessa segunda parte do projeto. Portanto, organize seu código de forma que a execução seja iniciada de 
forma simples. 
 
4. Análise dos Resultados 
 
Depois de terminado o tempo total de disputa, o sistema deve somar as quantidades de petróleo extraídas por cada empresa. 
Deve ser impresso em arquivo TXT (“resultado.txt”) com as seguintes informações: 
 
 A empresa vencedora (a que mais extraiu petróleo), com a quantidade total extraída. 
 A ordem decrescente de produção de cada robô (para cada empresa) 
o Informando que célula foi explorada 
 A célula mais produtiva – com suas coordenadas 
o Informando robô que a explorou – e de que empresa ele é 
 A célula menos produtiva – com suas coordenadas 
o Informando robô que a explorou – e de que empresa ele é 
 
 
 
Para a solução serão avaliados: 
 
 O modelo de classes e o uso adequado dos conceitos de OO 
 Apresentação de todas as informações solicitadas. 
 Utilização adequada das estruturas de dados. 
 Organização e documentação do programa. 
 Funcionamento perfeito do programa. 
 Respostas aos questionamentos sobre o trabalho, durante a apresentação. 
 
Regras: 
 
 O trabalho deve ser feito em grupos de, no máximo, 3 (três) alunos. 
 Os alunos devem apresentar o trabalho no dia a ser definido pelo professor da disciplina. 
 O não cumprimento do prazoinvalida o trabalho. 
 São de inteira responsabilidade dos alunos o local e o equipamento para apresentação do trabalho 
 Deve ser utilizado o ambiente de desenvolvimento definido para a disciplina de OO 
 Não serão aceitos trabalhos por enviados por e-mail. 
 
Observação 
 
 Melhorias no projeto são sempre bem-vindas (e pontuadas)

Continue navegando