Buscando avaliar o sistema da melhor forma possível, foram realizados diversos testes.
Dentre estes, o que teve maior impacto na comprovação da viabilidade do sistema foi a geração de uma grade de horário simulando os mesmos dados do semestre atual.
A Figura 22 apresenta a grade de horário utilizada neste semestre, onde existem diversas irregularidades. Dentre elas algumas restrições hard. São restrições hard encontradas na grade de horário deste semestre: os professores Fabiane e Perfeito estão lecionando na quinta-feira, sendo que a disponibilidade da primeira é terça e quarta-feira; já a disponibilidade do segundo é segunda e sexta-feira. Também foram encontradas duas restrições soft, ambas acontecendo na primeira fase.
Uma é que a professora Fernanda ministra duas disciplinas na mesma fase, outra é, que essa professora leciona na mesma fase em dias consecutivos. Desta forma a grade de horário gerada foi penalizada duas vezes pela mesma regra de negócio, a RN 02. O Apêndice A apresenta as disponibilidades de cada professor, podendo-se, desta forma, verificar que seria impossível a grade de horário não receber estas penalidades, já que o professor de Álgebra tem disponibilidade para lecionar apenas nas quartas-feiras. No que diz respeito a professora Fernanda ministrar duas disciplinas para a mesma turma, deve-se a especificidade encontrada na instituição, onde os professores lecionam muitas disciplinas.
A Figura 23 representa a grade de horário gerada pelo sistema, de acordo com as regras de negócio apresentadas pela coordenação do curso. Esta grade viola as duas restrições soft apresentadas na grade de horário atual, já que é impossível pelas especificidades encontradas no curso de Ciência da Computação, que estas violações não ocorram.
Com o intuito de verificar o comportamento do AG, sem que o mesmo esteja tão engessado pelas especificidades da instituição, comprovando, desta forma, a sua capacidade de gerar uma grade completa, a Figura 24 ilustra uma grade de horário completa gerada com os dados fictícios. O AG gerou essa grade com apenas uma restrição soft. A restrição quebrada foi a RN 01, já que na sexta-feira existem duas disciplinas de programação alocadas. Sabendo-se que existem duas disciplinas de programação de seis créditos, o que obriga que sejam necessários dois dias para cada uma, mais duas disciplinas de programação de quatro créditos, precisando desta forma de mais um dia para cada disciplina, para que não haja tal sobreposição, seriam necessários seis dias distintos, o que não é possível pelos dias letivos serem de segunda a sexta-feira. Desta forma, esta sobreposição se torna necessária, tendo o sistema encontrado a melhor solução possível. Os dados fictícios utilizados para a geração desta grade de horário encontram-se no Apêndice C.
Figura 22. Grade de horário utilizada no semestre
Figura 23. Grade de horário gerada pelo sistema desenvolvido
Figura 24. Grade horária completa
A Tabela 2, apresentada na sequência do trabalho, ilustra a evolução da população dos cromossomos utilizado-se os dados fictícios. Os dados iniciais para processamento do AG que resultaram nesta tabela foram o seguinte: o tamanho da população foi de 1000 indivíduos, o número de iterações foi de 50 (mas devido ao fato que a partir da sétima iteração os dados se repetiram, figuram na tabela apenas as 10 primeiras iterações) a taxa de mutação foi de 5% e por fim o número de tentativas aleatórias para alocar disciplinas de quatro créditos foi de 15.
O processamento do AG com a entrada destes dados foi de aproximadamente 35 minutos.
Sendo deste tempo, mais de 90% para geração da população inicial. Para tal teste foi utilizado um computador com um processador Intel Core2 Duo 2.00 GHz e 4GB de memória ram.
Tabela 2. Resultados apresentados pelo AG com dados fictícios
Com o intuito de melhor testar o sistema desenvolvido, foram realizadas baterias de testes, sendo cada uma destas composta por 100 rodadas. Para tais testes buscou-se simular o aumento do número de penalidades, alterando-se algumas disponibilidades de professores e classificando mais disciplinas como disciplina de programação.
Para todos os testes, o tamanho da população foi de 100 indivíduos, o número máximo de iterações foi de 20 e a taxa de mutação foi de 5%. Alterando-se entre os testes, o número de tentativas aleatórias para as disciplinas de quatro créditos.
Tendo-se como referencia, o número de tentativas aleatórias para as disciplinas de quatro créditos, 20 tentativas, os processos chegaram a sua solução final entre 4 e 5 minutos. Com este parâmetro, chegou-se a melhor solução com o número de iterações ficando entre 8 e 16. A maior penalidade registrada na primeira iteração foi de 13 e o menor valor apresentado para a maior penalidade foi de 9.
Já, tendo-se como referencia, o número de tentativas aleatórias para as disciplinas de quatro créditos, 25 tentativas, os processos chegaram a sua solução final entre 4 e 7 minutos. Com este parâmetro, chegou-se a melhor solução com o número de iterações ficando entre 7 e 15. A maior penalidade registrada na primeira iteração foi de 13 e o menor valor apresentado para a maior penalidade foi de 9.
E tendo-se como referencia, o número de tentativas aleatórias para as disciplinas de quatro créditos, 30 tentativas, os processos chegaram a sua solução final entre 5 e 8 minutos. Com este parâmetro, chegou-se a melhor solução com o número de iterações ficando entre 7 e 16. A maior penalidade registrada na primeira iteração foi de 13 e o menor valor apresentado para a maior penalidade foi de 8.
Nas três últimas baterias de testes apresentadas, o número final de penalidades encontrada foi 3.
A Tabela 3, apresentada na sequência, ilustra os resultados encontrados nas baterias de testes detalhados anteriormente.
Tabela 3. Tabela de comparação dos resultados apresentados pelas baterias de testes
Dando continuidade ao trabalho, na próxima seção são apresentadas as conclusões e os trabalhos futuros.
5 CONCLUSÕES
Na presente pesquisa foi solucionado o problema de geração de grade de horário para o curso de Ciência da Computação do campus São José da UNIVALI. Para chegar ao sistema que resolvesse de forma efetiva o problema enfrentado pela coordenação do curso, foram necessários alguns passos.
Primeiro foi necessário pesquisar as técnicas existentes para solução do problema. Diante desta pesquisa foram encontradas muitas possibilidades. A solução poderia ter vindo por Heurística Construtiva, Simulated Annealing, Busca Tabu e etc. Entretanto, o trabalho baseou-se no Algoritmo Genético, acreditando-se em sua capacidade de solucionar problemas NP-Completos.
Após a escolha da técnica que seria utilizada, passou-se a fase de desenvolvimento.
Julgando-se que a melhor forma de se chegar a soluções ótimas seria partindo de uma população inicial composta apenas por indivíduos factíveis, criou-se uma heurística capaz de gerar tal população. Por este motivo, a geração da população inicial foi a parte mais árdua do desenvolvimento do AG. Um fator destacável desta heurística foi seu custo computacional, onde consegui-se gerar populações com no máximo 3.000 indivíduos.
Quanto ao método de seleção, inicialmente pretendia-se trabalhar com o Método da Roleta, contudo o Método Elitista apresentou melhor resultado quando se trabalhava com populações maiores.
Já quanto à mutação, no início da pesquisa, tinha-se a intenção de permitir movimentos de piora, mas foi detectado no decorrer dos testes que permitir tais movimentos prejudicava o desenvolvimento da população.
Terminado o desenvolvimento do sistema, iniciou-se a fase de testes com o intuito de avaliar como o AG se comportaria em produção. Foram realizados testes de diversas formas, com dados reais e fictícios. De acordo com o esperado, o AG se portou bem diante das avaliações a que foi submetido. Chegou-se a soluções ótimas na medida do possível, já que nem sempre existe a possibilidade de se gerar soluções sem qualquer penalidade, como nos casos apresentados na Seção 4.4.
Por fim, com o sistema desenvolvido e testado, procurou-se realizar uma documentação da forma mais clara possível, viabilizando desta forma a continuidade da pesquisa.
Na seção seguinte do trabalho são apresentadas as propostas para trabalhos futuros.