Skip to content

Conhecimentos adquiridos das ferramentas

Danilo de Oliveira edited this page Oct 29, 2016 · 7 revisions

OptaPlanner

Drools

Aprendizado da semântica

Durante a implementação de uma regra para "Disciplinas do mesmo período não podem estar alocadas no mesmo horário", estavamos com dificuldades por causa da semântica do drools. Após algumas tentativas e estudo da linguagem, entendemos como a mesma funciona.

Antes estávamos inserindo a seguinte sentença para a regra supracitada:

Alocacao($d: disciplina, $h : horario)

Alocacao(disciplina != $d, horario == $h)

A sentaça acima tinha o intuito de verificar se existe 2 disciplinas distintas com o mesmo horário. Porém, tal sentença não garante que todas as possibilidades de Alocacao serão testadas. Ao invés dessa sentença, inserimos a seguinte sentença:

$alocacoes: Alocacao()

Alocacao($d: disciplina, $h : horario)

exists ( Alocacao(disciplina != $d, horario == $h) from $alocacoes )

Essa nova sentença gera um conjunto de tentativas em $alocacoes e tenta fazer matches um a um para verificar se existem duas disciplinas em um mesmo horário. Isso é explicado na documentação do Drools conforme abaixo:

Previous examples were evaluations using a single pattern. The CE from also support object sources that return a collection of objects. In that case, from will iterate over all objects in the collection and try to match each of them individually. (JBOSS.ORG, Chapter 8. Rule Language Reference)