Trabalho Prático (2011/2012)

Tema

Utilização de sistemas de Programação Lógica por Restrições na resolução dum problema de optimização.

Problema

É necessário efectuar um calendário de exames para um conjunto de unidades curriculares de um curso. Conhece-se a lista de estudantes inscritos a cada unidade curricular e o ano a que a unidade curricular pertence (de acordo com o plano de estudos).

Está já fixado o período em que decorrerão os exames. Nesse período (uma época), os exames podem ser marcados em qualquer dia, de manhã ou tarde, excepto ao Domingo e feriados. Os exames deverão ocorrer das 9-13 e das 14-18 horas, com início a qualquer hora, preferencialmente 9h e 14h. É conhecida a duração máxima que cada exame terá (a qual é sempre um múltiplo de uma hora e não excede 4 horas). Há também uma indicação sobre a hora a partir da qual o exame se deveria realizar (na opinião do docente). Poderá não se atender a esse pedido.

Existem salas em que os exames podem decorrer, conhecendo-se a capacidade de cada sala (para exame, que pode ser diferente da sua capacidade normal). É habitual o número de estudantes inscritos ser superior ao número de estudantes que realizam exames, podendo ser considerada uma taxa de 20% (ou mais) de quebra.

Pretende-se estudar cada um dos cenários seguintes:

Desenvolvimento e Prazos de entrega

O trabalho deverá ser realizado em grupo (preferencialmente de três elementos).

Deve ser entregue até 4 de Junho (23:59). Não haverá alteração da data de entrega.

Pretende-se:

Critérios de Avaliação

O problema deve ser entendido como um desafio. Por isso, o relatório e apresentação oral do trabalho serão fundamentais para a sua avaliação. Entre outros aspectos é conveniente analisar os caminhos que decidirem seguir na resolução do problema, e quiçá, alternativas.

Na resolução poderão começar por impor restrições mais fortes (por exemplo, não haver unidades curriculares comuns a vários cursos) e posteriormemte efectuar extensões do modelo e da implementação

O desconhecimento que algum elemento do grupo demonstre sobre o conteúdo do trabalho poderá penalizar a nota desse elemento e do grupo. Serão igualmente penalizadas situações de plágio.

Formato para Dados

Os dados necessários são definidos por predicados estudante/3, unidade_curr/5, intervalos_anos/2, capacidade_sala/2, e calendario/2:
estudante(CodigoEstudante,Nome,ListaCodigosUnidadeCurricularesInscrito)
unidade_curr(CodigoUnidadeCurricular,Nome,ListaCursosAnosSemestres,DuracaoExame,HoraPref)
intervalos_anos(ListaEspaçamentosMinimosPorAnos,IntervaloMinimoParaAlmoco)
capacidade_sala(IdSala,Capacidade)
calendario(Epoca,ListaOrdenadaDatasPossiveis)
...
Cada data é um termo d(DiaMes,Mes,DiaSemana), por exemplo, d(2,6,7), 2 de Junho, sábado. Os códigos das unidade curriculares são números inteiros. Os dos estudantes são idênticos aos dos estudantes da UP.