UNIVERSIDADE ANHEMBI MORUMBI HÉLIO FERREIRA DE LIMA JÚNIOR MARCUS VINICIUS CORRÊA IMPLEMENTAÇÃO DE UM SISTEMA DE ALOCAÇÃO DE PROFESSORES E DISCIPLINAS EM GRADES HORÁRIAS UTILIZANDO ALGORITMOS GENÉTICOS São Paulo 2010 HÉLIO FERREIRA DE LIMA JÚNIOR MARCUS VINICIUS CORRÊA IMPLEMENTAÇÃO DE UM SISTEMA DE ALOCAÇÃO DE PROFESSORES E DISCIPLINAS EM GRADES HORÁRIAS UTILIZANDO ALGORITMOS GENÉTICOS Trabalho de conclusão de curso apresentado como exigência parcial para a obtenção do título de Bacharel em Ciência da Computação pela Universidade Anhembi Morumbi Orientador: Prof. Msc. Augusto Mendes Gomes Junior São Paulo 2010 HÉLIO FERREIRA DE LIMA JÚNIOR MARCUS VINICIUS CORRÊA IMPLEMENTAÇÃO DE UM SISTEMA DE ALOCAÇÃO DE PROFESSORES E DISCIPLINAS EM GRADES HORÁRIAS UTILIZANDO ALGORITMOS GENÉTICOS Trabalho de conclusão de curso apresentado como exigência parcial para a obtenção do título de Bacharel em Ciência da Computação pela Universidade Anhembi Morumbi Aprovado ___________________________________________________________________ Prof. Msc. AUGUSTO MENDES GOMES JUNIOR Universidade Anhembi Morumbi ___________________________________________________________________ Prof. Universidade Anhembi Morumbi ___________________________________________________________________ Prof. Universidade Anhembi Morumbi RESUMO O Problema de Alocação de Recursos é tradicionalmente muito conhecido nas instituições de ensino. O problema consiste em conciliar professores, disciplinas e turmas, formando uma grade horária escolar, de modo que sejam satisfeitas as condições impostas pela instituição. A busca por uma solução manual do problema pode demandar o esforço de muitas pessoas durante vários dias e, mesmo assim, não gerar uma boa solução. O objetivo deste trabalho é estudar o Problema de Alocação de Recursos, modelando e implementando uma solução para o problema. A solução possui uma interface web para a utilização, e a estratégia para a resolução do problema é implementada utilizando algoritmos inspirados na teoria da evolução natural, denominados algoritmos genéticos. Palavras-chave: Alocação de Recursos. Grade Horária. Algoritmos Genéticos. ABSTRACT The Problem of Resource Allocation is traditionally very popular in educational institutions. The problem is to reconcile teachers, courses and classes, creating a timetable, so they comply with the conditions imposed by the institution. The search for a solution of the problem may require manual effort of many people for several days and still not generating a good solution. The aim of this work is to study Resource Allocation Problem, modeling and implementing a solution to the problem. The solution has a web interface to use, and the strategy for solve the problem was implemented using algorithms inspired by the theory of natural evolution, called genetic algorithms. Key words: Timetabling. Schedule. Genetic Algorithms. LISTA DE FIGURAS Figura 1 Pseudocódigo de um algoritmo genético ................................................... 20 Figura 2 Exemplo de cromossomos com codificação binária ................................... 20 Figura 3 Exemplo de Ponto de Cruzamento Único .................................................. 21 Figura 4 Exemplo de Cruzamento em Árvores ........................................................ 22 Figura 5 Pontos de máximos locais e global ............................................................ 23 Figura 6 Seleção proporcional a aptidão .................................................................. 23 Figura 7 Diagrama de Classes ................................................................................. 27 Figura 8 Diagrama de Entidade Relacionamento ..................................................... 28 Figura 9 Diagrama de Casos de Uso ....................................................................... 29 Figura 10 Arquitetura utilizada no desenvolvimento do RAS .................................... 30 Figura 11 Fluxograma do Modelo da Solução .......................................................... 31 Figura 12 Representação do cromossomo para o problema .................................... 32 Figura 13 Exemplo de pontuação da grade horária .................................................. 34 Figura 14 Calculo da pontuação máxima do cromossomo ....................................... 34 Figura 15 Representação dos cromossomos durante o cruzamento........................ 35 Figura 16 Representação do cromossomo após o cruzamento................................ 36 Figura 17 Mutação com disciplinas que possuem carga horária de 2 horas ............ 37 Figura 18 Mutação com disciplinas que possuem carga horária de 4 horas ............ 38 Figura 19 Ambiente Web do RAS ............................................................................. 40 Figura 20 Página de Professores cadastrados ......................................................... 41 Figura 21 Parte da janela da grade horária gerada .................................................. 41 LISTA DE GRÁFICOS Gráfico 1 Desempenho do cromossomo durante o primeiro teste ............................. 42 Gráfico 2 Desempenho do cromossomo durante o segundo teste ............................ 43 LISTA DE TABELAS Tabela 1 Exemplo de uma grade horária para uma turma em forma de tabela. ....... 14 Tabela 2 UC01 - Login .............................................................................................. 45 Tabela 3 UC02 - Buscar Professor ........................................................................... 45 Tabela 4 UC03 - Incluir Professor ............................................................................. 46 Tabela 5 UC04 - Alterar Professor ............................................................................ 47 Tabela 6 UC05 - Excluir Professor ............................................................................ 48 Tabela 7 UC06 - Buscar Turma ................................................................................ 49 Tabela 8 UC07 - Incluir Turma .................................................................................. 49 Tabela 9 UC08 - Alterar Professor ............................................................................ 50 Tabela 10 UC09 - Excluir Turma. ........................................................................... 51 Tabela 11 UC10 - Buscar Disciplina ....................................................................... 52 Tabela 12 UC11 - Incluir Disciplina ........................................................................ 52 Tabela 13 UC12 - Alterar Disciplina ....................................................................... 53 Tabela 14 UC13 - Excluir Disciplina ....................................................................... 54 Tabela 15 UC14 - Incluir Horário Disponível .......................................................... 55 Tabela 16 UC15 - Alterar Horário Disponível ......................................................... 56 Tabela 17 UC16 - Excluir Horário Disponível ......................................................... 57 Tabela 18 UC17 – Gerar Grade Horária ................................................................. 57 Tabela 19 UC18 – Visualizar Grade Horária .......................................................... 58 Tabela 20 Descrição da tabela PROFESSOR........................................................ 59 Tabela 21 Descrição da tabela ROLE .................................................................... 59 Tabela 22 Descrição da tabela ROLE_PROFESSOR ............................................ 59 Tabela 23 Descrição da tabela ATIVO ................................................................... 59 Tabela 24 Descrição da tabela DISCIPLINA .......................................................... 59 Tabela 25 Descrição da tabela CURSO ................................................................. 59 Tabela 26 Descrição da tabela DISCIPLINA_CURSO ........................................... 60 Tabela 27 Descrição da tabela PROFESSOR_DISCIPLINA_CURSO ................... 60 Tabela 28 Descrição da tabela TURMA ................................................................. 60 Tabela 29 Descrição da tabela SEMESTRE .......................................................... 60 Tabela 30 Descrição da tabela HORARIO ............................................................. 60 Tabela 31 Descrição da tabela PERIODO.............................................................. 61 Tabela 32 Descrição da tabela DIA_SEMANA ....................................................... 61 Tabela 33 Descrição da tabela DIA_SEMANA_HORARIO .................................... 61 Tabela 34 Descrição da tabela DISPONIBILIDADE ............................................... 61 Tabela 35 Descrição da tabela GRADE_HORARIA ............................................... 61 SUMÁRIO 1 INTRODUÇÃO ........................................................................................... 10 1.1 OBJETIVO ................................................................................................. 10 1.2 JUSTIFICATIVA ......................................................................................... 11 1.3 ABRANGÊNCIA ......................................................................................... 11 1.4 ESTRUTURA DO TRABALHO................................................................... 11 2 PROBLEMA DE ALOCAÇÃO DE RECURSOS (TIMETABLING PROBLEM) ................................................................................................ 13 2.1 DEFINIÇÃO................................................................................................ 14 2.2 APLICAÇÕES ............................................................................................ 14 2.3 TRABALHOS RELACIONADOS ................................................................ 15 2.3.1 Timetabling com algoritmos genéticos: resultados, restrições e exploração do paralelismo ...................................................................... 15 2.3.2 Geração Automática de Grade Horária Usando Algoritmos Genéticos: O Caso da Faculdade de Engenharia Elétrica da UFU .......................... 16 2.3.3 Algoritmo Genético para resolver o problema de Alocação de Recursos ................................................................................................... 17 3 ALGORITMOS GENÉTICOS ..................................................................... 19 3.1 DEFINIÇÃO................................................................................................ 19 3.2 REPRESENTAÇÃO DO CROMOSSOMO ................................................. 20 3.3 CRUZAMENTO (CROSSOVER)................................................................ 21 3.4 MUTAÇÃO ................................................................................................. 22 3.5 SELEÇÃO .................................................................................................. 23 3.6 APLICAÇÕES ............................................................................................ 24 4 MODELAGEM DO RAS (RESOURCE ALLOCATION SYSTEM) ............. 25 4.1 DESCRIÇÃO .............................................................................................. 25 4.2 ANÁLISE DE REQUISITOS ....................................................................... 26 4.3 DIAGRAMA DE CLASSES......................................................................... 26 4.4 DIAGRAMA ENTIDADE RELACIONAMENTO .......................................... 28 4.5 DIAGRAMA DE CASOS DE USO .............................................................. 29 5 IMPLEMENTAÇÃO DO RAS ..................................................................... 30 5.1 MODELO DA SOLUÇÃO ........................................................................... 30 5.2 CROMOSSOMO ........................................................................................ 32 5.3 GERAÇÃO DA POPULAÇÃO INICIAL ...................................................... 33 5.4 FUNÇÃO CUSTO ...................................................................................... 33 5.5 CRUZAMENTO (CROSSOVER)................................................................ 35 5.6 MUTAÇÃO ................................................................................................. 37 5.7 SELEÇÃO .................................................................................................. 38 5.8 ELITISMO .................................................................................................. 39 5.9 REPRESENTAÇÃO DA SOLUÇÃO........................................................... 39 6 INTERFACE WEB ..................................................................................... 40 7 TESTES ..................................................................................................... 42 8 CONCLUSÃO ............................................................................................ 44 7.1 TRABALHOS FUTUROS ........................................................................... 44 APÊNDICE A – DESCRIÇÃO DOS CASOS DE USO .............................................. 45 APÊNDICE B – DESCRIÇÃO DAS TABELAS ........................................................ 59 REFERÊNCIAS BIBLIOGRÁFICAS ......................................................................... 62 10 1 INTRODUÇÃO A alocação de recursos (TEXEIRA, 1991) representa um grande problema no cotidiano de muitas instituições de ensino, que é a necessidade de alocar professores e disciplinas na grade horária. Porém, esse é um problema complexo, haja visto que existem múltiplos objetivos, múltiplas restrições e um número grande de variáveis a serem ponderadas (HAMAWAKI, 2005). Essa grande quantidade de variáveis existe devido à diversidade da disponibilidade de cada professor, da carga horária de cada disciplina, da carga horária total diária e semanal da turma/série e da disponibilidade de laboratórios ou salas especiais (JACOB; ROCHA, 2005). Problemas de Alocação de Recursos são de natureza combinatória e inteira, o que dificulta o uso eficiente de algoritmos de otimização para problemas de pequenas instancias. Na verdade, Even, Itai e Shamir (1976) afirmam que o problema de Alocação de Recursos escolar, variante relacionada a este trabalho, é considerado NP-Difícil para quase todas as formas que ele pode aparecer, o que implica que esses problemas são considerados inviáveis de serem resolvidos por métodos otimizantes em tempo computacional hábil, pois o tempo de processamento aumenta exponencialmente com o número de variáveis. A solução para o problema acima é utilizar algoritmos genéticos, pois, apesar de não encontrar a melhor solução, pode-se encontrar uma solução boa o suficiente, utilizando baixo tempo de processamento computacional, (LOPES, 1995). Dentre os algoritmos heurísticos existentes, o genético é um dos mais utilizados por ser probabilístico, ou seja, a partir de uma população inicial de soluções candidatas, ocorre uma evolução em direção a melhores soluções aplicando operadores modelados em processos genéticos que ocorrem na natureza (GOLDBERG, 1989). A partir de um algoritmo genético, é implementado um sistema que realiza a alocação de professores e disciplinas em grades horárias. 1.1 OBJETIVO O objetivo deste trabalho é estudar o Problema de Alocação de Recursos, modelar e implementar uma estratégia que o solucione através de um algoritmo heurístico. Para este problema será utilizado Algoritmos Genéticos para a sua 11 resolução. O sistema será modelado utilizando técnicas de engenharia de software e terá uma interface web, seguindo os princípios de usabilidade (NIELSEN, 1993). 1.2 JUSTIFICATIVA O problema de alocação de recursos (Timetabling Problem) pertence a classe de problemas NP-Completo (GAREY, 1979), ou seja, seu problema exige grande demanda de processamento computacional de acordo com a quantidade de dados de entrada. Quanto maior a quantidade de dados de entrada, maior é o tempo de processamento. Diante desse grande desafio, o grupo decidiu implementar um sistema que apresente uma solução para esse problema. Devido a complexidade do problema e a dificuldade de sua resolução através de técnicas de programação convencional, para a implementação da solução foram utilizados algoritmos genéticos (GOLDBERG, 1989). Algoritmos genéticos são uma técnica de busca utilizada para encontrar a solução exata ou apropriada para problemas de busca e otimização. 1.3 ABRANGÊNCIA O projeto abrange o estudo e o desenvolvimento de um sistema para alocação de professores e disciplinas em grades horárias, utilizando os conceitos de algoritmos genéticos, e implementado na linguagem de programação Java, com uma interface web utilizando princípios de usabilidade, metodologias e conceitos como Ajax (GARRET, 2005) e UML (BOOCH; JACOBSON; RUMBAUGH, 2000). O algoritmo implementado gera a grade horária de um curso por vez, porém o modelo de solução pode ser empregado para a geração de horários de diversos cursos, sem distinção de duração ou quantidade de recursos. Foram realizadas testes no sistema, buscando analisar seu desempenho e a qualidade dos resultados obtidos pelo algoritmo em relação à quantidade de informações que o sistema abrange. 1.4 ESTRUTURA DO TRABALHO A estrutura do trabalho está dividida nos seguintes capítulos: 12 O capítulo 2 aborda o problema de alocação de recursos, sua definição, suas aplicações e trabalhos relacionados. O capítulo 3 aborda a definição de Algoritmos Genéticos, representação do cromossomo, cruzamento (crossover), mutação, seleção e aplicações. O capítulo 4 aborda a modelagem, contendo a descrição, casos de uso, diagrama de classes e diagrama de seqüência do sistema desenvolvido. O capítulo 5 apresenta a implementação do sistema desenvolvido. O capítulo 6 demonstra os testes realizados, o ambiente de testes utilizado e a análise dos resultados obtidos. O capítulo 7 aborda a conclusão de nosso trabalho e apresenta sugestões de trabalhos futuros. 13 2 PROBLEMA DE ALOCAÇÃO DE RECURSOS (TIMETABLING PROBLEM) O problema de alocação de professores e disciplinas em grades horárias é um problema de difícil solução, principalmente quando o número de disciplinas e professores é elevado. Este problema é considerado NP-Difícil (Não-Determinístico de tempo polinomial), ou seja, o esforço computacional necessário para a sua resolução cresce exponencialmente com o tamanho do problema (GAREY, 1979). A busca por uma solução manual do problema pode demandar o esforço de muitas pessoas durante vários dias e, mesmo assim, não gerar uma boa solução (PEREIRA, 2001). Expressando a ordem de grandeza da complexidade de resolução de um problema de elaboração de horários de aulas, Frangouli, Harmandas e Stamatopoulos (1995) propuseram uma fórmula para determinar o tamanho máximo do espaço de pesquisa expressa pela equação (1). A expressão do tamanho do espaço de pesquisa de um problema de elaboração de horários de aulas é mostrada a seguir: TEP = (NDS×NAD×NSA)(ND×NAP) (1) onde: TEP é o tamanho do espaço de pesquisa; NDS é o número de dias da semana letiva; NAD é o número de aulas diárias para o curso envolvido na distribuição das aulas consideradas; NSA é o número de salas de aulas disponíveis para a utilização das aulas; ND é o número de disciplinas pertencentes ao horário de aula; NAP é o número de aulas a serem distribuídas para cada uma das disciplinas. Para a elaboração deste trabalho, não foi imposta a verificação de alocação de salas disponíveis. Desta forma, a equação (1) poderia ser apresentada suprimindo-se a variável NSA como é mostrado na equação a seguir (2): TEP = (NDS×NAD)(ND×NAP) (2) 14 2.1 DEFINIÇÃO O Timetabling Problem pode ser definido como uma lista organizada, geralmente proposta em forma de tabela, contendo informações divididas em períodos (horas/dia), e em cada período contendo a disciplina e professor alocado. A Tabela 1 apresenta um exemplo da grade horária em forma de tabela. Tabela 1 Exemplo de uma grade horária para uma turma em forma de tabela. Hora\Dia Segunda Terça Quarta Quinta Sexta 19:20 Empreendedorismo Shintani LFA Augusto Optativa II IA Marcelo Análise de Algoritmo Augusto 20:10 Empreendedorismo Shintani LFA Augusto Optativa II IA Marcelo Análise de Algoritmo Augusto 21:15 Empreendedorismo Shintani LFA Augusto Optativa II TCC1 Marcelo Análise de Algoritmo Augusto 22:05 Empreendedorismo Shintani LFA Augusto Optativa II TCC1 Marcelo Análise de Algoritmo Augusto Sábado Fonte: O autor (2010) 2.2 APLICAÇÕES A alocação de professores e disciplinas é um problema complexo, de modo que sua solução pode demandar muito tempo computacional, classificando-o como de ordem NP-Difícil. Este tipo de problema pode ser aplicado a qualquer tipo de instituição de ensino. Porém, a elaboração da grade horária em universidades torna este problema mais complexo pelo fato de possuir um número de disciplinas e de professores muito elevado. Soluções para o problema de alocação de recursos podem ser aplicadas em diversas áreas como na construção civil, projetos de tecnologia da informação e até mesmo na alocação de recursos financeiros. A otimização dos recursos disponíveis pode ser útil para o sucesso de qualquer projeto. 15 2.3 TRABALHOS RELACIONADOS O problema de alocação de recursos tem sido muito estudado, devido ao grande número de possíveis aplicações, nesta seção são apresentados alguns trabalhos relacionados ao tema. 2.3.1 Timetabling com algoritmos genéticos: resultados, restrições e exploração do paralelismo O Trabalho de Fucilini, Maruani e Rebonatto (2008) buscou detalhar uma solução para o problema de timetabling de professores e disciplinas, utilizando um novo modelo de algoritmos genéticos e solução que utiliza o paralelismo durante a execução. A metodologia utilizada foi definir a representação do cromossomo como um vetor bidimensional, separado por níveis e slot de tempo, determinando peso do slot, peso dos indivíduos da população, que é composta por professores, disciplinas, horas, feriados, disponibilidades, etc., visando verificar os resultados obtidos ao final da execução. As informações a serem manipuladas pelo algoritmo genético como dados dos professores, das disciplinas, horários disponíveis, e outras informações relevantes ficam guardados em uma base de dados, mas durante sua manipulação, essas informações são armazenadas na memória RAM (Random Access Memory), visando alcançar um melhor desempenho durante a execução, ao final do processamento, os resultados são armazenados no banco de dados. A implementação do sistema foi feita em C++ utilizando o compilador GNU (GNU Is Not Unix) G++ e modelado em MySQL. Os resultados desejados foram obtidos. Contudo, o algoritmo genético utilizado consegue gerar os horários de apenas 1 (um) curso por vez. A limitação de somente 1 (um) curso por execução, acaba deixando o algoritmo pouco eficiente, onde o último curso a ser gerado pode ter de esperar por muito tempo para ter sua grade gerada. Outro problema encontrado foi a limitação da alocação de disciplinas, onde só se pode alocar as que possuem créditos pares, pelo fato de ter sido determinado 2 horas/aula. A solução para esse problema foi a mudança na representação do cromossomo. O cromossomo se divide em 1 (um) 16 vetor de cursos, 1 (um) vetor de níveis de cursos e 1 (um) vetor de relação de disciplinas em horários. Porém, essa nova representação acabou gerando um consumo de memória elevado. Sua solução foi implementar um algoritmo genético utilizando paralelismo, visando aumentar o desempenho durante a procura por soluções do algoritmo genético. 2.3.2 Geração Automática de Grade Horária Usando Algoritmos Genéticos: O Caso da Faculdade de Engenharia Elétrica da UFU O objetivo do trabalho de Hamawaki (2005) foi criar um aplicativo, do qual seria possível a extração de informações relevantes com relação à proposta escolhida, constando de uma representação genética para o problema de geração automática de horário de uma instituição de ensino superior, levando em consideração a limitação dos recursos, com base em suas informações, utilizando Algoritmos Genéticos para alcançar uma solução viável. O aplicativo desenvolvido é composto pelos componentes: algoritmo genético, responsável pela implementação das operações genéticas (seleção, elitismo, mutação, cruzamento e cálculo de aptidão) e também pelo processo como um todo (início/fim), base de dados, local onde é armazenado o conhecimento necessário para processamento do problema em questão, lista de disciplinas, professores e suas correspondências, restrições de dias e horários para cada aula, número de dias na semana e preferências de dias e horários de cada professor. O funcionamento do sistema desenvolvido, segundo o autor, foi considerado muito simples. De acordo com o tamanho da população são criadas as populações das dez espécies (que correspondem aos 10 períodos do curso de graduação de engenharia elétrica). Nesta etapa as Bases de Dados são acessadas para criação dos indivíduos (grades horárias). Após esta etapa inicial, o Algoritmo Genético segue o fluxo padrão. É realizada a seleção, cálculo de aptidão e aplicação dos operadores genéticos. A seguir é efetuado o teste de evolução entre as espécies das populações. As espécies com maior aptidão continuam participando da verificação. A ferramenta desenvolvida reduziu o tempo requerido para a elaboração da grade horária, e a partir da análise dos resultados obtidos, o autor pode concluir que as técnicas utilizadas favoreceram a obtenção de uma solução satisfatória e eficiente para o problema. 17 2.3.3 Algoritmo Genético para resolver o problema de Alocação de Recursos O trabalho de Colorni, Dorigo e Maniezzo (1992) visou a apresentação da aplicação de um algoritmo genético adaptado para resolver um problema de alocação de recursos. Para a elaboração do algoritmo e investigação do problema, o autor utilizou a tabela de horário de aulas de uma escola italiana de ensino médio. Porém, as idéias apresentadas neste trabalho poderão ser aplicadas para a solução de outros problemas de alocação de recursos. A construção de uma tabela de horários para uma escola italiana de ensino médio pode ser decomposta na formulação de diversas tabelas de horários relacionadas. Este problema tem sido abordado através da utilização de programação linear com variáveis binárias, utilizando algumas heurísticas. Segundo o autor, se o problema fosse abordado utilizando algoritmos padrões, isto é, definindo variáveis binárias xijk, o problema seria representado por 6000 variáveis, o que o tornaria intratável. Por esse motivo, o autor decidiu abordá-lo por meio de um algoritmo evolutivo e estocástico, ou seja, através de um algoritmo genético. Foram encontradas algumas dificuldades na aplicação de algoritmos genéticos para problemas com restrições de otimização combinatória. A mais relevante delas foi de que os operadores de crossover e de mutação previamente definidos poderiam gerar soluções inviáveis. O problema foi representado através de matrizes, e as restrições foram gerenciadas da seguinte forma: • Pelos operadores genéticos, de modo que o conjunto de horas a ser lecionadas por cada professor, atribuídos na fase de inicialização, não poderiam ser alterados pela aplicação dos operadores genéticos; • Pelo algoritmo de filtragem, de modo que a inviabilidade causada pela aplicação de operadores genéticos são total ou parcialmente eliminadas pela filtração; • Pela função objetivo, de modo que a pressão seletiva seria utilizada para limitar o número de indivíduos com inviáveis. 18 O programa utilizado para os experimentos do algoritmo foi escrito na linguagem de programação C, e foi executado em um PC utilizando as configurações padrões. Foi observado que o algoritmo enquanto explora zonas promissoras do espaço de busca, sempre identifica soluções viáveis dentro de pequenas iterações. 19 3 ALGORITMOS GENÉTICOS Os algoritmos genéticos (GOLDBERG, 1989) são uma técnica de busca utilizada para encontrar a solução exata ou apropriada para problemas de busca e otimização. Os algoritmos genéticos foram inspirados nos conceitos da teoria da evolução (DARWIN, 1859) como mutação, seleção natural, hereditariedade e recombinação (crossing over), de modo que se possa chegar à solução de um problema através deles, utilizando um processo evolucionário onde não se encontra a solução, e sim a desenvolve. 3.1 DEFINIÇÃO Os algoritmos genéticos são implementados em uma simulação de computador em que uma população de representações abstratas de soluções candidatas para um problema de otimização evolui em direção as melhores soluções. Tradicionalmente, as soluções são representadas em seqüências de 0s (zeros) e 1s (uns), mas outras formas de representar são possíveis. A evolução geralmente inicia a partir de uma população de indivíduos gerados aleatoriamente e acontece em várias gerações. Em cada geração, a aptidão de cada indivíduo é avaliada, alguns indivíduos da população são selecionados de acordo com sua aptidão, e modificados através de recombinações e mutações randômicas para formar uma nova população. Esta nova população é utilizada na próxima iteração do algoritmo. Geralmente, o algoritmo termina quando um número máximo de gerações foi produzido, ou um nível satisfatório de robustez é alcançado pela população. Se o algoritmo terminar devido ao número máximo de geração, uma solução satisfatória pode não ter sido alcançada. Na Figura 1 é ilustrado o pseudocódigo de um algoritmo genético. 20 Figura 1 Pseudocódigo de um algoritmo genético. Fonte: OBITKO e SLAVÍK (1999) 3.2 REPRESENTAÇÃO DO CROMOSSOMO Nos algoritmos genéticos os cromossomos são um conjunto de parâmetros que definem uma proposta de solução para o problema que o algoritmo tenta resolver. O cromossomo é geralmente representado por uma seqüência simples de caracteres 0s e 1s, apesar de outras formas de representações também serem utilizadas. A Codificação Binária é a forma mais comum de representação do cromossomo devido à sua relativa simplicidade, e principalmente porque foi a forma que os primeiros pesquisadores de algoritmos genéticos utilizaram. Na Figura 2 é ilustrado um exemplo da representação do cromossomo com codificação binária. Figura 2 Exemplo de cromossomos com codificação binária. Fonte: O autor (2010) Outras formas de representação do cromossomo também são utilizadas, entre elas estão a Codificação por Permutação (que pode ser utilizada em problemas que envolvem ordenação como o “Problema do Caixeiro-Viajante” (APPLEGATE, 2006) ou problemas de ordenação de tarefas), Codificação de Valores (que pode ser utilizada em problemas em que são utilizados valores mais complexos, como números reais) e a Codificação em Árvore (que é principalmente 21 utilizada para desenvolver programas ou expressões, ou seja, é utilizada para a programação genética). 3.3 CRUZAMENTO (CROSSOVER) Em algoritmos genéticos, crossover é um operador genético utilizado para combinar a programação de um cromossomo ou cromossomos de uma geração para a seguinte. É análogo à reprodução e cruzamento biológico em que os algoritmos genéticos são baseados. Se somente o operador de reprodução atuar, a população tenderá a se tornar mais homogênea a cada geração. O operador de cruzamento é incluído em um algoritmo genético pelo fato de introduzir novas estruturas, recombinando estruturas já existentes e por ter um efeito de seleção, pois elimina esquemas de baixa adaptação. Para cada forma de representação do organismo existem diversas formas de cruzamento. Algumas formas de cruzamento para organismos representados através da Codificação Binária podem ser o Ponto de Cruzamento Único, que pode ser visto um exemplo na Figura 3, Dois pontos de cruzamento, Cruzamento Uniforme e o Cruzamento Aritmético. Figura 3 Exemplo de Ponto de Cruzamento Único. Fonte: MIRANDA (1998) 22 Organismos representados através da Codificação por Permutação geralmente são cruzados através do Ponto de Cruzamento Único ou Mudança de Ordem. Para organismos representados através da Codificação de Valores, podem ser utilizadas todas as técnicas de cruzamento utilizadas pela Codificação Binária. Os organismos representados através da Codificação em Árvores geralmente são cruzados através do Cruzamento em Árvores. A Figura 4 apresenta um exemplo do cruzamento em árvores. Figura 4 Exemplo de Cruzamento em Árvores. Fonte: OBITKO (1999) 3.4 MUTAÇÃO Assim como o operador crossover, a mutação também é um operador utilizado pelos algoritmos genéticos. A mutação é utilizada para manter a diversidade genética de uma geração para a outra, de forma semelhante a uma mutação biológica. Seu uso exagerado não é recomendável, pois pode reduzir a evolução a uma busca totalmente aleatória, de modo que é consistida apenas em alterar valores dos indivíduos de 0 para 1 e vice-versa, buscando explorar regiões não atingidas do espaço de busca e fugir de valores mínimos e máximos (Figura 5) “viciados”, chamados de locais. Dessa forma, a mutação deve ser utilizada em uma proporção de 0.5% a 5% do total de bits do indivíduo. 23 Figura 5 Pontos de máximos locais e global. Fonte: ESPERIDIÃO (2003) 3.5 SELEÇÃO A seleção consiste na escolha dos indivíduos pertencentes à população atual que serão responsáveis pela produção da geração posterior. Existem diversas formas de seleção de indivíduos, sendo que as mais comuns são: seleção por torneio, onde são escolhidos dois indivíduos aleatoriamente e o melhor é selecionado, e seleção proporcional a aptidão, também conhecido como Roleta, onde geralmente a aptidão do indivíduo é determinada através do cálculo da função objetivo, que depende da especificação do projeto e se inspira na percepção conclusiva da probabilidade de dois indivíduos bons gerarem um filho bom é maior do que a de dois indivíduos ruins gerarem um filho bom. A Figura 6 apresenta um exemplo de seleção por aptidão. Figura 6 Seleção proporcional a aptidão. Fonte: O autor (2010) 24 3.6 APLICAÇÕES Os algoritmos genéticos possuem uma larga aplicação em diversas áreas científicas. Eles podem ser utilizados para solucionar problemas complexos (como problemas NP-Difíceis), para o aprendizado de máquinas e também para o desenvolvimento de programas simples. Uma das vantagens dos algoritmos genéticos é o seu paralelismo. O algoritmo genético percorre o espaço das soluções utilizando mais indivíduos de forma que eles são menos propensos a se direcionar para um extremo local do que os outros métodos. Algumas das aplicações mais comuns para os algoritmos genéticos são: Sistemas Dinâmicos não Lineares (HORITA, 2002), Projeto de Redes Neurais (WILSON, 1991), Trajetória de Robôs (SANTOS; SARAMAGO; STEFFEN, 2004), Desenvolvimento de programas em LISP (List Processing), Planejamento Estratégico (KEMP, 1995), Autômatos auto-programáveis (MIRANDA, 2004), Gerenciamento de Redes (MIRANDA, 2004), entre outras aplicações. 25 4 MODELAGEM DO RAS (RESOURCE ALLOCATION SYSTEM) Neste capítulo, para a modelagem do problema, são apresentados os diagramas com as definições dos casos de uso e o modelo da base de dados do RAS. Também é descrita a estratégia utilizada para a resolução do problema proposto, bem como as técnicas utilizadas durante seu desenvolvimento. De modo a obter uma melhor compreensão do problema e especificar de forma mais clara aos desenvolvedores, para a modelagem do RAS, foram utilizadas técnicas de Engenharia de Softwares (NAUR; RANDEL, 1969) como a Modelagem de Softwares Orientada a Objetos utilizando a UML (BOOCH; JACOBSON; RUMBAUGH, 2000). 4.1 DESCRIÇÃO Devido à complexidade conhecida na literatura para a resolução de Problemas de Alocação de Recursos (IBARAKI; KATOH, 1988), neste trabalho foi utilizado algoritmos genéticos (GOLDBERG, 1989), como uma técnica de Inteligência Artificial para a solução de problemas de otimização, com alto grau de complexidade. O RAS foi modelado e implementado utilizando técnicas de Modelagem de Softwares Orientada a Objetos (COAD; YOURDON, 1991). Problemas de Alocação de Recursos são problemas de otimização, onde, conhecida a quantidade de recursos disponíveis, pretende-se determinar a forma de alocá-los por diversas atividades independentes otimizando a função objetivo que a ser considerada (TEIXEIRA, 1991). A alocação de recursos é um dos problemas clássicos abordados pela Pesquisa Operacional (HILLIER; LIEBERMAN, 1990). Este trabalho apresenta um sistema de alocação de professores em grades horárias utilizando Algoritmos Genéticos. O método proposto é aplicado no estudo de caso de alocação de professores em uma instituição fictícia, podendo ser aplicado em situações reais, pelo fato de não se basear em uma instituição específica. 26 4.2 ANÁLISE DE REQUISITOS Neste capítulo são apresentados os requisitos funcionais e não funcionais que o RAS deve ter. Os requisitos aqui contidos foram levantados com base no conceito geral de um problema de alocação de professores em grades horárias, podendo ser incrementados na medida em que o sistema agregar mais recursos e funcionalidades. Requisitos Funcionais: • O sistema deverá permitir a autenticação de usuários a partir da digitação de Id do usuário e senha pré-cadastrados; • O sistema deverá permitir a manutenção (inclusão, atualização, busca e exclusão de registros) de todas as tabelas através de interface visual; • O sistema deverá permitir a geração de grade horária para um curso; • O sistema deverá permitir a visualização da grade horária de um curso; Requisitos Não-Funcionais: • O sistema deverá possuir uma interface amigável; • O sistema deverá inabilitar a sessão do usuário após 15 minutos de inatividade; 4.3 DIAGRAMA DE CLASSES As classes de domínio representam conceitos do mundo real relacionados ao problema que nosso sistema deve resolver (SOUZA, 2010). São as informações que precisamos manipular e armazenar para o funcionamento correto da aplicação. As classes de domínio do RAS estão presentes no diagrama da Figura 7. O pacote visão contém as páginas Web e outros artefatos relacionados à interface gráfica com o usuário. Ele interage diretamente com o pacote controle, onde se encontram as classes de ação que são responsáveis por fazer o intermédio entre a interface gráfica e a camada de negócio. As classes de aplicação implementam os casos de uso e manipulam os objetos de domínio do problema. O pacote de persistência é responsável por armazenar os dados dos objetos de domínio na base de dados. 27 Figura 7 Diagrama de Classes. Fonte: O autor (2010) O RAS armazenará informações sobre professores, disciplinas e turmas, de modo a relacioná-las gerando uma grade horária além de outros dados que também são pertinentes ao problema. 28 4.4 DIAGRAMA ENTIDADE RELACIONAMENTO Diagramas Entidade Relacionamento (CHEN, 1976) são a representação de todos os elementos essenciais abstraídos no processo de analise de sistemas. Uma das principais técnicas de modelagem ER é documentar os tipos de entidade e relacionamento de uma forma gráfica chamada, diagrama de Entidade Relacionamento. As entidades devem interagir de modo a contemplar os requisitos do negócio, mantendo os dados armazenados de forma integra e sem redundâncias. O diagrama a seguir representa o modelo ER de uma instituição hipotética, porém, o mesmo poderá ser aplicado para uma instituição real. Os detalhes das tabelas e de seus atributos se encontram no apêndice deste trabalho. Figura 8 Diagrama de Entidade Relacionamento. Fonte: O autor (2010) 29 4.5 DIAGRAMA DE CASOS DE USO Diagramas de caso de uso descrevem as funcionalidades propostas para o sistema que será projetado. Casos de uso são interações entre os agentes externos e o sistema, desse modo pode haver um ou mais casos de uso em cada diagrama. Jacobson (2004) define os casos de uso como “documento narrativo que descreve a seqüência de eventos de um ator que usa um sistema para completar um processo”. O diagrama dos casos de uso referentes ao RAS está presente na Figura 9. Figura 9 Diagrama de Casos de Uso. Fonte: O autor (2010) O administrador pode efetuar alterações, inclusões e exclusões em todas as tabelas, e os professores poderão apenas incluir, alterar ou excluir suas disponibilidades, além de visualizar as grades horárias geradas pelo sistema. Os detalhes deste diagrama se encontram no apêndice deste trabalho. 30 5 IMPLEMENTAÇÃO DO RAS O RAS foi implementado utilizando a tecnologia JEE6 (Java Enterprise Edition 6) devido à sua robustez e confiabilidade, além da facilidade no desenvolvimento de aplicações complexas. A arquitetura do sistema é baseada no padrão de projetos Service Layer (FOWLER, 2002). A Figura 10 mostra os diferentes pacotes que compõem a arquitetura. Figura 10 Arquitetura utilizada no desenvolvimento do RAS. Fonte: O autor (2010) As sessões contidas neste capítulo definem o modelo da solução utilizada, a representação do cromossomo, e demonstram os passos seguidos para a geração da população inicial, bem como a função custo associada ao critério de seleção. Também são apresentados os processos de seleção, cruzamento e mutação relacionados ao RAS. 5.1 MODELO DA SOLUÇÃO O modelo da solução é apresentado em forma de fluxograma na Figura 11. A seguir são apresentadas definições de seu funcionamento: o Geração dos dados de entrada como matriz (representando grades horárias). o Verifica se o número de indivíduos é menor ou igual a 50. 31 o Realiza a operação de cruzamento. o Realiza a operação de mutação. o Avalia os indivíduos da população. o Seleciona os indivíduos que formarão a próxima geração. o Verifica se um dos critérios de parada foi atingido. o Fim da execução e apresentação dos resultados. Figura 11 Fluxograma do Modelo da Solução. Fonte: O autor (2010) 32 5.2 CROMOSSOMO O cromossomo foi modelado baseado no problema proposto, onde é representado por um conjunto de listas pré-definidas, que estão relacionadas. A Figura 12 ilustra como é representado o cromossomo utilizado no RAS. Figura 12 Representação do cromossomo para o problema. Fonte: O autor (2010) Os cursos são representados por uma lista, que é um array que contém N1 objetos, cada um representando um curso qualquer. Para cada curso, pode existir N2 turmas, dependendo da quantidade de semestres que o curso possui. As turmas são representadas por uma lista, que é um array que contém N2 objetos, cada um representando uma turma qualquer. Para cada turma, pode existem N3 disciplinas. As disciplinas são representadas por uma lista, que é um array que contém N3 objetos, cada um representando uma disciplina qualquer. Para cada disciplina, pode existir N4 professores que podem lecioná-la. Os professores são representados por uma lista, que é um array que contém N4 objetos, cada um representando um professor qualquer. Para cada professor, pode existir N5 disponibilidades. As disponibilidades são representadas por uma lista, que é um array que contém N5 objetos, cada um representando uma disponibilidade qualquer. Cada disponibilidade representa um objeto que contém o dia da semana e horário. 33 5.3 GERAÇÃO DA POPULAÇÃO INICIAL A população inicial é gerada através de um algoritmo que realiza a alocação de professores e disciplinas de um curso em uma matriz que representa uma grade horária para todas as turmas do curso. A geração da população inicial é a base para a execução de um algoritmo genético. No modelo de solução proposto, durante sua execução são relacionados professores, disciplinas e turmas de forma aleatória, de modo que as restrições impostas pelo modelo sejam respeitadas. Ao final da criação da população inicial, haverá condições suficientes para a aplicação dos operadores genéticos, de modo a gerar novas populações de melhor qualidade. 5.4 FUNÇÃO CUSTO Os modelos de algoritmo genético tradicional, em geral possuem uma tabela de pontuação positiva e negativa para cada caso do cromossomo. Nosso modelo possui uma validação diferenciada, pois foi elaborado um algoritmo que faz a avaliação das disponibilidades de cada professor no momento em que ele será devidamente alocado para uma grade horária em um dia da semana e horário qualquer. Essa função é essencial para a alocação correta dos professores e disciplinas nas grades horárias, impossibilitando a alocação de professores em dias que não possuem disponibilidade, ou com disciplinas que não possuem conhecimento e também caso não possuam carga horária suficiente para lecionar mais disciplinas. A função custo também trata da pontuação das grades horárias quando preenchidas. Quando cada slot da grade horária é preenchido, a pontuação da grade horária ganha 2 pontos. Quando é detectado um slot em branco, perde 2 pontos. Com essa pontuação, com a quantidade de horas letivas por dia, e a quantidade de dias letivos por semana, a grade horária pode chegar até 40 pontos quando preenchida por completo, ou até -40 pontos quando não possui nenhum professor alocado. A Figura 13 mostra um exemplo da pontuação da grade horária. 34 Figura 13 Exemplo de pontuação da grade horária. Fonte: O autor (2010) Com base nessa pontuação, é possível saber qual grade horária possui mais professores alocados, permitindo assim saber quando o cromossomo é uma boa solução gerada, ou seja, quando todas as grades horárias estiverem preenchidas. O calculo da pontuação máxima do cromossomo é apresentado na figura abaixo: Figura 14 Calculo da pontuação máxima do cromossomo. Fonte: O autor (2010) Caso o curso possua 8 semestres, e as aulas ocorram 5 vezes por semana, 4 horas por dia, então a pontuação máxima possível para o cromossomo ser uma solução completa é 320 pontos. 35 5.5 CRUZAMENTO (CROSSOVER) A operação de cruzamento projetada para o RAS difere das operações tradicionais, devido a representação do cromossomo utilizada. O cruzamento é realizado logo após a função de seleção, onde serão escolhidos 2 cromossomos da população. O cruzamento é realizado a partir das grades horárias de cada cromossomo, onde é verificada a pontuação de cada uma e comparando qual das grades possui maior pontuação. A Figura 15 ilustra o exemplo. Figura 15 Representação dos cromossomos durante o cruzamento. Fonte: O autor (2010) 36 Cada grade horária possui uma pontuação, que corresponde ao seu preenchimento. Após o algoritmo selecionar as grades horárias com a melhor pontuação, o cromossomo filho é gerado com partes de seus ascendentes, como pode ser visto na Figura 16. Figura 16 Representação do cromossomo após o cruzamento. Fonte: O autor (2010) Após o cromossomo filho ser gerado, é possível que algumas alocações inválidas ocorram, como professores com carga horária excedida ou alocação de 37 professores em um mesmo dia para mais de uma turma. Esses casos são validados por um algoritmo que se encarrega de analisá-los quando o cromossomo filho é gerado, removendo as alocações não permitidas. 5.6 MUTAÇÃO A mutação visa obter uma boa distribuição dentro de cada geração do cromossomo. Após gerar um cromossomo filho, é selecionada de forma aleatória uma turma que não esteja preenchida por completa, o que caracteriza em uma porcentagem baixa na execução do algoritmo. Diferente dos operadores de mutação tradicional, essa função de mutação não altera apenas o valor do cromossomo. Como a representação do cromossomo é específica para um problema, a função da mutação, nesse caso, é alterar o professor alocado para uma disciplina. No caso das disciplinas que possuem 2 horas/aula, a mutação ocorre dentro desse cromossomo, onde é selecionada de forma aleatória uma posição no cromossomo que representa uma grade horária de uma turma. A função de mutação se encarrega de chegar se existe disponibilidade do professor ser reposicionado em outro slot da grade horária, favorecendo os professores que serão alocados futuramente. Pode ser visto um exemplo dessa mutação na Figura 17. Figura 17 Mutação com disciplinas que possuem carga horária de 2 horas. Fonte: O autor (2010) 38 Caso a disciplina possua 4 horas/aula, a função de mutação seleciona de forma aleatória um slot qualquer de uma grade horária do cromossomo, e então é analisado dentro da disciplina naquele slot selecionado quais outros professores, que podem lecioná-la, estão disponíveis para aquele dia/hora e possuem carga horária suficiente. Se for encontrado algum professor que corresponda esses requisitos, então é feita a mutação entre os professores, em todos os slots da grade horária que possuir a disciplina correspondente. Pode ser visto um exemplo dessa mutação na Figura 18. Figura 18 Mutação com disciplinas que possuem carga horária de 4 horas. Fonte: O autor (2010) 5.7 SELEÇÃO A seleção dos indivíduos é baseada na pontuação de cada indivíduo da população, ou seja, os indivíduos que possuem melhor pontuação têm maior chance de serem selecionados para formar a nova população. A pontuação de um cromossomo é calculada pela soma da pontuação de todas as grades horárias que ele possui. Com isso, a chance de obter um novo cromossomo filho com boa pontuação se torna maior. 39 5.8 ELITISMO Após cada realização das operações de seleção e cruzamento, é gerado um novo cromossomo filho. Esse cromossomo é avaliado, calculando sua pontuação e comparado com o melhor cromossomo já obtido. Se o novo cromossomo gerado obtiver uma pontuação melhor, então ele passa a ser o novo melhor cromossomo encontrado. Ele será guardado, podendo assim aparecer nas próximas populações geradas. 5.9 REPRESENTAÇÃO DA SOLUÇÃO As soluções são representadas por cromossomos, onde cada cromossomo possui uma lista de turmas e cada turma possui uma matriz que representa a sua grade horária. Essa matriz contendo uma grade horária de cada turma para um curso hipotético é feita preenchida por uma relação entre professores e disciplinas em horários compatíveis de acordo com o período de aula da turma e as disponibilidades dos professores. Cada cromossomo é uma solução, porém, quando um cromossomo conseguir preencher todas as suas grades horárias, esse cromossomo é considerado uma solução boa ou satisfatória para o problema. 40 6 INTERFACE WEB O RAS foi implementado para funcionar em um ambiente web, permitindo que seu acesso possa ser realizado de qualquer dispositivo com acesso a internet. O ambiente disponibiliza algumas funcionalidades para o usuário logado. O administrador tem permissão para alterar todas as informações do sistema, inserir e excluir dados. Os professores podem tem permissão apenas para alterar suas disponibilidades, e visualizar as grades horárias geradas. A figura 19 ilustra como é representado o sistema em um ambiente web. Figura 19 Ambiente Web do RAS. Fonte: O autor (2010) O menu apresenta todas as categorias que envolvem o sistema, ou seja, o usuário, no caso o administrador, pode escolher o tipo de categoria que deseja acessar, sendo direcionado para uma tela que lhe permite listar, inserir, visualizar, alterar e excluir dados. A figura 20, por exemplo, mostra a página que lista os Professores cadastrados. 41 Figura 20 Página de Professores cadastrados. Fonte: O autor (2010) Após inserir todos os dados essenciais para gerar uma grade horária, o administrador pode escolher no menu a opção “Gerar Grade Horária”. Uma nova janela irá abrir, apresentando a grade gerada (Figura 21). Figura 21 Parte da janela da grade horária gerada. Fonte: O autor (2010) 42 7 TESTES O teste do algoritmo genético adotado para o problema se baseia em analisar a qualidade do cromossomo gerado a cada nova população, ou seja, seu desempenho após cada geração e a quantidade de gerações realizadas até obter uma boa solução. Os testes foram feitos com uma base de dados representada por 25 professores, 46 disciplinas, 8 turmas e uma média de 3 dias disponíveis para cada professor por semana, gerando uma solução para apenas 1 curso. No primeiro teste, representado pelo Gráfico 1, a solução foi obtida após ter realizado a geração de 29 novas populações. 300 250 200 150 100 50 0 1 Gráfico 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 Desempenho do cromossomo durante o primeiro teste. Fonte: O autor (2010) O cromossomo iniciou com uma pontuação de 168. Sua pontuação mais baixa foi de 144 e após a 17 gerações, apresentou menos instabilidade durante o crescimento, até atingir a pontuação máxima. O segundo teste, representado pelo Gráfico 2, conseguiu obter uma solução após 27 gerações. 43 300 250 200 150 100 50 0 1 Gráfico 2 3 5 7 9 11 13 15 17 19 21 23 25 27 Desempenho do cromossomo durante o segundo teste. Fonte: O autor (2010) O cromossomo iniciou com uma pontuação de 208. Sua pontuação mais baixa foi de 168 e conseguiu atingir uma boa solução após 27 gerações. Os testes realizados demonstraram diferentes desempenhos. Isso se deve devido a disponibilização da grade horária da população gerada. Cada nova população gerada, as grades horárias são preenchidas de forma aleatória, mas validando os requisitos necessários dos professores para realizar a alocação de acordo com sua disponibilidade. Quando isso é feito, a cada nova geração, o algoritmo trabalho sempre com 1 cromossomo escolhido, como sendo o melhor da população. Esse cromossomo, enquanto for um bom cromossomo, permanecerá nas populações seguintes, até que seja gerado um cromossomo melhor. Em média, o algoritmo conseguiu chegar a uma solução satisfatória em aproximadamente 18 segundos. Mas esse tempo depende da capacidade de processamento do servidor e da quantidade de dados utilizados. Em alguns casos, os testes não conseguiram chegar a uma solução completa. Nesses casos o algoritmo gera uma grade horária com o melhor cromossomo da população, mesmo que algumas grades horárias não estejam preenchidas por completo. 44 8 CONCLUSÃO O objetivo deste trabalho era estudar o Problema de Alocação de Recursos e modelar e implementar uma estratégia que o solucionasse através de um Algoritmo Genético. Embora a aplicação de algoritmos genéticos para a resolução de problemas complexos, que exigem grande quantidade de processamento computacional não garanta um resultado ótimo, com este trabalho foi possível constatar que para problemas computacionalmente inviáveis o uso de algoritmos genéticos pode gerar resultados muito satisfatórios. A alocação de professores em grades horárias, quando feita de forma manual pode demandar diversos dias de esforço para os responsáveis pela tarefa. Com a utilização de técnicas heurísticas, como algoritmo genético neste caso, podem-se descobrir boas soluções em poucos minutos. Apesar da utilização de dados fictícios para a execução dos testes e geração das soluções, é possível executar o algoritmo utilizando dados reais. Vale ressaltar que problemas de alocação de recurso pertencem a classe de problemas NP-Completo, que são amplamente conhecidos no âmbito computacional pelo seu nível de complexidade. O objetivo deste trabalho utiliza conceitos não triviais para a resolução de problemas permitindo que a solução seja atingida com maior facilidade. 7.1 TRABALHOS FUTUROS Como trabalhos futuros sugerem-se alguns outros objetivos com base no RAS como os citados abaixo: • A geração da grade horária para diversos cursos simultaneamente. • Utilização de mais parâmetros para o algoritmo genético, tais como campus, nota de avaliação do professor em relação à turma, entre outros. • Melhorar o front-end utilizando técnicas de drag and drop para aprimorar a usabilidade do sistema. • Implementar uma solução distribuída para instancias muito grandes do Problema de Alocação de Recursos. 45 APÊNDICE A – DESCRIÇÃO DOS CASOS DE USO Caso de Uso: UC01 – Login Sumario: Este caso de uso inicia-se quando o usuário deseja incluir, alterar ou excluir algum registro do sistema. Atores: Administrador, Professor Pré-condições: O usuário estar cadastrado no sistema. Fluxo Principal: 1. O usuário acessa o sistema através do endereço de acesso. 2. O usuário preenche os campos Usuário e Senha. 3. O usuário clica no botão Login. 4. O usuário é direcionado para a pagina inicial da aplicação e o caso de uso termina. Fluxos Alternativos: Fluxos de Exceção: Não se aplica. 4a. Dados inválidos nos campos de login 4a1. O usuário será direcionado para a página de login inválido Tabela 2 UC01 - Login. Fonte: O autor (2010) Caso de Uso: UC02 – Buscar Professor Sumario: Este caso de uso inicia-se quando o usuário deseja buscar um professor no sistema. Atores: Administrador Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita a busca por um professor. 2. O sistema solicita os campos disponíveis a serem preenchidos para localizar um professor cadastrado. 3. O usuário informa os dados referentes à busca por um professor e pressiona o botão “Procurar”. 4. O sistema retorna os registros referentes aos dados informados pelo usuário. Fluxos Alternativos: Fluxos de Exceção: Tabela 3 UC02 - Buscar Professor. Fonte: O autor (2010) 46 Caso de Uso: UC03 – Incluir Professor Sumario: Este caso de uso inicia-se quando o usuário deseja registrar um novo professor no sistema. Atores: Administrador Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita o cadastramento de um professor. 2. O sistema solicita os campos disponíveis a serem preenchidos para fazer o cadastro completo do professor. 3. O usuário informa os dados referentes à inclusão do professor, confere os dados digitados e submete a gravação do cadastro. 4. UC02. 5. O sistema solicita a confirmação para a gravação. 6. O usuário confirma a gravação. 7. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 6a. O usuário desiste de cadastrar o professor. 6a1. O usuário pressiona o botão “Cancelar” 6a2. O cadastramento é cancelado e o caso de uso é encerrado. Fluxos de Exceção: 4a. Dados inválidos na ficha de preenchimento. 4a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 4a2. Retorna ao passo 2 do fluxo principal. 4b. O professor já está cadastrado no sistema 4b1. O sistema retorna a seguinte mensagem “Professor já cadastrado.” Tabela 4 UC03 - Incluir Professor. Fonte: O autor (2010) Caso de Uso: UC04 – Alterar Professor Sumario: Este caso de uso inicia-se quando o usuário deseja alterar o registro de um professor cadastrado no sistema. 47 Atores: Administrador Pré-condições: UC01 e haver ao menos um professor previamente cadastrado. Fluxo Principal: 1. UC02. 2. O sistema lista os professores relacionados aos parâmetros de busca informados, o usuário seleciona o professor desejado e pressiona o botão “Alterar”. 3. O usuário informa os dados referentes à alteração dos dados do professor, confere os dados digitados e submete a alteração dos dados do cadastro. 4. O sistema solicita a confirmação para a gravação. 5. O usuário confirma a gravação. 6. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 5a. O usuário desiste de alterar o cadastro do professor. 5a1. O usuário pressiona o botão “Cancelar” 5a2. A alteração é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 2a. Dados não cadastrados no sistema. 2a1. O sistema retorna a seguinte mensagem “Professor não encontrado”. 2a2. Retorna ao passo 2 do fluxo principal. 4a. Dados inválidos na ficha de preenchimento. 4a1 O sistema retorna a seguinte mensagem “Dados inválidos”. 4a2 Tabela 5 Retorna ao passo 2 do fluxo principal. UC04 - Alterar Professor. Fonte: O autor (2010) Caso de Uso: UC05 – Excluir Professor Sumario: Este caso de uso inicia-se quando o usuário deseja excluir o registro de um professor cadastrado no sistema. Atores: Administrador 48 Pré-condições: UC01 e haver ao menos um professor previamente cadastrado. Fluxo Principal: 1. UC02. 2. O sistema lista os professores relacionados aos parâmetros de busca informados, o usuário seleciona o professor desejado e pressiona o botão “Excluir”. 3. O sistema solicita a confirmação para a gravação. 4. O usuário confirma a gravação. 5. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 4a. O usuário desiste de excluir o professor cadastrado. 4a1. O usuário pressiona o botão “Cancelar”. 4a2. A exclusão é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 2a. Dados não cadastrados no sistema. 2a1. O sistema retorna a seguinte mensagem “Professor não encontrado”. 2a2. Retorna ao passo 2 do fluxo principal. Tabela 6 UC05 - Excluir Professor. Fonte: O autor (2010) Caso de Uso: UC06 – Buscar Turma Sumario: Este caso de uso inicia-se quando o usuário deseja buscar uma turma no sistema. Atores: Administrador Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita a busca por uma turma. 2. O sistema solicita os campos disponíveis a serem preenchidos para localizar uma turma cadastrada. 3. O usuário informa os dados referentes à busca por uma turma e pressiona o botão “Procurar”. 4. O sistema retorna os registros referentes aos dados informados pelo usuário. 49 Fluxos Alternativos: Fluxos de Exceção: Tabela 7 UC06 - Buscar Turma. Fonte: O autor (2010) Caso de Uso: UC07 – Incluir Turma Sumario: Este caso de uso inicia-se quando o usuário deseja registrar uma nova turma no sistema. Atores: Administrador Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita o cadastramento de uma turma. 2. O sistema solicita os campos disponíveis a serem preenchidos para fazer o cadastro completo da turma. 3. O usuário informa os dados referentes à inclusão da turma, confere os dados digitados e submete a gravação do cadastro. 4. UC06. 5. O sistema solicita a confirmação para a gravação. 6. O usuário confirma a gravação. 7. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 5a. O usuário desiste de cadastrar a turma. 5a1. O usuário pressiona o botão “Cancelar” 5a2. O cadastramento é cancelado e o caso de uso é encerrado. Fluxos de Exceção: 4a. Dados inválidos na ficha de preenchimento. 4a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 4a2. Retorna ao passo 2 do fluxo principal. Tabela 8 UC07 - Incluir Turma. Fonte: O autor (2010) Caso de Uso: UC08 – Alterar Turma Sumario: Este caso de uso inicia-se quando o usuário deseja alterar o registro de uma turma cadastrada no sistema. 50 Atores: Administrador Pré-condições: UC01 e haver ao menos uma turma previamente cadastrada. Fluxo Principal: 1. UC06. 2. O sistema lista as turmas relacionadas aos parâmetros de busca informados, o usuário seleciona a turma desejada e pressiona o botão “Alterar”. 3. O usuário informa os dados referentes à alteração dos dados da turma, confere os dados digitados e submete a alteração dos dados do cadastro. 4. O sistema solicita a confirmação para a gravação. 5. O usuário confirma a gravação. 6. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 3a. O usuário desiste de alterar o cadastro da turma. 3a1. O usuário pressiona o botão “Cancelar” 3a2. A alteração é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 1a. Dados não cadastrados no sistema. 1a1. O sistema retorna a seguinte mensagem “Turma não encontrada”. 1a2. Retorna ao passo 2 do fluxo principal. 2a. Dados inválidos na ficha de preenchimento. 2a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 2a2. Retorna ao passo 2 do fluxo principal. Tabela 9 UC08 - Alterar Professor. Fonte: O autor (2010) Caso de Uso: UC09 – Excluir Turma Sumario: Este caso de uso inicia-se quando o usuário deseja excluir o registro de uma turma cadastrada no sistema. Atores: Administrador Pré-condições: UC01 e haver ao menos uma turma previamente 51 cadastrada. Fluxo Principal: 1. UC06. 2. O sistema lista as turmas relacionadas aos parâmetros de busca informados, o usuário seleciona a turma desejada e pressiona o botão “Excluir”. 3. O sistema solicita a confirmação para a gravação. 4. O usuário confirma a gravação. 5. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 4a. O usuário desiste de excluir a turma cadastrada. 4a1. O usuário pressiona o botão “Cancelar”. 4a2. A exclusão é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 2a. Dados não cadastrados no sistema. 2a1. O sistema retorna a seguinte mensagem “Turma não encontrada”. 2a2. Retorna ao passo 2 do fluxo principal. Tabela 10 UC09 - Excluir Turma. Fonte: O autor (2010). Caso de Uso: UC10 – Buscar Disciplina Sumario: Este caso de uso inicia-se quando o usuário deseja buscar por uma disciplina cadastrada no sistema. Atores: Administrador Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita a busca por uma disciplina. 2. O sistema solicita os campos disponíveis a serem preenchidos para localizar uma disciplina cadastrada. 3. O usuário informa os dados referentes à busca por uma disciplina e pressiona o botão “Procurar”. 4. O sistema retorna os registros referentes aos dados informados pelo usuário. Fluxos Alternativos: 52 Fluxos de Exceção: Tabela 11 UC10 - Buscar Disciplina. Fonte: O autor (2010) Caso de Uso: UC11 – Incluir Disciplina Sumario: Este caso de uso inicia-se quando o usuário deseja registrar uma nova disciplina no sistema. Atores: Administrador Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita o cadastramento de uma disciplina. 2. O sistema solicita os campos disponíveis a serem preenchidos para fazer o cadastro completo da disciplina. 3. O usuário informa os dados referentes à inclusão da disciplina, confere os dados digitados e submete a gravação do cadastro. 4. UC10. 5. O sistema solicita a confirmação para a gravação. 6. O usuário confirma a gravação. 7. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 6a. O usuário desiste de cadastrar a disciplina. 6a1. O usuário pressiona o botão “Cancelar” 6a2. O cadastramento é cancelado e o caso de uso é encerrado. Fluxos de Exceção: 5a. Dados inválidos na ficha de preenchimento. 5a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 5a2. Retorna ao passo 2 do fluxo principal. Tabela 12 UC11 - Incluir Disciplina. Fonte: O autor (2010) Caso de Uso: UC12 – Alterar Disciplina Sumario: Este caso de uso inicia-se quando o usuário deseja alterar o registro de uma disciplina cadastrada no sistema. 53 Atores: Administrador Pré-condições: UC01 e haver ao menos uma disciplina previamente cadastrada. Fluxo Principal: 1. UC10. 2. O sistema lista as disciplinas relacionadas aos parâmetros de busca informados, o usuário seleciona a disciplina desejada e pressiona o botão “Alterar”. 3. O usuário informa os dados referentes à alteração dos dados da disciplina, confere os dados digitados e submete a alteração dos dados do cadastro. 4. O sistema solicita a confirmação para a gravação. 5. O usuário confirma a gravação. 6. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 7a. O usuário desiste de alterar o cadastro da disciplina. 7a1. O usuário pressiona o botão “Cancelar” 7a2. A alteração é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 1a. Dados não cadastrados no sistema. 1a1. O sistema retorna a seguinte mensagem “Disciplina não encontrada”. 1a2. Retorna ao passo 2 do fluxo principal. 3a. Dados inválidos na ficha de preenchimento. 3a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 3a2. Retorna ao passo 2 do fluxo principal. Tabela 13 UC12 - Alterar Disciplina. Fonte: O autor (2010) Caso de Uso: UC13 – Excluir Disciplina Sumario: Este caso de uso inicia-se quando o usuário deseja excluir o registro de uma disciplina cadastrada no sistema. Atores: Administrador 54 Pré-condições: UC01 e haver ao menos uma disciplina previamente cadastrada. Fluxo Principal: 1. UC10. 2. O sistema lista as disciplinas relacionadas aos parâmetros de busca informados, o usuário seleciona a disciplina desejada e pressiona o botão “Excluir”. 3. O sistema solicita a confirmação para a gravação. 4. O usuário confirma a gravação. 5. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 4a. O usuário desiste de excluir a disciplina cadastrada. 4a1. O usuário pressiona o botão “Cancelar”. 4a2. A exclusão é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 2a. Dados não cadastrados no sistema. 2a1. O sistema retorna a seguinte mensagem “Disciplina não encontrada”. 2a2. Retorna ao passo 2 do fluxo principal. Tabela 14 UC13 - Excluir Disciplina. Fonte: O autor (2010) Caso de Uso: UC14 – Incluir Horário Disponível Sumario: Este caso de uso inicia-se quando o usuário deseja registrar um novo horário disponível para ministrar aulas. Atores: Administrador e Professor Pré-condições: UC01. Fluxo Principal: 1. O usuário solicita o cadastramento de um horário disponível. 2. O sistema solicita os campos disponíveis a serem preenchidos para fazer o cadastro completo do horário. 3. O usuário informa os dados referentes à inclusão do horário, confere os dados digitados e submete a 55 gravação do cadastro. 4. O sistema solicita a confirmação para a gravação. 5. O usuário confirma a gravação. 6. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 5a. O usuário desiste de cadastrar o horário. 5a1. O usuário pressiona o botão “Cancelar”. 5a2. O cadastramento é cancelado e o caso de uso é encerrado. Fluxos de Exceção: 4a. Dados inválidos na ficha de preenchimento. 4a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 4a2. Retorna ao passo 2 do fluxo principal. Tabela 15 UC14 - Incluir Horário Disponível. Fonte: O autor (2010) Caso de Uso: UC15 – Alterar Horário Disponível Sumario: Este caso de uso inicia-se quando o usuário deseja alterar o registro de um horário disponível cadastrado no sistema. Atores: Administrador e Professor Pré-condições: UC01 e haver ao menos um horário previamente cadastrado. Fluxo Principal: 1. O usuário solicita a busca por um horário. 2. O sistema solicita os campos disponíveis a serem preenchidos para localizar um horário. 3. O usuário informa os dados referentes à busca por um horário e pressiona o botão “Procurar”. 4. O sistema lista os horários relacionados aos parâmetros de busca informados, o usuário seleciona o horário desejado e pressiona o botão “Alterar”. 5. O usuário informa os dados referentes à alteração dos dados do horário, confere os dados digitados e submete a alteração dos dados do cadastro. 6. O sistema solicita a confirmação para a gravação. 56 7. O usuário confirma a gravação. 8. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 7a. O usuário desiste de alterar o cadastro do horário. 7a1. O usuário pressiona o botão “Cancelar”. 7a2. A alteração é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 4a. Dados não cadastrados no sistema. 4a1. O sistema retorna a seguinte mensagem “Horário não encontrado”. 4a2. Retorna ao passo 2 do fluxo principal. 6a. Dados inválidos na ficha de preenchimento. 6a1. O sistema retorna a seguinte mensagem “Dados inválidos”. 6a2. Retorna ao passo 2 do fluxo principal. Tabela 16 UC15 - Alterar Horário Disponível. Fonte: O autor (2010) Caso de Uso: UC16 – Excluir Horário Disponível Sumario: Este caso de uso inicia-se quando o usuário deseja excluir o registro de um horário disponível cadastrado no sistema. Atores: Administrador Pré-condições: UC01 e haver ao menos um horário previamente cadastrado. Fluxo Principal: 1. O usuário solicita a busca por um horário. 2. O sistema solicita os campos disponíveis a serem preenchidos para localizar um horário. 3. O sistema lista os horários relacionadas aos parâmetros de busca informados, o usuário seleciona o horário desejado e pressiona o botão “Excluir”. 4. O sistema solicita a confirmação para a gravação. 5. O usuário confirma a gravação. 6. O sistema efetua a gravação e o caso de uso termina. 57 Fluxos Alternativos: 5a. O usuário desiste de excluir o horário cadastrado. 5a1. O usuário pressiona o botão “Cancelar”. 5a2. A exclusão é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 3a. Dados não cadastrados no sistema. 3a1. O sistema retorna a seguinte mensagem “Horário não encontrado”. 3a2. Retorna ao passo 2 do fluxo principal. Tabela 17 UC16 - Excluir Horário Disponível. Fonte: O autor (2010) Caso de Uso: UC17 – Gerar Grade Horária Sumario: Este caso de uso inicia-se quando o usuário deseja gerar uma grade horária. Atores: Administrador Pré-condições: UC01 e haver os dados de professor, disciplinas e turmas previamente cadastrados no sistema. Fluxo Principal: 1. O usuário solicita a geração de uma grade horária. 2. O sistema solicita os campos disponíveis a serem preenchidos para gerar a grade horária. 3. O sistema solicita a confirmação para a gravação. 4. O usuário confirma a gravação. 5. O sistema efetua a gravação e o caso de uso termina. Fluxos Alternativos: 4a. O usuário desiste de excluir o horário cadastrado. 4a1. O usuário pressiona o botão “Cancelar”. 4a2. A exclusão é cancelada e o caso de uso é encerrado. Fluxos de Exceção: 3a. Dados não cadastrados no sistema. 3a1. O sistema retorna a seguinte mensagem “Não há dados suficientes para a geração da grade horária”. 3a2. Retorna ao passo 2 do fluxo principal. Tabela 18 UC17 – Gerar Grade Horária. Fonte: O autor (2010) 58 Caso de Uso: UC18 – Visualizar Grade Horária Sumario: Este caso de uso inicia-se quando o usuário deseja visualizar uma grade horária. Atores: Administrador e Professor Pré-condições: Haver grade horária previamente cadastrada no sistema. Fluxo Principal: 1. O usuário solicita a visualização de uma grade horária. 2. O sistema solicita os campos disponíveis a serem preenchidos para a visualização da grade horária. 3. O sistema exibe a grade horária para o usuário e o caso de uso termina. Fluxos Alternativos: Fluxos de Exceção: 3a. Dados não cadastrados no sistema. 3a1. O sistema retorna a seguinte mensagem “Grade horária não encontrada”. 3a2. Retorna ao passo 2 do fluxo principal. Tabela 19 UC18 – Visualizar Grade Horária. Fonte: O autor (2010) 59 APÊNDICE B – DESCRIÇÃO DAS TABELAS Nome da Tabela Descrição Coluna PROFESSOR_ID PROFESSOR_NOME ATIVO_ID CARGA_HORARIA Tabela 20 Descrição da tabela PROFESSOR. Fonte: O autor (2010) Nome da Tabela Descrição Coluna ROLE_ID ROLE_DESCRICAO Tabela 21 ROLE_PROFESSOR Estrutura que armazena as roles de um professor Descrição Tipo de dado Nulo ID da role Varchar2(20) N ID do professor Varchar2(20) N Consistência PK, FK (ROLE) PK, FK (PROFESSOR) Descrição da tabela ATIVO. Fonte: O autor (2010) DISCIPLINA Estrutura que armazena as informações sobre cada disciplina Descrição Tipo de dado Nulo Consistência ID da disciplina Varchar2(20) N PK Nome da Varchar2(100) N disciplina Descrição da tabela DISCIPLINA. Fonte: O autor (2010) Nome da Tabela Descrição Coluna CURSO_ID CURSO_DESCRICAO Tabela 25 PK ATIVO Estrutura que armazena os professores ativos e não ativos Descrição Tipo de dado Nulo Consistência ID da tabela Ativo Number(1) N PK Descrição da tabela Varchar2(100) N Ativo Nome da Tabela Descrição Coluna DISCIPLINA_ID DISCIPLINA_DESCRICAO Tabela 24 Consistência Descrição da tabela ROLE_PROFESSOR. Fonte: O autor (2010) Nome da Tabela Descrição Coluna ATIVO_ID ATIVO_DESCRICAO Tabela 23 ROLE Estrutura que armazena o perfil de acesso Descrição Tipo de dado Nulo ID da role Varchar2(20) N Descrição da role Varchar2(100) N Descrição da tabela ROLE. Fonte: O autor (2010) Nome da Tabela Descrição Coluna ROLE_ID PROFESSOR_iD Tabela 22 PROFESSOR Estrutura que armazena as informações sobre cada professor. Descrição Tipo de dado Nulo Consistência ID do professor Varchar2(20) N PK Nome do professor Varchar2(100) N Professor ativo no Number(1) N FK (ATIVO) sistema. Carga horária Number N disponível do professor CURSO Estrutura que armazena as informações sobre cada curso Descrição Tipo de dado Nulo Consistência ID do curso Varchar2(20) N PK Nome do curso Varchar2(100) N Descrição da tabela CURSO. Fonte: O autor (2010) 60 Nome da Tabela Descrição Coluna DISCIPLINA_ID CURSO_ID SEMESTRE_ID QUANTIDADE_AULAS Tabela 26 Descrição da tabela DISCIPLINA_CURSO. Fonte: O autor (2010) Nome da Tabela Descrição Coluna DISCIPLINA_ID CURSO_ID PROFESSOR_ID Tabela 27 PROFESSOR_DISCIPLINA_CURSO Estrutura que armazena o curso e as disciplinas de cada professor Descrição Tipo de dado Nulo Consistência ID da disciplina Varchar2(20) N PK, FK (DISCIPLINA) ID do curso Varchar2(20) N PK, FK (CURSO) ID do professor Varchar2(20) N PK, FK (PROFESSOR) Descrição da tabela PROFESSOR_DISCIPLINA_CURSO. Fonte: O autor (2010) Nome da Tabela Descrição Coluna TURMA_ID TURMA_DESCRICAO SEMESTRE_ID PERIODO_ID CURSO_ID Tabela 28 DISCIPLINA_CURSO Estrutura que armazena as disciplinas de cada curso Descrição Tipo de dado Nulo Consistência ID da disciplina Varchar2(20) N PK, FK (DISCIPLINA) ID do curso Varchar2(20) N PK, FK (CURSO) ID do semestre Number N FK (SEMESTRE) Quantidade de Number N aulas ministradas da disciplina no curso. TURMA Estrutura que armazena as informações sobre cada turma Descrição Tipo de dado Nulo Consistência ID da turma Varchar2(20) N PK Nome da turma Varchar2(100) N ID do semestre Number N FK (SEMESTRE) ID do período Character(1) N FK (PERIODO) ID do curso Varchar2(20) N FK (CURSO) Descrição da tabela TURMA. Fonte: O autor (2010) Nome da Tabela Descrição Coluna SEMESTRE_ID SEMESTRE_DESCRICAO Tabela 29 Descrição da tabela SEMESTRE. Fonte: O autor (2010) Nome da Tabela Descrição Coluna HORARIO_ID HORARIO_INICIO HORARIO_FIM PERIODO_ID Tabela 30 SEMESTRE Estrutura que armazena as informações sobre os semestres Descrição Tipo de dado Nulo Consistência ID do semestre Number N PK Descrição do Varchar2(100) N semestre HORARIO Estrutura que armazena as informações sobre cada horário Descrição Tipo de dado Nulo Consistência ID do horário Number N PK Hora de inicio da Varchar2(5) N aula Hora de termino da Varchar2(5) N aula ID do período Character(1) N FK (PERIODO) Descrição da tabela HORARIO. Fonte: O autor (2010) 61 Nome da Tabela Descrição Coluna PERIODO_ID PERIODO_DESCRICAO Tabela 31 PERIODO Estrutura que armazena as informações sobre cada período Descrição Tipo de dado Nulo Consistência ID do período Character(1) N PK Descrição do Varchar2(100) N período Descrição da tabela PERIODO. Fonte: O autor (2010) Nome da Tabela Descrição Coluna DIA_SEMANA_ID DIA_SEMANA_DESCRICAO Tabela 32 Descrição da tabela DIA_SEMANA. Fonte: O autor (2010) Nome da Tabela Descrição Coluna DIA_SEMANA_ID HORARIO_ID Tabela 33 DISPONIBILIDADE Estrutura que armazena os horários disponíveis de cada professor Descrição Tipo de dado Nulo Consistência ID do dia da semana Number(1) N PK, FK (DIA_SEMANA) ID do horário Number N PK, FK (HORARIO) ID do professor Varchar2(20) N PK, FK (PROFESSOR) Descrição da tabela DISPONIBILIDADE. Fonte: O autor (2010) Nome da Tabela Descrição Coluna DISCIPLINA_ID CURSO_ID PROFESSOR_ID DIA_SEMANA_ID HORARIO_ID Tabela 35 DIA_SEMANA_HORARIO Estrutura que armazena os horários de cada dia da semana Descrição Tipo de dado Nulo Consistência ID do dia da semana Number(1) N PK, FK (DIA_SEMANA) ID do horário Number N PK, FK (HORARIO) Descrição da tabela DIA_SEMANA_HORARIO. Fonte: O autor (2010) Nome da Tabela Descrição Coluna DIA_SEMANA_ID HORARIO_ID PROFESSOR_ID Tabela 34 DIA_SEMANA Estrutura que armazena as informações sobre cada dia da semana Descrição Tipo de dado Nulo Consistência ID do dia da Number(1) N PK semana Descrição do dia Varchar2(100) N da semana GRADE_HORARIA Estrutura que armazena os professores e disciplinas, nos dias da semana e horários disponíveis. Descrição Tipo de dado Nulo Consistência ID da disciplina Varchar2(20) N PK, FK (DISCIPLINA) ID do curso Varchar2(20) N PK, FK (CURSO) ID do professor Varchar2(20) N PK, FK (PROFESSOR) ID do dia da semana Number(1) N PK, FK (DIA_SEMANA) ID do horário Number N PK, FK (HORARIO) Descrição da tabela GRADE_HORARIA. Fonte: O autor (2010) 62 REFERÊNCIAS BIBLIOGRÁFICAS APPLEGATE, David L. The travelling salesman problem: a computational Study. Princeton University Press, 2006. BOOCH, Grady; JACOBSON, Ivar; RUMBAUGH, Jim. Object Management Group: Unified Modeling Language. Disponível em: <http://www.uml.org/> Acesso em: 28 maio 2010. CHEN, Peter Pin-Shan. The Entity-Relationship Model--Toward a Unified View of Data. Massachussets Institute of Technology, 1976. COAD, Peter; YOURDON, Edward. Object-Oriented Design. Prentice Hall, 1991. COLORNI, Alberto; DORIGO, Marco; MANIEZZO, Vittorio. A Genetic Algorithm to solve the Timetable Problem. Dipartimento di Elettronica e Informazione Politecnico di Milano, 1992. DARWIN, Charles. A Origem das Espécies. London, 1859. ESPERIDIÃO, Márcia; SANTOS, Cerqueira Lucas Alberto Souza. Algoritmos Genéticos - Aspectos Matemáticos. Universidade Federal da Bahia, 2003. EVEN, S.; ITAI, A.; SHAMIR, A. On the complexity of timetabling and multicommodity flow problems. SIAM Journal of Computation, v. 5, pp. 691-703, 1976. FOWLER, Martin. Patterns of Enterprise Application Architecture. Addison-Wesley Professional, 2002. FRANGOULI, Harikleia; HARMANDAS, Vassilis; STAMATOPOULOS, Panagiotis. UTSE: Construction of Optimum Timetable for University Courses – A CLP Approach. University of Athens, 1995. 63 FUCILINI, Tiago P.; MARUANI, Eli; REBONATTO, Marcelo Trindade. Timetabling com algoritmos genéticos: resultados, restrições e exploração do paralelismo. Universidade de Passo Fundo, 2008. GAREY, Michael R.; JOHNSON, David S. Computers and Intractability: A Guide to the Theory of NP-Completeness. EUA: W. H. Freeman, 1979. GARRET, Jesse James. Ajax: A New Approach to Web Applications. Disponível em: <http://www.adaptivepath.com/ideas/essays/archives/000385.php> Acesso em: 28 maio 2010. GOLDBERG, David E. Genetic Algorithms in Search, Optimization, and Machine Learning. EUA: Addison-Wesley Longman Publishing, 1989. GOMES, Luiz Carlos Filho. Alocação de Professores em Horários do Plantão de Dúvidas para o Curso e Colégio Objetivo: Uma Abordagem Heurística. Universidade de São Paulo, 2006. HAMAWAKI, Cristiane Divina Lemes. Geração Automática de Grade Horária Usando Algoritmos Genéticos: O Caso da Faculdade de Engenharia Elétrica da UFU. Universidade Federal de Uberlândia, 2005. HILLIER, Frederick S.; LIEBERMAN, Gerald J. Introduction to Operations Research. McGraw-Hill, 1990. HORITA, Vanderlei Minori. Sistemas dinâmicos não lineares. Universidade Estadual Paulista, 2002. IBARAKI, Toshihide; KATOH, Naoki. Resource Allocation Problems: Algorithmic Approaches (Foundations of Computing). The MIT Press, 1988. JACOBSON, Ivar. Use Cases: Yesterday, Today, and Tomorrow. Disponível em: http://www-128.ibm.com/developerworks/rational/library/775.html outubro 2010. Acesso em: 29 64 JACOB, Antonio Fernando Lavareda Junior; ROCHA, Cláudio Alex Jorge. AGHORA: Algoritmos Genéticos para Geração de Horários de Aula. Universidade da Amazônia, 2005. KEMP, Roger L. Handbook of Strategic Planning. Nova Iorque: Cummings and Hathaway Publishers, 1995. LOPES, L. S. Uma Heurística Baseada em Algoritmos Genéticos Aplicada ao Problema de Cobertura de Conjuntos. São José dos Campos, 1995. MIRANDA, Marcio Nunes. Algoritmos Genéticos: Fundamentos e Aplicações. Disponível em: <http://www.gta.ufrj.br/~marcio/genetic.html> Acesso em: 15 maio 2010. NAUR, Peter; RANDELL, B. Software Engineering: Report on a Conference sponsored by the NATO Science Committee. Germany: Scientific Affairs Division, pp. 231, 1968. NIELSEN, Jakob. Usability Engineering. Boston: Academic Press, 1993. P. 26-37. OBITKO, Marek; SLAVÍK, Pavel. Visualization of Genetic Algorithms in a Learning Environment. Bratislava: Comenius University, 1999. PEREIRA, Jean Fretta; NETO, Wilson Castello Branco. Uma Abordagem Evolucionária para a Geração de Quadros de Horários. Rio Grande do Sul: Revista do CCEI, 2001, v. 5, n. 8, P. 103-111. SANTOS, Rogério Rodrigues dos; SARAMAGO, Sezimaria de Fátima Pereira; STEFFEN, Valder Jr. Especificação de Trajetória de Robôs em Tempo Ótimo. Universidade Federal de Uberlândia, 2004. SOUZA, Vítor E. Silva. Java EE 6 na Prática. JAVA Magazine, Rio de Janeiro, v. 80, p.20-34, 2010. 65 TEXEIRA, Maria A. Lima Pereira S. Um Problema de Alocação de Recursos. Universidade do Porto, 1991. WILSON, Bill. Recurrent Networks Architectures. University of New South Wales, 1991.