Descrição do Problema: Sistema de Recomendação Colaborativo

Introdução

O objetivo final é construir um Sistema de Recomendação Colaborativo, mas para chegar lá, você deve vencer 3 etapas de complexidade crescente.

Você deverá implementar todas as etapas nos 3 paradigmas: Lógico (Prolog), Funcional (Lisp) e Orientado a Objetos (Java).


Fase 1: Aquecimento e Consultas

O objetivo desta fase é se familiarizar com a sintaxe e as estruturas de dados básicas de cada linguagem.

Estrutura de Dados

Considere uma base de dados simples contendo: * Filmes: ID, Título, Gênero, Ano. * Avaliações: Usuário, ID_Filme, Nota (1-5).

Funções/Predicados a Implementar

  1. filmes_por_genero(Genero): Retorna todos os filmes de um dado gênero.
  2. filmes_de_ano_superior(Ano): Retorna filmes lançados após o ano dado.
  3. notas_do_usuario(Usuario): Retorna todas as avaliações feitas por um usuário.

Fase 2: Lógica Intermediária e Regras de Negócio

Aqui começamos a processar listas e aplicar lógica agregada.

Funções/Predicados a Implementar

  1. media_avaliacoes(Usuario): Calcula a média das notas dadas por um usuário.
  2. usuario_hater(Usuario): Retorna Verdadeiro se o usuário tem mais notas 1 do que notas 5.
  3. filmes_nao_avaliados(Usuario): Retorna a lista de todos os filmes que o usuário ainda não avaliou.
  4. diretores_comuns(Usuario1, Usuario2): Retorna a lista de diretores que ambos os usuários avaliaram (independente da nota).

Fase 3: O Sistema Colaborativo

O desafio final. Aqui implementamos a “Inteligência” do sistema, usando interseção de conjuntos e regras globais de exclusão.

Lógica do Algoritmo

  1. Similaridade: Dois usuários são “Vizinhos” se avaliaram os mesmos filmes (interseção \(\ge 1\)) e ambos deram nota alta (\(\ge 4\)).
  2. Candidatos: Filmes que os Vizinhos deram nota \(\ge 4\) e que o Usuário Alvo não avaliou.
  3. Regra de Ódio (Exclusão): Se o Usuário Alvo deu nota 1 para qualquer filme de um diretor, remova todos os filmes desse diretor dos candidatos.
  4. Filtro Matrícula: Aplique a regra específica do seu número de matrícula (Idade/Tempo/Ano).

Função Principal

  • recomendar(Usuario): Retorna a lista processada e filtrada de recomendações.

Variação por Matrícula (Anti-Plágio)

Aplicável na Fase 3.

  • Grupo 0-3: Filtro por Classificação Indicativa.
  • Grupo 4-6: Filtro por Duração/Tempo Disponível.
  • Grupo 7-9: Filtro por Ano de Preferência.
Back to top