ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIO
|
|
- Rosa de Caminha
- 5 Há anos
- Visualizações:
Transcrição
1 UNIVERSIDADE DO PLANALTO CATARINENSE DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE SISTEMAS DE INFORMAÇÃO (BACHARELADO) EMANUEL MACHADO DA SILVA ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIO LAGES (SC) 2010
2 EMANUEL MACHADO DA SILVA ALGORITMOS GENÉTICOS PARA GERAÇÃO DE GRADES DE HORÁRIO Trabalho de Conclusão de Curso submetido à Universidade do Planalto Catarinense para obtenção dos créditos de disciplina com nome equivalente no curso de Sistemas de Informação Bacharelado. Orientação: Prof. Wilson Castello Branco Neto, Dr. LAGES (SC) 2010
3 EMANUEL MACHADO DA SILVA ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIO ESTE RELATÓRIO, DO TRABALHO DE CONCLUSÃO DE CURSO, FOI JULGADO ADEQUADO PARA OBTENÇÃO DOS CRÉDITOS DA DISCIPLINA DE TRABALHO DE CONCLUSÃO DE CURSO, DO 8º. SEMESTRE, OBRIGATÓRIA PARA OBTENÇÃO DO TÍTULO DE: BACHAREL EM INFORMAÇÃO SISTEMAS Lages (SC), 10 de Dezembro de 2010 Prof. Wilson Castello Branco Neto, Dr. Orientador BANCA EXAMINADORA: Prof. Angelo Augusto Frozza, M.Sc. IFC Campus Camboriú Prof. Sabrina Bet Koerich, M.Sc. UNIPLAC Prof. Alexandre Perin de Souza, M.Sc.. Professor de TCC Prof. Sabrina Bet Koerich, M.Sc. Coordenador de Curso DE
4 LISTA DE ILUSTRAÇÕES FIGURA 1 - Cromossomo do AG de BURIGO (2009)...26 FIGURA 2 - Cromossomo do AG deste trabalho...27 FIGURA 3 - Verificação de disponibilidade de professores...28 FIGURA 4 - Verificação de falta de aulas...28 FIGURA 5 - Verificação de choques de horário...29 FIGURA 6 - Roleta Simples...31 FIGURA 7 - Roleta Ponderada de BURIGO (2009)...32 FIGURA 8 - Roleta Ponderada clássica...33 FIGURA 9 - Máscara Adaptativa...34 FIGURA 10 - Máscara Adaptativa com cursos sem modificações...35 FIGURA 11 - Processo de Mutação...36 FIGURA 12 - Consulta de Cursos...51 FIGURA 13 - Cadastro de Cursos...51 FIGURA 14 - Consulta de Turmas...51 FIGURA 15 - Cadastro de Turmas...52 FIGURA 16 - Consulta de Disciplinas...52 FIGURA 17 - Cadastro de Disciplinas...52 FIGURA 18 - Consulta de Professores...53 FIGURA 19 - Cadastro de Professores...53 FIGURA 20 - Consulta de Disponibilidades...54 FIGURA 21 - Cadastro de Disponibilidades...54 FIGURA 22 - Consulta de Aulas...54 FIGURA 23 - Cadastro de Aulas...55 FIGURA 24 - Tela inicial de relatórios...55 FIGURA 25 - Grade gerada para um curso...56 QUADRO 1 - Roleta Ponderada...40 QUADRO 2 - Resultado dos testes com a Roleta Ponderada convencional...41 QUADRO 3 - Código de mutação por curso...41 QUADRO 4 - Resultado dos testes com a mutação por curso...42 QUADRO 5 - Código de inicialização aleatória...43 QUADRO 6 - Resultado dos testes com a inicialização aleatória...44 QUADRO 7 - Preenchimento do vetor de outras aulas...44 QUADRO 8 - Busca por outras aulas na função de avaliação...45
5 QUADRO 9 - Resultados da nova função de avaliação...46 QUADRO 10 - Verificação de igualdade entre a população...47 QUADRO 11 - Reinicialização da população...47 QUADRO 12 - Resultados do monitoramento...48 QUADRO 13 - Resultados do ajuste de gerações...49 QUADRO 14 - Resultados finais...49
6 LISTA DE ABREVIATURAS E SIGLAS AG FA IA IAC IAE IAH IAS ID SGBD TCC UNIPLAC - Algoritmos Genéticos - Função de Avaliação - Inteligência Artificial - Inteligência Artificial Conexionista - Inteligência Artificial Evolucionária - Inteligência Artificial Híbrida - Inteligência Artificial Simbólica - Número de Identificação - Sistema Gerenciador de Banco de Dados - Trabalho de Conclusão de Curso - Universidade do Planalto Catarinense
7 RESUMO Este trabalho aborda o problema de geração de quadros de horários para instituições de ensino, com um maior foco em universidades. Seu objetivo é criar um sistema computacional para a geração automática dos referidos quadros. Ele se baseia em uma série de seis trabalhos de conclusão de curso realizados com o mesmo objetivo, tendo, portanto, uma base sólida para se fundamentar, tornando desnecessária uma pesquisa teórica exaustiva sobre o assunto, pois tais trabalhos já definiram a técnica de algoritmos genéticos como sendo a mais indicada para o trabalho e resultaram em um sistema funcional. Este trabalho visa reutilizar o algoritmo genético criado nos referidos trabalhos, realizando modificações incrementais em sua modelagem. O algoritmo utilizado para tal foi o de Burigo (2009), que pode ser considerado o mais recente da série. Embora a modelagem tenha apenas mudanças incrementais, o algoritmo foi completamente reimplementado, utilizando a linguagem C++ e visando manutenibilidade e portabilidade. Também se separou a interface gráfica da parte computacional do sistema, tornando possível sua migração para um ambiente web. Foram feitas várias mudanças na modelagem do algoritmo genético, mas apenas uma teve grande impacto na taxa de sucessos: a técnica denominada monitoramento, que consiste em monitorar a evolução dos resultados, reiniciando parte dos cromossomos caso se identifique que houve estagnação na população. O algoritmo genético resultante possui uma taxa de sucessos muito superior ao algoritmo genético utilizado como base, tendo encontrado resultados satisfatórios em todos os restos realizados. Porém, ele tem seu tempo de execução aumentando em uma progressão geométrica em relação ao número de cursos, o que pode causar grandes tempos de execução para gerar a grade de vários cursos simultaneamente, mas, como seu desempenho em relação à acertos é satisfatório, o tempo de execução não é um problema tão grave. Palavras-chave: Inteligência Artificial; Algoritmos Genéticos; Quadros de Horários; Timetabling
8 ABSTRACT This paper addresses the problem of timetables elaboration for education institutions, with a bigger emphasis on universities. Its goal is to create a computational system for the generation of those timetables. Its based on a series of six papers which have the same goal, and therefore having a solid base to substantiate, avoiding the need for an exhaustive theoretical research on the subject, because said papers have already determined the genetic algorithms technique as being the most appropriated for this job, and already have a working algorithm. This paper aims to reuse the genetic algorithm created on said papers, making incremental changes on its modeling. The algorithm used for this was Burigo's (2009), which can be considered the most recent of the series. Although the modeling has only incremental changes, the algorithm was reimplemented as a whole, using the C++ language and aiming for good maintainability and portability. The graphical interface was also separated from the computational side of the system, making possible its migration to a web environment. Many changes were made to the genetic algorithm s modeling, but only one of them had big impact on the success rate: the technique called monitoring, which is based on monitoring the evolution of the results, restarting part of the chromosomes if it's been identified that the population have stagnated. The resulting algorithm has a success rate much greater than the algorithm used as base, having resulted in satisfactory results on all tests done, but its runtime increases in a geometric progression over the amount of classes, what may cause in big runtimes in generating many courses simultaneously, but, since its success rate is satisfactory, its runtime is not such a big problem. Keywords: Aritificial Intelligence; Genetic Algorithms; Timetabling
9 SUMÁRIO 1 INTRODUÇÃO Apresentação Descrição do problema Justificativa Objetivo geral Objetivos específicos Metodologia INTELIGÊNCIA ARTIFICIAL E ALGORITMOS GENÉTICOS Inteligência Artificial Algoritmos Genéticos Timetabling Trabalhos anteriores O trabalho de Burigo (2009) Conclusão MODELAGEM DO ALGORITMO GENÉTICO Cromossomo O cromossomo de Burigo (2009) Cromossomo proposto Função de avaliação A função de avaliação de Burigo (2009) Função de avaliação proposta Seleção O método de seleção de Burigo (2009) Método de seleção proposto Cruzamento O método de cruzamento de Burigo (2009) Método de cruzamento proposto Mutação O método de mutação de Burigo (2009) Método de mutação proposto Conclusão IMPLEMENTAÇÃO...38
10 4.1 Ferramentas Reimplementação Reformulação no Algoritmo Genético Roleta Ponderada Alteração da mutação Alteração da inicialização Função de avaliação Monitoramento Quantidade máxima de gerações Resultados finais Interfaces web Cadastros Relatórios Conclusão CONSIDERAÇÕES FINAIS...58 REFERÊNCIAS BIBLIOGRÁFICAS...60 APÊNDICES...62
11 11 1 INTRODUÇÃO 1.1 Apresentação Um quadro de horários é o conjunto de horários de várias pessoas em uma instituição. Ele tem vários usos diferentes, como plantões médicos, horários de aula em instituições de ensino etc. O timetabling é o processo de criação de um quadro de horários, seja automática ou manualmente, e é um processo trabalhoso cuja complexidade depende do número de fatores a serem considerados. Falando especificamente de instituições de ensino, esse é um grande problema, tendo em vista que sua criação envolve muitos fatores diferenciados, como professores, disciplinas e cursos diferentes. Visando facilitar essa tarefa, o timetabling pode ser realizado com a ajuda de softwares especializados, os quais geralmente usam uma ou mais técnicas diferentes de Inteligência Artificial (IA). A IA é um ramo da ciência da computação que possui várias definições diferentes, sendo que nenhuma delas pode ser considerada errada. Russel e Norvig (1995) criaram quatro classificações diferentes para sistemas de IA: Sistemas que pensam como humanos, sistemas que pensam racionalmente, sistemas que agem como humanos e sistemas que agem racionalmente. A IA é um ramo muito amplo e complexo. É uma área que costuma ir além da computação, pois foi construída a partir de ideias filosóficas, científicas e tecnológicas herdadas de outras ciências, algumas tão antigas quanto a lógica (BITTENCOURT, p. 17, 2001). Sendo uma área tão ampla, é natural que existam
12 12 várias formas diferentes de IA, ou várias técnicas diferentes, cada uma com suas vantagens e desvantagens, como, por exemplo, Redes Neurais, Sistemas Especialistas e Algoritmos Genéticos (AG). Uma dessas técnicas, os Algoritmos Genéticos, não tem como objetivo encontrar resultados perfeitos, mas sim criar um conjunto de resultados, selecionar os melhores e usá-los para gerar resultados, e assim sucessivamente, até se ter um resultado satisfatório, não necessariamente perfeito. Segundo Bittencourt (p. 317, 2001), os AG foram criados tendo em mente modelos de aprendizado automático, ou seja, a máquina vai aprendendo, tendo resultados cada vez melhores. É uma técnica baseada na biologia e envolve alguns de seus conceitos, como evolução, seleção natural e mutação. Alguns trabalhos realizados anteriormente (PEREIRA, 2001; MELO, 2003; LENZI, 2004; OLIVEIRA, 2004; BORGES, 2007; BURIGO, 2009) tentaram solucionar o problema de timetabling usando AG e alcançaram bons resultados, o que mostra que o uso dessa técnica foi uma boa escolha. Porém, ainda existem alguns problemas, como uma baixa taxa de sucesso, algumas limitações e uma interface gráfica com poucos recursos, que são tratados neste trabalho. Este trabalho está divido em cinco capítulos. No primeiro tem-se uma breve explicação sobre IA e AG e apresenta-se a definição do problema, objetivos e metodologia utilizada. No segundo capítulo, tem-se uma descrição mais detalhada sobre IA, AG e o problema da geração de quadros de horários. No terceiro capítulo, descreve-se a modelagem do sistema. Para o quarto capítulo fica a apresentação do sistema implementado e de seus resultados. Por fim, no capítulo cinco estão as considerações finais do presente trabalho. 1.2 Descrição do problema A geração computacional de quadros de horários (timetabling) é um problema possível de resolver, porém possui uma alta complexidade matemática com
13 13 crescimento exponencial a cada nova variável introduzida, tornando difícil sua solução. Os softwares apresentados em trabalhos anteriormente desenvolvidos na Universidade do Planalto Catarinense (UNIPLAC) resolvem uma parte deste problema, porém apresentam algumas limitações, tais como: possuir uma baixa taxa de sucesso, aceitar apenas matérias com número par de créditos e possuir uma interface gráfica bastante limitada, entre outras. 1.3 Justificativa A criação de quadros de horários não é uma tarefa trivial. Realizá-la manualmente é algo complicado, trabalhoso e demorado. A existência de muitas variáveis neste problema, faz com que, se feito de forma manual, torne-se também não confiável e com uma demanda de pessoal muito grande para um único trabalho (BURIGO, 2009, p. 16). Na UNIPLAC, através de trabalhos realizados por Pereira (2001), Melo (2003), Lenzi (2004) e Oliveira (2004), foi desenvolvido um software capaz de realizar essa tarefa de forma satisfatória, em poucos minutos, mas apenas para um curso. Posteriormente, com os trabalhos desenvolvidos por Borges (2007) e Burigo (2009), o software tornou-se capaz de realizar esse trabalho com vários cursos, mas ele possui uma baixa taxa de sucesso, tendo que ser executado várias vezes para que tenha um resultado satisfatório. Além disso, ele não foi testado com mais de três cursos, o que é um número bem abaixo do ideal para que o programa seja realmente usado pela universidade para gerar seus horários. Com os trabalhos anteriores, foi possível obter um bom resultado, porém seu uso é limitado e, assim, um novo programa se mostra necessário, não para corrigi-los, mas sim para melhorá-los. Percebeu-se que o uso de AG para resolver esse problema foi uma boa escolha, levando em conta os bons resultados obtidos, portanto, esta técnica continua sendo usada no presente trabalho. Considerando a evolução obtida com os trabalhos anteriores, se faz
14 14 necessária a alteração dos AG utilizados neles, para torná-los mais amplos, melhorando sua taxa de sucesso, fazendo com que sua execução seja mais rápida, aceitando um número maior de cursos e tornando-se mais adequado para o uso em instituições de ensino reais. 1.4 Objetivo geral Reimplementar o AG do trabalho de Burigo (2009), visando melhorias na taxa de sucessos, performance, e interface gráfica. 1.5 Objetivos específicos Este trabalho tem como objetivos específicos: a) Reestruturar o AG apresentado em Burigo (2009) para que o mesmo tenha uma maior taxa de sucesso; b) Reimplementar o Algoritmo Genético de Burigo (2009) utilizando a linguagem C++ para que tenha um melhor desempenho; c) Elaborar uma interface web para o sistema; 1.6 Metodologia Inicialmente, foi realizado um estudo teórico sobre IA, AG e timetabling, seguidos de um estudo sobre os trabalhos anteriores, para que se pudesse ter o conhecimento teórico necessário para escrever o capítulo 2 e desenvolver o restante do trabalho. Em seguida, foi feita a modelagem do novo AG, tendo os anteriores como base e referência, seguida da redação do capítulo 3. Após isso, foi realizada a implementação do sistema utilizando C++ para o AG e HTML, CSS e PHP para o ambiente, seguidos de vários testes no AG para visualizar seus resultados e vários
15 15 ajustes nos parâmetros para descobrir quais resultam em melhores grades e terminam o processo em menos tempo. Após ter os resultados em mãos, foi feita a redação do capítulo 4. Por fim, foram elaborados o artigo e as considerações finais sobre o Trabalho de Conclusão de Curso (TCC), para que o mesmo fosse apresentado na banca final dos trabalhos de conclusão de curso.
16 16 2 INTELIGÊNCIA ARTIFICIAL E ALGORITMOS GENÉTICOS Neste capítulo são tratados os conceitos teóricos necessários para o desenvolvimento do trabalho. Inicialmente, tem-se uma introdução à Inteligência Artificial (IA), seguido de conceitos sobre Algoritmos Genéticos (AG). Também são apresentados alguns conceitos sobre timetabling e, por último, um sumário sobre os trabalhos desenvolvidos por Pereira (2001), Melo (2003), Lenzi (2004), Oliveira (2004), Borges (2007) e Burigo (2009), para poder reaproveitar os estudos realizados neles. 2.1 Inteligência Artificial A Inteligência Artificial (IA) é um ramo da ciência da computação que não possui uma definição formal, pois cada autor define-a de forma diferente. De acordo com Bittencourt (2001, p. 20) "o objetivo principal da IA é simultaneamente teórico a criação de teorias e modelos para a capacidade cognitiva e prático a implementação de sistemas computacionais baseados nesses modelos". Segundo Russel e Norvig (1995), o primeiro trabalho que é reconhecido como sendo sobre IA data de 1943, feito por Warren McCulloch e Walter Pitts. Eles propuseram um modelo de neurônios artificiais em que o neurônio estaria em um de dois estados (ligado e desligado), e que a mudança para ligado aconteceria através do estímulo de neurônios adjacentes. Eles mostraram que esse modelo poderia computar qualquer função computável e sugeriram que seria possível fazer com que computadores aprendessem, utilizando essa técnica. O nome Inteligência Artificial só passou a ser usado a partir de John
17 17 McCarthy, Marvin Minsky, Nathaniel Rochester e Claude Shannon realizaram, no Dartmouth College, NH, USA, uma conferência com duração de 2 meses, com um total de 10 participantes, sobre o assunto. Foi nessa conferência que todos os presentes concordaram em chamar esse campo de Inteligência Artificial, nome proposto por McCarthy (RUSSEL e NORVIG, 1995, p. 17). A IA serve para resolver muitos tipos de problemas. Como disse Barreto (2001, p. 14), "O conceito varia com o tempo e com o contexto". Pode-se citar como exemplo aplicações que vão de processamento de linguagem natural (simples para humanos, complexo para computadores) até a demonstração de teoremas (trabalhoso para humanos, simples para computadores), passando por robótica, diagnóstico, monitoramento e até mesmo o ensino (de pessoas pela máquina). Conforme dito anteriormente, a IA é um ramo muito amplo. Portanto, é natural que existam ramificações, que são chamadas de Paradigmas ou Abordagens. Segundo Barreto (2001, p. 22), os principais são: Inteligência Artificial Simbólica (IAS), Inteligência Artificial Conexionista (IAC), Inteligência Artificial Evolucionária (IAE) e Inteligência Artificial Híbrida (IAH). A IAS baseia-se no modo humano de resolver problemas. Assume-se que o problema a ser resolvido e a maneira de resolvê-lo sejam bem conhecidos. Ou seja, é usada quando se sabe exatamente como se deve proceder para chegar à solução, sendo que esta "deve ser obtida manipulando conhecimentos básicos e imitando, até certo ponto, o modo de raciocínio usado por humanos na solução do problema" (BARRETO, 2001, p. 22). Como exemplo de aplicações, pode-se citar sistemas de diagnóstico de doenças. A IAC baseia-se na estrutura e funcionamento do cérebro humano. Segundo Bittencourt (2001), nasceu praticamente junto com a IAS, porém, na época as técnicas simbólicas foram preferidas por vários motivos, entre eles, a falta de capacidade de processamento dos computadores, para suportar as, relativamente, mais complexas técnicas conexionistas. "Pode-se dizer que se espera da IAC um desempenho melhor que a da IAS em problemas mal definidos, onde falta o conhecimento explícito de como realizar uma tarefa" (BARRETO, 2001, p. 23). Como exemplo de aplicações,
18 18 pode-se citar sistemas para reconhecimento de padrões, como letras e assinaturas. A IAE baseia-se na evolução biológica. Suas idéias básicas, segundo Bittencourt (2001), consistem em três itens: a criação de um conjunto de possíveis soluções (chamado de população), possivelmente aleatório; uma entidade que possa medir o desempenho de cada solução (em outras palavras, dar uma nota para a solução); e, por último, uma série de operadores (baseados na evolução natural) que, aplicados nas soluções existentes, gerem novas soluções, que, em casos positivos, cheguem mais perto de uma solução perfeita (em outras palavras, têm uma nota maior). A IAH não chega a ser um paradigma diferente. Ela se baseia na ideia de utilizar mais de um tipo de abordagem para resolver um único problema, visando aproveitar os pontos fortes de cada técnica e minimizar os pontos fracos, utilizando outras técnicas em seu lugar. 2.2 Algoritmos Genéticos Os Algoritmos Genéticos (AG) são uma técnica da Inteligência Artificial Evolucionária (IAE). Segundo Barreto (2001), são uma técnica de aprendizado para a máquina que tem inspiração na evolução da Natureza, mais especificamente em um de seus mecanismos básicos, a chamada seleção dura, e são geralmente utilizados em problemas de busca e de otimização. Segundo Bittencourt (2001, p. 317), quando foram criados, os AG eram fortemente associados à aprendizagem automática, com uma grande ênfase sendo dada a sistemas classificadores. Foi somente após a publicação do livro Genetic Algorithms in search, optimization, and machine learning, de David Goldberg, em 1989, que os AGs passaram a ser associados também com otimização. Os AGs são implementados através de uma população de indivíduos, sendo que cada indivíduo representa uma solução do problema. Geralmente, a população inicial é feita através de números aleatórios. Através de uma função chamada função de avaliação, cada indivíduo recebe um grau de aptidão, também conhecido como
19 19 fitness, que mede o quão boa é aquela solução. Alguns indivíduos são selecionados para formarem os indivíduos de uma nova geração, através da recombinação ou cruzamento (em que são misturadas características de dois diferentes indivíduos) e da mutação (em que algumas características são alteradas ao acaso), com o objetivo de se ter uma população diversa, porém, a cada geração, mais perto de uma solução perfeita. Esse processo é repetido para cada geração, até se ter um resultado que seja considerado satisfatório o bastante. Conforme Barreto (2001, p. 194), As aplicações dos AGs são inúmeras, todas relacionadas de uma forma ou de outra a uma otimização multidimensional em que se procura obter uma solução global. AGs podem ser utilizados em sistemas em que não se conhece o modelo matemático do problema, pois precisam apenas de uma função para gerar a população inicial e de uma função para calcular a aptidão de cada indivíduo. Goldberg (1989) cita várias aplicações diferentes de AGs, que passam por vários campos, como Biologia (Simulação da evolução de populações de organimos unicelulares), Ciência da Computação (Identificação de automação probabilística, busca por função de avaliação de jogos), Engenharia (Design de configuração de teclado), Processamento de Imagens (Registro de imagens para minimizar diferenças), e até mesmo para otimizar os próprios Algoritmos Genéticos (Investigação de seleção e dominância em AGs). 2.3 Timetabling É normal, em vários tipos de instituição, a necessidade de se controlar o tempo de presença de seus funcionários, para que eles estejam no lugar certo na hora certa. Por exemplo, em instituições médicas, é necessário controlar os plantões de cada médico, para garantir que sempre haja algum de plantão e todos cumpram suas horas no final de mês. Em indústrias, os funcionários (e as máquinas) devem trabalhar no mesmo horário, para que seja possível coordenar os seus esforços. Em instituições de ensino, que são o foco desse trabalho, cada turma deve ter um certo tempo de aula, de
20 20 certas matérias por semana e os professores também têm um certo número de horas de trabalho por semana. Para fazer esse gerenciamento de tempo, geralmente são utilizadas grades de horário que, em inglês, são conhecidas como timetables, ou tabelas de tempo. O processo de criação dessas grades é conhecido, novamente em inglês, como timetabling. Para uma definição mais exata, pode-se citar Abramson e Abela (1992), que dizem que o timetabling, voltado para instituições de ensino, envolve o agendamento de aulas, professores e salas em um número fixo de períodos, de maneira que nenhum professor, aula ou sala seja usado mais do que uma vez por período. Quando esse processo é realizado manualmente, ele costuma ser trabalhoso e demandar muito tempo, pois, sendo uma tarefa que envolve muitas variáveis, sua resolução costuma ser através do método de tentativa-e-erro. Devido a isso, na prática, geralmente é utilizado algum tipo de software para o timetabling. Esses softwares costumam usar diferentes técnicas, e, segundo Braz Junior (2000, p. 16), Métodos heurísticos podem produzir bom horários, mas o tamanho e complexidade das universidades atuais têm provocado uma tendência para algoritmos mais gerais, como simulated annealing, algoritmos evolucionários, tabusearch, teoria de grafos e programação linear. Entre esses, estão os algoritmos evolucionários que recebem foco nesse trabalho, mais especificamente a técnica de Algoritmos Genéticos. Essa escolha foi feita pela capacidade que essa técnica possui de resolver problemas complexos e ser um método formal de resolução de forma rápida, tornando-a ideal para o desenvolvimento do algoritmo. 2.4 Trabalhos anteriores Este trabalho pode ser considerado o sétimo de uma série que foi iniciada com Pereira (2001) e foi seguido por Melo (2003), Oliveira (2004), Lenzi (2004), Borges (2007) e Burigo (2009). Como cada um deles usou os anteriores como base, pode-se dizer que este último foi construído sobre os demais, sendo a sua análise,
21 21 portanto, o foco desta seção. Em Pereira (2001), o autor concluiu que os AGs são a técnica mais adequada para resolver esse problema. Ele comenta que a técnica obteve um bom desempenho, porém, devido à aleatoriedade inerente aos AGs, nem sempre se gerava um resultado sem problemas, ocorrendo muitos choques de horário. Ele estimou que sua função de avaliação não era a ideal, sendo o principal responsável por esse problema. Em Melo (2003), o autor teve como meta principal resolver o problema de choques de horários que ocorria no trabalho anterior. Ele tornou a função de avaliação mais refinada e conseguiu gerar resultados ótimos em 100% das vezes. Porém, o tempo de resposta do sistema ainda não estava satisfatório. O objetivo de Oliveira (2004) era diminuir o tempo de resposta do sistema, através de melhorias na função de avaliação e cruzamento. No final do trabalho, o autor conclui que atingiu seu objetivo (de diminuir o tempo de resposta), porém voltou a apresentar a existência de choques de horário. O sistema desenvolvido ainda é um protótipo, não considerando todas as restrições desejáveis para a resolução do problema da grade horária. (OLIVEIRA, 2004). O trabalho de Lenzi (2004) consistiu em melhorar o desempenho do sistema, através de algumas mudanças conceituais, aplicando nele algumas otimizações que acabaram tornando o algoritmo menos genérico e muito mais rápido, montando em 30 segundos uma grade que o trabalho anterior demorava 20 minutos. Borges (2007) tinha três objetivos: diminuir o tempo de resposta; tornar o sistema capaz de elaborar o horário de mais de um curso; e incorporar a ele o agendamento não só de recursos, mas também de horários. Os dois primeiros foram executados com sucesso, embora o tempo de resposta ainda não estivesse em um nível ideal para ser usado em casos reais, além de o agendamento de recursos não ter sido implementado. O trabalho de Burigo (2009) baseou-se em realizar uma grande quantidade de testes no algoritmo de Borges (2007) para descobrir quais partes do algoritmos levavam mais tempo para serem executados. Ele focou mais na melhoria destas partes, conseguindo, assim, mais uma grande melhora no tempo de resposta, embora o AG
22 22 resultante ainda tenha uma taxa de sucessos baixa, quando trabalha com vários cursos. Como ele é o último da série, seu trabalho foi estudado para o desenvolvimento deste O trabalho de Burigo (2009) Primeiramente, Burigo (2009) realizou uma série de testes no sistema com um curso, para descobrir o número máximo ideal de gerações, pois no sistema de Borges (2007), a taxa de sucessos era muito baixa. Aumentando o máximo de gerações, foi possível aumentar essa taxa, mas apenas até um certo ponto: acima de trinta mil gerações a taxa de sucesso permaneceu a mesma. Porém, logo depois, foram realizados testes com dois cursos e foi necessário aumentar o número máximo de gerações para para conseguir resultados ainda com uma taxa de sucessos baixa (apenas 30%). Para os testes com três cursos, o número foi aumentado até cento e dez mil gerações, porém apenas um resultado perfeito foi encontrado durante o teste (com noventa mil gerações). Com isto, Burigo (2009) concluiu que "existe uma instabilidade muito grande para a criação de um horário perfeito, pois mesmo que utilizando um número de gerações bem superior ao necessário, não existe uma porcentagem de sucesso considerável". Depois disso, Burigo (2009) realizou uma análise dos cromossomos gerados em uma execução com dois cursos, para entender o porquê dessa baixa taxa de sucessos. Ele percebeu que, após algumas gerações, os cromossomos tendem a ficar muito parecidos, um fenômeno chamado de convergência precoce, o que é prejudicial ao algoritmo, pois o resultado dos AGs dependem muito da diversidade entre os cromossomos, também chamada de diversidade genética. Depois disso, Burigo (2009) realizou vários testes com o intuito de descobrir os valores ideais para os parâmetros básicos de AGs: taxa de mutação, taxa de cruzamento e número de cromossomos por população. Para a taxa de mutação, Burigo (2009) realizou 9 testes, sendo que cada teste tinha de 1 a 3 cursos, com uma taxa de mutação de 10%, 15% ou 20%. Com um ou três cursos não se notou nenhuma diferença, porém com dois cursos, houve uma grande variação, pois no primeiro teste a taxa de sucessos foi de 10%, no segundo
23 23 subiu para 40%, mas no terceiro regrediu para 20%. Burigo (2009) concluiu que a taxa de mutação, embora importante, não era um fator decisivo para o sucesso do algoritmo. Para a taxa de cruzamento, Burigo (2009) realizou novamente 9 testes, sendo que cada teste tinha de 1 a 3 cursos, com uma taxa de cruzamento de 60%, 70% ou 80%. Porém, nos resultados obtidos, não se percebeu nenhuma grande variação na taxa de sucessos, em relação à taxa de cruzamento original. Para o número de cromossomos, Burigo (2009) realizou novamente 9 testes, sendo que cada teste tinha de 1 a 3 cursos, com uma população consistente de 20, 30 ou 40 cromossomos. Nesse teste, Burigo desconsiderou o tempo de execução, pois seu objetivo era aumentar a taxa de sucessos. Novamente, não se percebeu nenhuma grande variação na taxa de sucessos, então não foi possível decidir qual seria o número ideal de cromossomos. Após os testes iniciais, Burigo (2009) iniciou uma análise do algoritmo. Como o algoritmo era claramente dividido em vários procedimentos, ele criou uma fórmula matemática para cada um, que estimava o número de instruções executadas, para descobrir onde era gasto o maior tempo de processamento. Ele percebeu que o cálculo das disponibilidades de professores era responsável por mais de 90% das instruções executadas e, portanto, foi selecionado para reestruturação. Para realizar esse cálculo, Borges (2007) utilizava uma matriz de disponibilidades, que continha em cada linha um professor e um horário de aula. Existiam repetidas linhas para cada professor e o algoritmo percorria várias vezes esse vetor, procurando registros com o professor e o horário de aula desejados. Burigo (2009) alterou essa matriz para que cada linha contivesse um professor e todas suas disponibilidades, eliminando a necessidade de percorrer o vetor, procurando uma linha que contivesse o professor e horário desejados. Com a fórmula matemática criada para o novo procedimento, foi possível perceber que, para um curso, o novo método para verificação de disponibilidade executa apenas 17,32% do número de instruções do antigo, valor que diminiu para 9,16% com dois cursos, e 7,4% com três cursos. Com essa reestruturação, o algoritmo tornou-se muito mais rápido, mas não
24 24 teve qualquer efeito sobre sua taxa de sucesso. Para melhorar isso, Burigo (2009) decidiu alterar o procedimento de seleção. O algoritmo de Borges (2007) utilizava a técnica de roleta simples, em que a chance que cada cromossomo tem de ser selecionado é diretamente proporcional à sua aptidão. O problema dessa técnica é que, quando existem cromossomos com aptidão muito acima de outros, suas chances de serem selecionados são muito grandes, o que acaba acarretando em múltiplas seleções, e, consequentemente, cromossomos iguais e baixa diversidade genética. Para resolver isso, Burigo (2009) utilizou a técnica de roleta ponderada, em que o dobro de aptidão não significa o dobro de chances, apenas uma chance maior. Com isso, a diversidade aumenta, diminuindo o risco de convergência precoce. Para testar suas reformulações, Burigo (2009) realizou novamente os testes realizados com o algoritmo de Borges (2007) e notou que, embora a taxa de sucessos tenha melhorado, não foi uma mudança considerável. Porém, o tempo de execução teve uma grande melhora, especialmente em testes com 3 cursos, em que o tempo caiu de um pico de 4 minutos para apenas 11 segundos. 2.5 Conclusão Neste capítulo foram apresentados conceitos básicos de IA e AG. O estudo de tais conceitos resultou em conhecimentos que se fazem necessários para o desenvolvimento dos próximos capítulos, que apresentam as alterações realizadas no AG e seus resultados. Também foi apresentado um breve resumo sobre cada um dos trabalhos anteriores e um estudo mais detalhado sobre o de Burigo (2009), o mais recente, sobre o qual este foi desenvolvido. Foi visto que o AG resultante desse trabalho conseguiu se tornar muito mais rápido, em relação ao anterior (BORGES, 2007), mas não houve melhorias significativas na taxa de sucessos, que é o maior fator que impossibilita seu uso em casos reais.
25 25 3 MODELAGEM DO ALGORITMO GENÉTICO Neste capítulo é apresentado o Algoritmo Genético (AG) proposto, ressaltando o que se manteve da mesma forma como desenvolvido em Burigo (2009) e o que foi mudado para este trabalho, bem como conceitos sobre as etapas que o compõem. 3.1 Cromossomo O cromossomo é a base de um AG, pois cada cromossomo representa uma possível solução para o problema a ser resolvido. Um cromossomo é composto por vários genes, normalmente organizados em um vetor, sendo que cada gene (um número ou um caracter) representa uma característica da solução O cromossomo de Burigo (2009) O cromossomo era composto por 10 genes por turma, sendo que cada gene representava duas aulas ou um horário de aula. Assim sendo, eram quatro aulas por dia (agrupadas de duas em duas) e cinco dias diferentes (segunda a sexta), para cada turma. Ele era implementado como um vetor de números inteiros. Cada disciplina recebia um número de identificação (ID) por horário de aula, e cada gene, ou melhor, cada posição do vetor recebia apenas um ID, ao invés de todos os dados, e o utilizava para descobrir as informações que precisa. Essa medida visa reduzir o tempo de processamento, pois é muito mais eficiente trabalhar com um
26 26 simples número, ao invés de todas as informações disponíveis sobre a disciplina. Isso é melhor explicado na Figura 1. É interessante notar que os genes só podem receber valores de sua turma, ou seja, um gene pertencente à primeira turma do primeiro curso jamais recebe um ID de uma aula de outra turma de seu curso, ou mesmo a primeira turma de outro curso. FIGURA 1 - Cromossomo do AG de BURIGO (2009) Cromossomo proposto O cromossomo tem sua estrutura básica semelhante à do anterior, mas não é totalmente igual: para poder trabalhar com aulas em sábados e intensivos, foram acrescidos mais três genes para cada turma. Os dois primeiros genes extras são para aulas nos sábados e o terceiro para intensivos. Para turmas que não possuem aulas nesses horários especiais, é colocado zero, o que significa que não há aulas ali. Quando isso acontece, a numeração dos ID pula alguns valores, para que eles sejam consistentes com suas posições no vetor, conforme exemplificado na Figura 2, em que a primeira turma não possui aulas nos sábados nem intensivos e a segunda turma possui aulas nos sábados, mas não possui intensivos. Percebe-se que os ID onze, doze e treze não são usados, pois representam aulas que não existem. Por esse motivo, os ID da segunda turma ficam na faixa de quatorze a vinte e cinco, também ignorando o ID vinte e seis.
27 27 FIGURA 2 - Cromossomo do AG deste trabalho 3.2 Função de avaliação Cada cromossomo possui um grau de aptidão que especifica o quão perto de uma solução ele está e é utilizado para selecionar os cromossomos que são levados adiante, para a próxima geração. A Função de Avaliação (FA) é a responsável por especificar esse grau, geralmente através de um número A função de avaliação de Burigo (2009) A FA anterior atribuía inicialmente a cada cromossomo uma aptidão de 500. Depois disso, ela realizava verificações de violações de regra em sequência, uma regra por vez, com um total de três regras, retirando pontos para cada violação encontrada. Primeiramente, a FA verificava se havia aulas em que o professor não se encontrava disponível para o dia. Ela percorria todo o vetor e, para cada posição dele, verificava em uma tabela de disponibilidades se o professor daquela aula estava disponível para aquele horário. Para cada professor indisponível, eram retirados cinco pontos do cromossomo. Na Figura 3 tem-se um exemplo desse processo, utilizando um cromossomo com duas turmas que mostra o ID do professor em cada gene, juntamente com a tabela de disponibilidades. Para os casos em que o professor não está disponível, o gene está marcado em vermelho. Nesse exemplo ocorrem cinco indisponibilidades, nas posições 1, 3, 6, 8 e 16 do vetor, fazendo com o que o cromossomo seja penalizado em vinte e cinco pontos.
28 28 FIGURA 3 - Verificação de disponibilidade de professores Após isso, a FA procura por turmas que não possuam todas suas disciplinas. Ela percorre o vetor e marca em um vetor auxiliar as aulas encontradas. Ao final, ela percorre esse segundo vetor, procurando aulas que não houvessem sido marcadas, ou seja, que não estavam presentes no cromossomo. Para cada aula faltante eram descontados cinco pontos. Esse processo é exemplificado na Figura 4, utilizando um cromossomo de duas turmas. Percebe-se que ambos os vetores possuíam o mesmo tamanho. Nesse exemplo, existem quatro ID que não estão no cromossomo (3, 10, 11 e 20), fazendo com que o cromossomo seja penalizado em vinte pontos. FIGURA 4 - Verificação de falta de aulas
29 29 Por último, a FA verifica se há algum professor escalado para ministrar mais de uma aula no mesmo horário. Como o cromossomo possui dez genes para cada turma, presume-se que, ao avançar dez posições no vetor, ter-se-á uma aula para o mesmo horário, mas para outra turma. Com isso em mente, a FA realizava sua checagem avançando de dez em dez posições no vetor e marcando quantas vezes cada professor era encontrado em um vetor auxiliar. Ao final, o AG percorria o segundo vetor e, para cada professor que é encontrado mais de uma vez, penaliza o cromossomo em cinco pontos, conforme exemplificado na Figura 5, que mostra o ID do professor de cada aula. Esse processo é repetido dez vezes, uma vez cada para horário de aula. FIGURA 5 - Verificação de choques de horário Nesse exemplo percebe-se que, embora tenham ocorrido dez repetições de aula, realçados em cor vermelha do lado esquerdo, o cromossomo só é penalizado em quarenta e cinco pontos, pois como ocorreram 3 repetições no mesmo horário, houve apenas uma penalização para esse caso, como demonstra o lado direito da Figura 5.
30 Função de avaliação proposta A FA tem uma modelagem semelhante, mas percebe-se um erro na FA anterior, que é corrigido nesta. É normal ocorrerem aulas repetidas no cromossomo, pois como cada gene representa duas aulas, disciplinas com quatro aulas por semana recebem dois ID, para poderem ser colocados em dois genes. Isso leva a FA anterior a tratar as aulas como matérias diferentes, o que leva a situações em que um cromossomo é penalizado, quando não deveria. Por exemplo, em situações em que as aulas 1 e 2 são de uma mesma disciplina e o cromossomo contém a aula 1 duas vezes, mas nenhuma vez a aula 2, a FA anterior penalizaria por não ter a aula 2, sendo que, na verdade, não deveria, pois a aula 1 repetida pode ser simplesmente trocada pela aula 2. Além disso, como o cromossomo desse trabalho teve sua quantidade de genes por turma aumentado de dez para treze, o primeiro e o último passos são modificados para comportar o novo cromossomo. A primeira verificação tem sua tabela de disponibilidades aumentada com os três novos horários para cada professor e a última verificação avança no vetor em treze genes por vez, e repete o processo inteiro treze vezes, ao invés de apenas dez. 3.3 Seleção Os cromossomos não podem ser selecionados de forma totalmente aleatória, pois para que o AG tenha um bom desempenho é necessário que os melhores cromossomos continuem nas próximas gerações e os piores sejam descartados, tomando cuidado para que sempre haja uma diversidade genética suficiente para que se possa chegar a um resultado ideal. Para que isso ocorra, vários métodos de seleção de cromossomos foram criados, dos quais três são discutidos na sequência.
31 O método de seleção de Burigo (2009) O AG anterior selecionava seis cromossomos por elitismo e, para os demais, utilizava o mecanismo de Roleta Ponderada. O elitismo é simples de se entender: os melhores cromossomos (no caso, os seis melhores) são copiados para a nova geração, sem nenhuma alteração. Para entender o método de Roleta Ponderada, primeiro deve-se entender a Roleta Simples, ilustrada na Figura 6. Imaginando uma roleta, com uma quantidade de números igual à soma do fitness de todos os cromossomos da população atual, cada cromossomo recebe uma quantidade de números igual ao seu fitness, conforme mostrado na Figura 6. Ou seja, a chance que cada cromossomo tem é diretamente proporcional ao seu grau de aptidão. FIGURA 6 - Roleta Simples Esse é um mecanismo simples de ser implementado, porém tem um defeito: em casos em que um cromossomo é muito melhor que os outros, o que é chamado de super-cromossomo, tal cromossomo tem chances muito altas de ser escolhido várias vezes, o que diminui a diversidade genética e aumenta a chance de convergência precoce. Para evitar isso, a quantidade de números recebidos por cada cromossomo não é igual ao seu grau de aptidão. Ao invés disso, cada cromossomo recebe uma quantidade pré-definida de números, sendo que os cromossomos com maior grau de aptidão recebem quantidades maiores. Assim, os cromossomos de maior grau de
32 32 aptidão têm maiores chances de serem selecionados, mas as chances não tem mais relação direta com o tamanho da diferença entre os cromossomos. Essa é a chamada Roleta Ponderada. Porém, Burigo (2009) não utilizou o algoritmo da maneira descrita na literatura. Ao invés disso, ele criou categorias para o fitness dos cromossomos, fazendo com que cromossomos pertencentes à mesma categoria recebessem a mesma quantidade de números para a roleta. Isso fez com que o resultado ficasse abaixo do ideal, pois cromossomos com uma diferença entre seus fitness podem ter a mesma chance de serem selecionados, caso pertençam à mesma categoria, como demonstrado na Figura 7. As categorias criadas por Burigo foram: 0 99 : 3 números : 5 números : 7 números : 11 números : 13 números : 15 números : 18 números FIGURA 7 - Roleta Ponderada de BURIGO (2009)
33 Método de seleção proposto A idéia principal continua a mesma: são selecionados alguns cromossomos por elitismo e o restante através de uma Roleta Ponderada. Porém, após o AG ser reimplementado, testes foram realizados com seus parâmetros para definir quais valores fornecem o melhor resultado. Além disso, o algoritmo para a Roleta Ponderada foi refeito, desta vez com o funcionamento descrito na literatura, demonstrado na Figura 8. FIGURA 8 - Roleta Ponderada clássica 3.4 Cruzamento Para que seja possível obter os melhores resultados, não basta identificar os melhores cromossomos. É necessário misturar suas características, fazendo com que as novas gerações sejam gradativamente melhores que as anteriores. Esse é o objetivo do cruzamento: misturar as características de dois cromossomos para gerar dois filhos com características de ambos. Os cromossomos que sofrem esse processo são os selecionados no passo de seleção O método de cruzamento de Burigo (2009) O AG anterior utilizava um método chamado Máscara Adaptativa para o cruzamento, que é explicado na Figura 9, utilizando um cromossomo com 10 genes, e
34 34 representando os cromossomos originais como verde e azul. Para este método, gera-se um outro vetor aleatoriamente, com o mesmo tamanho de um cromossomo, preenchido totalmente com zeros e uns, o qual é denominado de máscara. Para cada posição do vetor que possui o valor zero, o primeiro filho recebe o valor do cromossomo verde e o segundo filho do cromossomo azul, nas posições correspondentes. Para as posições do vetor que possuam o valor 1, o resultado é o inverso, ou seja, o primeiro filho recebe o valor do cromossomo azul e o segundo filho recebe o valor do cromossomo verde. FIGURA 9 - Máscara Adaptativa Método de cruzamento proposto O processo geral é o mesmo, mas existe um caso que é tratado diferente: quando ambos os cromossomos possuírem um mesmo curso completo, isto é, sem nenhuma penalidade referente àquele curso, todos os genes referentes àquelas turmas são copiados para os filhos, mantendo o curso sem erros. Caso apenas um dos cromossomos possua um curso completo, ele é copiado para ambos os filhos, conforme demonstra a Figura 10. Nota-se que os demais genes são passados normalmente para os filhos, conforme a máscara adaptativa.
35 35 FIGURA 10 - Máscara Adaptativa com cursos sem modificações 3.5 Mutação Na etapa de cruzamento, na qual ocorre a criação dos novos cromossomos, percebe-se que são utilizados apenas os genes de cromossomos pré-existentes, copiando inclusive a posição dos antigos genes. Isso é uma grande limitação, pois o sucesso de um AG depende muito da diversificação. Para contornar tal problema, foi criada a etapa de Mutação, demonstrada na Figura 11, na qual alguns dos valores são alterados aleatoriamente. A maneira clássica de se realizar essa tarefa é definir uma probabilidade de mutação, que foi definido como 15% no exemplo da Figura 11, e, após o passo de cruzamento, gerar um número aleatório para cada cromossomo da nova população, representada na Figura 11 através da coluna Mutação. Se esse número estiver dentro da probabilidade de mutação, para cada cromossomo define-se aleatoriamente um gene para receber um valor, também aleatório. Os genes que sofreram esse processo estão em azul na segunda tabela da Figura 11.
36 36 FIGURA 11 - Processo de Mutação O método de mutação de Burigo (2009) Foram realizados testes utilizando um método diferente para a mutação: ao invés de alterar o valor de um gene por cromossomo, alterou-se um gene por turma. Porém, os resultados mostraram que esse método tinha uma taxa de sucessos inferior e, portanto, foi utilizado o método clássico Método de mutação proposto Não houveram mudanças no passo de mutação.
37 Conclusão Neste capítulo foram apresentadas as etapas que caracterizam o funcionamento de um AG, além de técnicas para implementá-las. Também apresentouse o funcionamento do AG de Burigo (2009) e como ele difere do AG deste trabalho, sendo este capítulo a base para a implementação do mesmo, que é apresentada no capítulo 4.
38 38 4 IMPLEMENTAÇÃO Neste capítulo são apresentados o processo de implementação do sistema e as ferramentas utilizadas, bem como partes do código-fonte, para demonstrar as mudanças realizadas a partir do trabalho de Burigo (2009). 4.1 Ferramentas Este trabalho foi desenvolvido em um ambiente Linux, utilizando o sistema operacional Fedora 13. O editor utilizado foi vim versão 7.2, e o sistema de compilação utilizado foi cmake versão 2.8. Como o cmake gera arquivos adequados ao ambiente utilizado, o programa pode ser compilado em vários sistemas operacionais diferentes, com vários compiladores diferentes. Os testes principais foram realizados com o compilador GCC/G++ versão e o utilitário GNU make versão O sistema foi desenvolvido tendo como principal foco a portabilidade, e, para tal, segue rigorosamente as regras estabelecidas pelo padrão ANSI C++ (também conhecido como C++98) e utiliza, sempre que possível, apenas as bibliotecas padrão da linguagem. A única exceção é a utilização da biblioteca C ibase, para acesso à bancos de dados Firebird e/ou Interbase. 4.2 Reimplementação Os algoritmos dos trabalhos anteriores foram todos implementados em Delphi. Para este trabalho, optou-se por utilizar a linguagem C++. Para tal, todo o
39 39 código teve de ser reescrito. Durante esse processo, foram realizadas algumas pequenas mudanças, em geral pequenas otimizações de código, mas a estrutura geral foi mantida. Isso tornou possível medir com maior precisão o impacto das mudanças realizadas posteriormente, pois, se comparado aos testes realizados por Burigo (2009), vários outros fatores podem interferir no resultado, como as características do computador, a linguagem e o compilador utilizados e o ambiente em que o sistema é executado. Porém, não é possível medir o impacto da mudança de linguagem dessa maneira. Durante o processo de reimplementação, o Algoritmo Genético (AG) permaneceu inalterado, devido aos motivos explicados acima, mas o sistema sofreu algumas mudanças, não apenas de implementação, mas também conceituais. A mudança mais notável é que o sistema de cadastros foi separado do AG, tornando-o um aplicativo separado. Além disso, ele foi refeito como um sistema web, utilizando as linguagens HTML e CSS, sendo o HTML gerado por scripts PHP, contendo páginas simples para cadastro de informações e relatórios, sendo que estes últimos não existiam no sistema de Burigo (2009). Os dois sistemas interagem entre si exclusivamente através do banco de dados, sendo, dessa forma, aplicações independentes, podendo ser instalados ou executados em ambientes e horários diferentes. Com essa separação, o AG não possui mais uma interface gráfica, pois assume-se que todos os dados necessários já encontram-se no banco de dados. As únicas informações necessárias são o caminho, usuário e senha para o banco, que são passados através de parâmetros de linha de comando. O Sistema Gerenciador de Banco de Dados (SGDB) utilizado é o mesmo do AG de Burigo, o Firebird, e a estrutura do banco também não foi alterada. Porém, os nomes das tabelas foram alterados, buscando uma maior legibilidade. Entre as mudanças na implementação, a mais importante é que o acesso ao banco de dados foi encapsulado dentro de uma classe só, facilitando uma possível migração para um SGDB diferente. A maneira de armazenar os dados na memória
40 40 também mudou. O AG de Burigo continha objetos que armazenavam vetores de propriedades. Por exemplo, existe um objeto chamado cursos, que contém os vetores CURCOD, CURNOME, CURFASE e CURAULASCONSEC, que contêm, respectivamente, os número de identificação (ID), os nomes, a quantidade de fases e a quantidade de aulas consecutivas de todos os cursos. No AG deste trabalho, existe um vetor chamado cursos, sendo que cada objeto desse vetor contém apenas os dados referentes a um curso. O nome do curso também não é mais utilizado, pois era apenas utilizado para cadastros, que foram removidos. Também foram realizadas várias pequenas otimizações e melhorias para portabilidade, como utilizar apenas um loop (ao invés de três) para a Função de Avaliação (FA); evitar algumas inicializações de variáveis desnecessárias; colocar valores fixos (como taxas de cruzamento e mutação) em variáveis constantes, ao invés de direto no código; e não copiar um cromossomo para a variável de melhor cromossomo caso ambos tenham o mesmo grau de avaliação, entre outros. 4.3 Reformulação no Algoritmo Genético Roleta Ponderada No trabalho de Burigo (2009) é dito que o algoritmo utilizado para realizar a seleção de cromossomos é a roleta ponderada, porém, analisando o código, percebe-se que o algoritmo não foi implementado da maneira descrita na literatura. Para este trabalho, o algoritmo foi refeito de maneira tradicional, como mostrado no Quadro 1. QUADRO 1 - Roleta Ponderada 1 Utils::Sort::quickSort<Cromossomo>(populacao, 0, NUM_CROMOSSOMOS-1); 2 int soma[num_cromossomos]; 3 soma[0] = 1; 4 elitismofa[0] = populacao[0].fa; 5 for(uint i = 1; i < NUM_CROMOSSOMOS; i++) { 6 soma[i] = soma[i - 1] + 1;
41 41 7 } Inicialmente, na linha 2, o vetor é ordenado utilizando o algoritmo Quick Sort, deixando os cromossomos com menor fitness nas primeiras posições de vetor. Depois, cada cromossomo recebe uma quantidade progressiva de números, dando uma quantidade maior às últimas posições, ou seja, os cromossomos de maior fitness. Isso ocorre nas linhas 6 e 7. Para comparar com a roleta de Burigo (2009), foram realizados alguns testes, utilizando 1, 2 e 3 cursos, com 10 genes para cada turma, com 50 execuções para cada combinação. Os resultados estão no Quadro 2. QUADRO 2 Quantidade de Cursos Resultado dos testes com a Roleta Ponderada convencional Resultados anteriores 52% 26% 2% Taxa de acertos Resultado com a Roleta Ponderada convencional 68% 32% 4% Foi registrada a taxa de acertos, ou seja, a porcentagem de vezes em que o algoritmo chegou à um resultado perfeito, com um fitness de 500. Analisando os resultados, percebe-se que não houve grandes diferenças entre o método de Burigo (2009) e a Roleta Ponderada convencional, mas que o segundo resultou em uma taxa de sucessos levemente maior, mesmo que esse valor seja pequeno para ser considerado significativo Alteração da mutação O algoritmo de Burigo (2009) realiza a mutação de maneira simples, alterando aleatoriamente um dos genes de cada cromossomo, dependendo da chance de mutação. Para este trabalho, foi tentado uma abordagem diferente, realizando uma mutação por curso para cada cromossomo, efetivamente aumentado o índice de mutação. O código utilizado está demonstrado no Quadro 3.
42 42 QUADRO 3 - Código de mutação por curso 1 for (int i = 0; i < NUM_CROMOSSOMOS; i++) { 2 for (int j = 0; j < cursoscount; j++) { 3 int chance = rand() % 100; 4 if (chance < TAXA_MUTACAO) { 5 int low = cursos[j].primeiroidaula; 6 int high = cursos[j].ultimoidaula; 7 int idgene = low + (rand() % ((high + 1) - low)); 8 mutargene(&novapopulacao[i], idgene); 9 } 10 } 11 } Durante a leitura inicial de dados é contado o número de cursos existentes, sendo esse valor utilizado na linha 2. Para cada cromossomo, gera-se um número aleatório de 0 a 99. Caso esse valor esteja dentro da taxa de mutação, gera-se um número aleatório que corresponda a uma posição do vetor que esteja entre os genes do curso atual, o que ocorre nas linhas 6 à 8. Somente após isso é alterado o valor do gene. Os resultados desse algoritmo estão no Quadro 4. QUADRO 4 Quantidade de Cursos Resultado dos testes com a mutação por curso Resultados anteriores 68% 32% 4% Taxa de acertos Resultado com a Mutação por curso 68% 0% 0% Conforme pode-se perceber, após iniciar a mutação por curso, a taxa de acertos para 1 curso não foi alterada, como já era de se esperar, mas a taxa de acerto para 2 e 3 cursos sofreu uma queda considerável, fazendo com que o algoritmo não resultasse em nenhum resultado perfeito. Sendo assim, optou-se por reverter o código ao método de mutação utilizado em Burigo (2009) Alteração da inicialização No trabalho de Burigo (2009), dado um certo número de aulas, ou seja, de genes, os cromossomos sempre são inicializados da mesma maneira. Analisando esse algoritmo, percebe-se que, após uma certa quantidade de cromossomos, que é igual a
43 43 quantidade de aulas por cada turma (no caso de Burigo, dez), os cromossomos começam a se repetir. Para aumentar a diversidade genética, o algoritmo foi alterado para funcionar de maneira aleatória. Porém, existem dois requisitos para esse algoritmo: ele não deve gerar turmas com aulas de outras e deve gerar os primeiros cromossomos da mesma maneira. Em outras palavras, deve manter o mesmo algoritmo e gerar aleatoriamente apenas os cromossomos que se repetem com o algoritmo anterior. Esse último requisito serve para tentar evitar os problemas de uma abordagem completamente aleatória. O novo algoritmo é mostrado no Quadro 5. QUADRO 5 - Código de inicialização aleatória 1 for (uint i = 0; i < NUM_HORARIOS; i++) 2 populacao[0].genes[i] = i; 3 for (uint i = 1; i < NUM_HORARIOS; i++) { 4 for (uint k = 0; k < NUM_HORARIOS; k++) { 5 uint idaula = populacao[i-1].genes[k]; 6 if (aulas[idaula].idaula == -1) 7 populacao[i].genes[k] = k; 8 else 9 populacao[i].genes[k] = (populacao[i-1].genes[k] + 1) % NUM_HORARIOS; 10 } 11 } 12 for (uint i = 0; i < NUM_HORARIOS; i++) { 13 for (uint k = NUM_HORARIOS; k < aulascount; k++) { 14 populacao[i].genes[k] = populacao[i].genes[knum_horarios] + NUM_HORARIOS; 15 } 16 } 17 for (uint i = NUM_HORARIOS; i < NUM_CROMOSSOMOS; i++) { 18 for (uint k = 0; k < aulascount; k++) { 19 populacao[i].genes[k] = k - (k % NUM_HORARIOS) + (rand() % NUM_HORARIOS); 20 } 21 } Percebe-se que até a linha 12 o algoritmo tem o mesmo efeito que o de Burigo (2009), ou seja, inicia os cromossomos de maneira a fazer com que seus genes
44 44 sejam sequenciais, mas que os cromossomos sejam diferentes entre si. A única diferença está na linha 10, em que o loop só vai até o ponto em que eles começariam a se repetir. Após isso, o trecho de código disposto nas linhas 13 à 15 se encarrega de iniciar os outros cromossomos de maneira aleatória, tomando cuidando para que os ID não saiam para turmas erradas. Os resultados desse algoritmo estão no Quadro 6. QUADRO 6 Quantidade de Cursos Resultado dos testes com a inicialização aleatória Resultados anteriores 68% 32% 4% Taxa de acertos Resultado com a Inicialização aleatória 70% 35% 9% Assim como a Roleta Ponderada convencional, o método de inicialização aleatória aumentou a taxa de sucesso, porém percebe-se que a mudança foi pequena, sem ser muito significativa e que os números ainda estão muito abaixo do ideal Função de avaliação A função de avaliação (FA) de Burigo (2009), enquanto procura por aulas repetidas, considera apenas o ID das aulas. Ou seja, aulas iguais, mas com IDs diferentes são contados como aulas diferentes, sendo que para o resultado final (a grade de horários), as aulas são essencialmente iguais. Sendo assim, grades que seriam válidas são penalizadas por terem IDs diferentes. No algoritmo deste trabalho, foi acrescentado um vetor à classe Aula chamado outrasaulas, cujos valores representam o ID de outros objetos Aula iguais. Esse vetor é preenchido uma única vez, durante a leitura inicial de dados, conforme demonstrado no Quadro 7. QUADRO 7 - Preenchimento do vetor de outras aulas 1 int aulascount = aulas.size(); 2 for (int i = 0; i < aulascount; i++) { 3 int idoutraaula = 0; 4 for (int j = i - 1; j >= 0; j--) 5 if ((aulas[j].disciplina == aulas[i].disciplina)
45 } && (aulas[j].turma == aulas[j].turma)) { aulas[i].outrasaulas[idoutraaula] = j; idoutraaula++; } else break; for (int j = i + 1; j < aulascount; j++) if ((aulas[j].disciplina == aulas[i].disciplina) && (aulas[j].turma == aulas[j].turma)) { aulas[i].outrasaulas[idoutraaula] = j; idoutraaula++; } else break; for (; idoutraaula < MAX_OUTRAS_AULAS; idoutraaula++) aulas[i].outrasaulas[idoutraaula] = -1; A FA, para procurar por aulas repetidas, faz uma contagem de quantas vezes cada ID é encontrado, e, ao final, para cada ID cuja contagem é 0, contabiliza uma penalização. Antes de contabilizar a penalização, o algoritmo procura, entre as aulas marcadas como sendo iguais, alguma cuja contagem seja maior que 1. Se encontrar, diminui a contagem dessa outra aula em 1 e não contabiliza a penalização. O código foi inserido dentro do passo de busca por aulas repetidas, que é mostrado no quadro 8. O novo código está nas linhas 9 a 21. Os resultados do novo método estão no Quadro QUADRO 8 - Busca por outras aulas na função de avaliação int *count = new int[aulascount]; memset(count, 0, sizeof(int) * aulascount); for (int j = 0; j < aulascount; j++) { int aula = populacao[i].genes[j]; count[aula]++; } for (int j = 0; j < aulascount; j++) { if (count[j] == 0) { bool found = false; for (int x = 0; x < MAX_OUTRAS_AULAS; x++) { int idoutraaula = aulas[j].outrasaulas[x]; if (idoutraaula == -1) break; if (count[idoutraaula] > 1) { count[idoutraaula]--;
46 46 16 count[j] = 1; 17 found = true; 18 break; 19 } 20 } 21 if (!found) { 22 populacao[i].fa -= 5; 23 populacao[i].fa2++; 24 } 25 } 26 } 27 delete [] count; QUADRO 9 Quantidade de Cursos Resultados da nova função de avaliação Taxa de acertos Resultados anteriores 70% 35% 9% Resultados com a nova FA 76% 37% 12% Novamente, os resultados alcançados não resultaram em melhorias significativas. Mesmo assim, como houve melhoras, o novo algoritmo foi mantido Monitoramento Um dos maiores problemas do algoritmo atual é a grande taxa de ocorrência de convergência precoce. Com o intuito de diminuir o impacto desse problema, foi implementado um mecanismo, denominado de Monitoramento, em que a cada 1000 gerações, o algoritmo verifica o estado da população atual e, caso os cromossomos estejam muito semelhantes, a maioria deles são reinicializados aleatoriamente, para aumentar a diversidade genética. A abordagem adotada para a verificação consiste em escolher aleatoriamente 3 cromossomos: um dos melhores (maior FA), um dos piores (menor FA) e um do meio; comparar os genes do melhor cromossomo com os dos outros dois e, caso a taxa de igualdade esteja acima de um valor estipulado (testes iniciais foram realizados com 90%), reiniciar os cromossomos. O código desse algoritmo é mostrado no Quadro 10.
47 QUADRO 10 - Verificação de igualdade entre a população ordenarcromossomos(); int rand1,rand2,rand3; rand1 = rand() % (NUM_CROMOSSOMOS * 2 / 10); /* Entre os primeiros 20% */ rand2 = (NUM_CROMOSSOMOS * 4 / 10) + (rand() % (NUM_CROMOSSOMOS * 2 / 10)); /* Entre 40% e 60% */ rand3 = (NUM_CROMOSSOMOS * 8 / 10) + (rand() % (NUM_CROMOSSOMOS * 2 / 10)); /* Entre os últimos 20% (80% - 100%) */ 6 Cromossomo *c1 = &populacao[rand1]; 7 Cromossomo *c2 = &populacao[rand2]; 8 Cromossomo *c3 = &populacao[rand3]; 9 int count = 0; 10 for (int i = 0; i < aulascount; i++) { 11 if (c1->genes[i] == c2->genes[i]) 12 count++; 13 if (c1->genes[i] == c3->genes[i]) 14 count++; } 15 if (count / 2 >= aulascount * TAXA_MONITORAMENTO_PORCENTAGEM) { 16 reiniciarcromossomos(); } Caso a reinicialização ocorra, nem todos os cromossomos recebem novos valores aleatórios. Os 10 cromossomos com maior fitness se mantêm inalterados. Além disso, se no melhor dos cromossomos houver algum curso que esteja sem penalizações, os genes equivalentes a tal curso também não são alterados. Para verificar a penalização por curso, foi acrescentado um vetor de booleans à classe cromossomo cujo tamanho é igual ao número de cursos. A função de avaliação foi alterada para, quando ocorrer uma penalização, marcar o boolean equivalente ao curso penalizado como verdadeiro, para simbolizar que aquele curso foi penalizado. O código que representa esse processo é mostrado no quadro 11. QUADRO 11 - Reinicialização da população 1 for (int i = TAXA_MONITORAMENTO_MANT; i < NUM_CROMOSSOMOS; i++){ 2 for (uint k = 0; k < aulascount; k++) { 3 populacao[i].genes[k] = k - (k % NUM_HORARIOS) + (rand() % NUM_HORARIOS); } }
48 48 Pode-se notar que o mecanismo de monitoramento não é trivial (em termos de complexidade de tempo) e, dependendo da frequência com que ocorra, é possível que o tempo de execução aumente consideravelmente. Seus resultados são mostrados no Quadro 12. QUADRO 12 - Resultados do monitoramento Quantidade de Cursos Taxa de acertos Resultados anteriores 76% 37% 12% Resultados com o monitoramento 100% 84% 36% Pode-se perceber que o monitoramento teve um aumento considerável na taxa de acertos. Para 1 curso, o monitoramento melhorou os resultados para 100%. Para 2 cursos, o novo resultado é mais que o dobro de anterior. Para 3 cursos, embora ainda esteja abaixo do esperado, a taxa de acertos foi triplicada, provando, assim, a eficácia do monitoramento Quantidade máxima de gerações Conceitualmente, o monitoramento realiza uma reinicialização de parte dos cromossomos gerados. Com isso em vista, percebe-se a possibilidade de realizar ajustes na quantidade máxima de gerações permitidas, pois o monitoramento pode garantir que sempre haverá variedade nos cromossomos. Isso aumenta o tempo de execução do algoritmo, mas caso aumente a taxa de sucessos, é algo aceitável. Foram realizados novos testes aumentado a quantidade máxima de gerações de (valor utilizado para todos os testes anteriores) para Como o algoritmo para ao encontrar um resultado perfeito, não há perca em desempenho, em relação à tempo, caso esse valor seja alto demais. Os resultados desses testes são mostrados no Quadro 13. Como pode-se perceber, uma grande quantidade de gerações é capaz de melhorar ainda mais a eficácia do monitoramento, visto que todas as execuções conseguiram alcançar um resultado perfeito.
49 49 QUADRO 13 - Resultados do ajuste de gerações Quantidade de Cursos Taxa de acertos Resultados anteriores 100% 84% 36% Resultados com o monitoramento 100% 100% 100% Resultados finais Conforme se pode perceber nas seções anteriores, o algoritmo proposto possui uma taxa de sucesso de 100% para todos os bancos de testes utilizados. Porém, algumas alterações possuem um custo em desempenho e, sendo assim, o Quadro 14 demonstra, além da taxa de sucessos, o tempo médio de cada algoritmo e o tempo em pior caso. Esses valores são comparados com os resultados obtidos utilizando o algoritmo de Burigo (2009). QUADRO 14 - Resultados finais Quantidad e de Cursos 1 Taxa de acertos Resultados Resultados iniciais atuais 52% 100% 2 26% 100% 3 2% 100% Tempo no pior caso Tempo médio Resultados Resultados Resultados Resultados iniciais atuais iniciais atuais 7 segundos 7 segundos 4.06 segundos 1.8 segundos (100%) (44,33%) 13 segundos 38 segundos segundos segundos (292,31%) (106,24%) 15 segundos 127 segundos segundos 37.9 segundos (846,66%) (257,12%) Analisando o Quadro 13, percebe-se que, embora o tempo de execução total tenha aumentado, isso não ocorreu na mesma proporção da taxa de sucesso, que teve uma grande melhora. Grande parte dessa melhora ocorreu devido ao monitoramento, que foi a mudança que causou o maior impacto, entre as realizadas. Houve claramente uma grande perda de desempenho, mas grande parte disso é devido ao aumento do número máximo de gerações. Porém, como a taxa de sucesso está em 100%, esse é um resultado aceitável, visto que não é mais preciso executar o sistema várias vezes, bastando apenas uma execução.
50 Interfaces web Nessa nova versão dos sistema, a interação com o usuário é realizada através de uma interface web composta por cadastro e relatórios. Essas telas são apresentadas nesta seção, e foram todas desenvolvidas utilizando as linguagens HTML e CSS, sendo o HTML gerado através de scripts PHP Cadastros Para este sistema, são necessários o cadastro de seis itens: aulas, cursos, disciplinas, disponibilidades, professores e turmas. Cada um possui duas telas no sistema, sendo uma para consulta, contendo todos os itens cadastrados, e outra para inserir novos itens ou editar os já existentes. É interessante notar que é possível cadastrar vários itens com os mesmos campos, o que configura um erro. Porém, o controle de tais erros está fora do escopo desse trabalho, sendo necessário que o próprio usuário evite tais erros Cursos Para cadastrar um curso, são necessários o seu nome e a quantidade de fases. A Figura 12 mostra a tela de consulta, na qual se percebe que os cursos são ordenados por nome. A Figura 13 mostra a tela de cadastro, em que o usuário deve digitar cada um dos campos.
51 51 FIGURA 12 - Consulta de Cursos FIGURA 13 - Cadastro de Cursos Turmas Para cadastrar uma turma, é necessário especificar o curso e a fase. A Figura 14 mostra a tela de consulta, que apresenta os itens ordenados por nome de curso, seguidos por fase. A Figura 15 mostra a tela de cadastro, que possui um menu do tipo drop-down para o curso. FIGURA 14 - Consulta de Turmas
52 52 FIGURA 15 - Cadastro de Turmas Disciplinas Para cadastrar uma disciplina, são necessários o seu nome e a quantidade de créditos. A Figura 16 mostra a tela de consulta, com as disciplinas ordenadas por nome. A Figura 17 mostra a tela de cadastro, na qual o usuário deve digitar cada um dos campos. FIGURA 16 - Consulta de Disciplinas FIGURA 17 - Cadastro de Disciplinas
53 Professores Para cadastrar um professor, é necessário apenas o seu nome. A Figura 18 mostra a tela de consulta, com os itens ordenados pelo único campo existente, o nome. A Figura 19 mostra a tela de cadastro, na qual o usuário deve digitar o nome do professor. FIGURA 18 - Consulta de Professores FIGURA 19 - Cadastro de Professores Disponibilidades Para cadastrar uma disponibilidade, é necessário especificar o professor e o horário de disponibilidade. A Figura 20 mostra a tela de consulta, com as disponibilidades ordenadas por professor, seguidos de horário. A Figura 21 mostra a tela de cadastro, que possui um menu do tipo drop-down para o professor, mas o horário deve ser digitado.
54 54 FIGURA 20 - Consulta de Disponibilidades FIGURA 21 - Cadastro de Disponibilidades Aulas Para cadastrar uma aula, são necessários os seguintes campos: turma, disciplina e professor. A Figura 22 mostra a tela de consulta, com as aulas ordenadas por turma, seguido de disciplina. A Figura 23 mostra a tela de cadastro, que possui um menu do tipo drop-down para cada um dos campos. FIGURA 22 - Consulta de Aulas
55 55 FIGURA 23 - Cadastro de Aulas Relatórios Nos relatórios são apresentados os resultados alcançados pelo sistema. Em uma primeira tela, mostrada na Figura 24, mostra-se a quantidade de erros na grade gerada, se houver, seguidos do nome de todos os cursos cadastrados. Cada nome, quando clicado, leva a uma tela com a grade do curso, mostrada na Figura 25. FIGURA 24 - Tela inicial de relatórios
Inteligência Artificial. Algoritmos Genéticos. Aula I Introdução
Universidade Estadual do Oeste do Paraná Curso de Bacharelado em Ciência da Computação Inteligência Artificial Algoritmos Genéticos Aula I Introdução Roteiro Introdução Computação Evolutiva Algoritmos
ALGORITMO GENÉTICO COMO REPRESENTAÇÃO DAS MUTAÇÕES NA BIOLOGIA
Patrocínio, MG, outubro de 2016 ENCONTRO DE PESQUISA & EXTENSÃO, 3., 2016, Patrocínio. Anais... Patrocínio: IFTM, 2016. ALGORITMO GENÉTICO COMO REPRESENTAÇÃO DAS MUTAÇÕES NA BIOLOGIA Igor Acassio Melo
Pós-Graduação em Engenharia de Automação Industrial SISTEMAS INTELIGENTES PARA AUTOMAÇÃO
Pós-Graduação em Engenharia de Automação Industrial SISTEMAS INTELIGENTES PARA AUTOMAÇÃO AULA 06 Algoritmos Genéticos Sumário Introdução Inteligência Artificial (IA) Algoritmos Genéticos Aplicações de
3. Resolução de problemas por meio de busca
Inteligência Artificial - IBM1024 3. Resolução de problemas por meio de busca Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Resolução de problemas por
Algoritmo Genético. Inteligência Artificial. Professor: Rosalvo Ferreira de Oliveira Neto
Algoritmo Genético Inteligência Artificial Professor: Rosalvo Ferreira de Oliveira Neto Estrutura 1. Introdução 2. Conceitos Básicos 3. Aplicações 4. Algoritmo 5. Exemplo Introdução São técnicas de busca
Algoritmos Genéticos. Princípio de Seleção Natural. Sub-áreas da Computação Evolutiva. Idéias básicas da CE. Computação Evolutiva
Computação Evolutiva Algoritmos Genéticos A computação evolutiva (CE) é uma área da ciência da computação que abrange modelos computacionais inspirados na Teoria da Evolução das Espécies, essencialmente
Sistema para Geração de Escalas de Plantões Médicos
Sistema para Geração de Escalas de Plantões Médicos Anderson Beppler 1, Daiana Petry Leite 2 1 UNIPLAC - Universidade do Planalto Catarinense Curso de Sistemas de Informação Av. Castelo Branco, 170. Bairro
Algoritmos Genéticos. Pontos fracos dos métodos tradicionais. Características de alguns problemas. Tamanho do espaço de busca- Ex. caixeiro viajante:
Algoritmos Genéticos Prof. Luis Otavio Alvares INE/UFSC Características de alguns problemas Tamanho do espaço de busca- Ex. caixeiro viajante: 10 cidades: 181.000 soluções 20 cidades: 10.000.000.000.000
Computação Evolutiva Eduardo do Valle Simões Renato Tinós ICMC - USP
Computação Evolutiva Eduardo do Valle Simões Renato Tinós ICMC - USP 1 Principais Tópicos Introdução Evolução Natural Algoritmos Genéticos Aplicações Conclusão 2 Introdução http://www.formula-um.com/ Como
6 Estudos de Casos Porta Lógica OU de 4 Entradas
6 Estudos de Casos Com o objetivo de avaliar a síntese automática de circuitos de QCA usando técnicas de Hardware Evolucionário (EHW), alguns circuitos foram sintetizados e serão apresentados a seguir.
Técnicas de Inteligência Artificial
Universidade do Sul de Santa Catarina Ciência da Computação Técnicas de Inteligência Artificial Aula 9 Algoritmos Genéticos Max Pereira Algoritmos Genéticos São técnicas de busca e otimização. Uma metáfora
Técnicas de Inteligência Artificial
Universidade do Sul de Santa Catarina Ciência da Computação Técnicas de Inteligência Artificial Aula 9 Algoritmos Genéticos Max Pereira Algoritmos Genéticos Algoritmos Genéticos São técnicas de busca e
Computação Evolutiva. Computação Evolutiva. Principais Tópicos. Evolução natural. Introdução. Evolução natural
Computação Evolutiva Eduardo do Valle Simões Renato Tinós ICMC - USP Principais Tópicos Introdução Evolução Natural Algoritmos Genéticos Aplicações Conclusão 1 2 Introdução Evolução natural http://www.formula-um.com/
Introdução aos Algoritmos Genéticos
Introdução aos Algoritmos Genéticos Prof. Matheus Giovanni Pires EXA 868 Inteligência Artificial Não-Simbólica B Universidade Estadual de Feira de Santana 2 Algoritmos Genéticos: Introdução Introduzidos
Algoritmos Genéticos. Estéfane G. M. de Lacerda DCA/UFRN Outubro/2008
Estéfane G. M. de Lacerda DCA/UFRN Outubro/2008 Introdução São técnicas de busca e otimização. É a metáfora da teoria da evolução das espécies iniciada pelo Fisiologista e Naturalista inglês Charles Darwin.
4 Modelos Propostos para Otimização de Planejamentos com Restrições de Precedência 4.1 Representação com Algoritmos Genéticos
46 4 Modelos Propostos para Otimização de Planejamentos com Restrições de Precedência 4.1 Representação com Algoritmos Genéticos Para definir a representação de um modelo para problemas de planejamento
Modelos Evolucionários e Tratamento de Incertezas
Ciência da Computação Modelos Evolucionários e Tratamento de Incertezas Aula 01 Computação Evolucionária Max Pereira Motivação Se há uma multiplicidade impressionante de algoritmos para solução de problemas,
Inteligência Artificial. Conceitos Gerais
Inteligência Artificial Conceitos Gerais Inteligência Artificial - IA IA é um campo de estudo multidisciplinar e interdisciplinar, que se apóia no conhecimento e evolução de outras áreas do conhecimento.
INTELIGÊNCIA COMPUTACIONAL
Rafael D. Ribeiro, M.Sc. rafaeldiasribeiro@gmail.com http://www.rafaeldiasribeiro.com.br A Inteligência Computacional (IC), denominada originalmente de Inteligência Artificial (IA), é uma das ciências
APLICAÇÃO DE ALGORITMOS BIO-INSPIRADOS EM CONTROLE ÓTIMO
APLICAÇÃO DE ALGORITMOS BIO-INSPIRADOS EM CONTROLE ÓTIMO Profa. Mariana Cavalca Baseado em: Material didático do Prof. Dr. Carlos Henrique V. Moraes da UNIFEI Curso de verão da Profa. Gisele L. Pappa Material
3 Algoritmos Genéticos
Técnicas de Inteligência Computacional 33 3 Algoritmos Genéticos Este capítulo resume os principais conceitos sobre o algoritmo evolucionário empregado nesta dissertação. É apresentada uma breve explicação
Sistema Computacional
Algoritmos e Lógica de Programação Conceitos Básicos Abstração Reinaldo Gomes reinaldo@cefet-al.br O que é um? Integração de componentes atuando como uma entidade, com o propósito de processar dados, i.e.
3 Aprendizado por reforço
3 Aprendizado por reforço Aprendizado por reforço é um ramo estudado em estatística, psicologia, neurociência e ciência da computação. Atraiu o interesse de pesquisadores ligados a aprendizado de máquina
Max Pereira. Inteligência Artificial
Max Pereira Inteligência Artificial Algoritmos Genéticos Algoritmos Genéticos São técnicas de busca e otimização. Uma metáfora da teoria da evolução das espécies iniciada pelo Naturalista inglês Charles
Algoritmos Evolutivos para Otimização
Algoritmos Evolutivos para Otimização A área de aplicação que tem recebido mais atenção é a otimização. Uma das razões é que existem uma variedade de problemas de otimização e a maioria deles sem solução
INSTITUTO DE PÓS GRADUAÇÃO ICPG GESTÃO DA TECNOLOGIA DA INFORMAÇÃO
INSTITUTO DE PÓS GRADUAÇÃO ICPG GESTÃO DA TECNOLOGIA DA INFORMAÇÃO Prof. Msc. Saulo Popov Zambiasi (saulopz@gmail.com) Informação - ICPG - Criciuma - SC 1 Características Gerais, operadores, algoritmo.
VERIFICAÇÃO DO DECAIMENTO DE INFORMAÇÃO EM REDES NEURAIS RECORRENTES APLICADAS AO PROBLEMA DO MUNDO DE WUMPUS 1
VERIFICAÇÃO DO DECAIMENTO DE INFORMAÇÃO EM REDES NEURAIS RECORRENTES APLICADAS AO PROBLEMA DO MUNDO DE WUMPUS 1 Henrique Augusto Richter 2, Eldair Fabrício Dornelles 3, Márcia Da Silva 4, Rogério Samuel
Inteligência Artificial
Inteligência Artificial Prof. Rafael Stubs Parpinelli DCC / UDESC-Joinville parpinelli@joinville.udesc.br www.joinville.udesc.br/portal/professores/parpinelli Material de apoio: Stuart Russel, Peter Norvig.
INF 1771 Inteligência Artificial
INF 1771 Inteligência Artificial Aula 06 Algoritmos Genéticos Edirlei Soares de Lima Algoritmos Genéticos Método de busca local. Boa abordagem para lidar com espaços de busca muito
Um Algoritmo Genético com Aprendizado por Reforço Simples aplicado ao problema do Mundo de Grid
1 Um Algoritmo Genético com Aprendizado por Reforço Simples aplicado ao problema do Mundo de Grid Luciana Conceição Dias Campos Resumo Este trabalho consiste da aplicação de um algoritmo genético ao método
Tópicos Especiais em Informática Fatec Indaiatuba
Prof. Dilermando Piva Jr. ((Compilação de diversas fontes na Internet)) Principal motivação para o estudo da computação evolutiva Otimização de processos complexo e que possuem um grande número de variáveis
IA: Inteligência Artificial
UNIFEI Os Sistemas Especialistas DENDRAL ~ 1960 EME006 - Automação Industrial IA: Inteligência Artificial Aula 12 Prof. José Hamilton Chaves Gorgulho Júnior Edward Feigenbaum 1936 - Joshua Lederberg 1925-2008
OTIMIZAÇÃO FUNÇÕES UTILIZANDO ALGORITMOS GENÉTICOS NO APLICATIVO MS EXCEL RESUMO INTRODUÇÃO
OTIMIZAÇÃO FUNÇÕES UTILIZANDO ALGORITMOS GENÉTICOS NO APLICATIVO MS EXCEL Miquéias Augusto Ferreira Nantes 1, Douglas Peixoto de Carvalho 1 (Alunos do Curso de Matemática da Universidade Anhanguera - Uniderp)
INTELIGÊNCIA ARTIFICIAL
Figura: Capa do Livro Russell, S., Norvig, P. Artificial Intelligence A Modern Approach, Pearson, 2009. Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Pós-Graduação
Breve Avaliação de Parâmetros básicos de Algoritmos Genéticos
https://eventos.utfpr.edu.br//sicite/sicite17/index Breve Avaliação de Parâmetros básicos de Algoritmos Genéticos RESUMO Stéfanie Caroline Pereira Dekker stefanie.c.dekker@gmail.com Universidade Tecnológica
3 Algoritmos Genéticos
Algoritmos Genéticos Algoritmos Genéticos (AGs) constituem um mecanismo de busca adaptativa que se baseia no princípio Darwiniano de seleção natural e reprodução genética [101]. AGs são tipicamente empregados
Programação de Computadores I Introdução PROFESSORA CINTIA CAETANO
Programação de Computadores I Introdução PROFESSORA CINTIA CAETANO Introdução Resolução de problemas Encontrar uma maneira de descrever este problema de uma forma clara e precisa. Encontremos uma seqüência
INTRODUÇÃO À INTELIGÊNCIA COMPUTACIONAL. Aula 06 Prof. Vitor Hugo Ferreira
Universidade Federal Fluminense Escola de Engenharia Departamento de Engenharia Elétrica INTRODUÇÃO À INTELIGÊNCIA COMPUTACIONAL Aula 06 Prof. Vitor Hugo Ferreira Representação por cromossomos Codificação
Métodos de Busca. Inteligência Artificial. Algoritmos Genéticos. Algoritmos Evolucionários. Prof. Ms. Luiz Alberto Contato:
Inteligência Artificial Prof. Ms. Luiz Alberto Contato: lasf.bel@gmail.com Métodos de Busca Busca Cega ou Exaustiva: Não sabe qual o melhor nó da fronteira a ser expandido. Apenas distingue o estado objetivo
Inteligência Artificial
Inteligência Artificial Aula 6 Algoritmos Genéticos M.e Guylerme Velasco Roteiro Introdução Otimização Algoritmos Genéticos Representação Seleção Operadores Geneticos Aplicação Caixeiro Viajante Introdução
Inteligência Artificial
Inteligência Artificial Prof. Kléber de Oliveira Andrade pdjkleber@gmail.com Algoritmos Genéticos Conteúdo Introdução O Algoritmo Genético Binário Noções de Otimização O Algoritmo Genético com Parâmetros
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
Matriz Curricular FGGCOMP - Bacharelado em Ciência da Computação 0. Disciplinas Obrigatórias FGGCOMP.00 Cálculo I FGGELET.00 - Cálculo I / FGGMATE.00 - Cálculo Diferencial e Integral I FGGCOMP.00 Geometria
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
Matriz Curricular FGGCOMP - Bacharelado em Ciência da Computação 0. Disciplinas Obrigatórias FGGCOMP.00 Cálculo I FGGELET.00 - Cálculo I / FGGMATE.00 - Cálculo Diferencial e Integral I FGGCOMP.00 Geometria
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
Matriz Curricular FGGCOMP - Bacharelado em Ciência da Computação 0. Disciplinas Obrigatórias FGGCOMP.00 Cálculo I FGGELET.00 - Cálculo I / FGGMATE.00 - Cálculo Diferencial e Integral I FGGCOMP.00 Geometria
CRÉDITOS DO CURSO. Carga Horária Créditos IN1030 Seminários 30 2
UNIVERSIDADE FEDERAL DE PERNAMBUCO PRÓ-REITORIA PARA ASSUNTOS DE PESQUISA E PÓS-GRADUAÇÃO ESTRUTURA CURRICULAR STRICTO SENSU (baseada na Res. 10/2008 do CCEPE) NOME DO CURSO: Pós-Graduação em Ciência da
3 Métodos de Otimização
3 Métodos de Otimização Problemas de otimização são relacionados a minimização ou maximização de função de uma ou mais variáveis num determinado domínio, possivelmente com a existência de um conjunto de
Algoritmos Genéticos. Texto base: Stuart Russel e Peter Norving - Inteligência Artificial
Algoritmos Genéticos Texto base: Stuart Russel e Peter Norving - Inteligência Artificial junho/2007 Algoritmo Genético Uma variante da busca em feixe estocástica Estado sucessor gerado pela combinação
1. Computação Evolutiva
Computação Bioinspirada - 5955010-1 1. Computação Evolutiva Prof. Renato Tinós Programa de Pós-Graduação Em Computação Aplicada Depto. de Computação e Matemática (FFCLRP/USP) 2 Computação Bioinspirada
Introdução. Aula 1 Inteligência Artificial HDL
Aula 1 Inteligência Artificial (Definição) O que é Inteligência Artificial? Uma área de pesquisa que investiga formas de habilitar o computador a realizar tarefas nas quais, até o momento, o ser humano
Inteligência Artificial. Aula 1 Prof. Nayat Sánchez Pi
Inteligência Artificial Aula 1 Prof. Nayat Sánchez Pi Curso: Inteligência Artificial Página web: http://nayatsanchezpi.com Material: Livro texto: Inteligência Artiicial, Russell & Norvig, Editora Campus.
INTELIGÊNCIA ARTIFICIAL
Figura: Capa do Livro Russell, S., Norvig, P. Artificial Intelligence A Modern Approach, Pearson, 2009. Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Pós-Graduação
Algoritmos Genéticos
Algoritmos Genéticos Roteiro Introdução Algoritmos Genéticos Otimização Representação Seleção Operadores Genéticos Aplicação Caixeiro Viajante Introdução Algoritmos Genéticos (AGs), são métodos de otimização
Figura 3.1: Fluxograma do algoritmo da Programação Genética.
3 Programação Genética O termo Programação Genética passou a ser utilizado em 1990 nos trabalhos publicados por Koza [30] e De Garis [31]. A definição de Koza para este termo passou a predominar após a
CTC-17 Inteligência Artificial Busca Competitiva e Busca Iterativa. Prof. Paulo André Castro
CTC-17 Inteligência Artificial Busca Competitiva e Busca Iterativa Prof. Paulo André Castro pauloac@ita.br www.comp.ita.br/~pauloac Sala 110, IEC-ITA Sumário Busca Competitiva Para Ambientes multiagentes...
Buscas Informadas ou Heurísticas - Parte III
Buscas Informadas ou Heurísticas - Parte III Prof. Cedric Luiz de Carvalho Instituto de Informática - UFG Mestrado em Ciência da Computação / 2006 BUSCA SMA* (Simplified Memory-Bounded A*) BUSCA SMA* (Simplified
Exemplo de Aplicação de Algoritmos Genéticos. Prof. Juan Moisés Mauricio Villanueva cear.ufpb.br/juan
Exemplo de Aplicação de Algoritmos Genéticos Prof. Juan Moisés Mauricio Villanueva jmauricio@cear.ufpb.br cear.ufpb.br/juan Estrutura do Algoritmo Genético Algoritmo genético Inicio t = 0 inicializar P(t)
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
Matriz Curricular FGGCOMP - Bacharelado em Ciência da Computação 0. Disciplinas Obrigatórias FGGCOMP.00 Cálculo I FGGELET.00 - Cálculo I / FGGMATE.00 - Cálculo Diferencial e Integral I FGGCOMP.00 Geometria
IAC - Inteligência Artificial Aplicada a Controle
Introdução IAC - Inteligência Artificial Aplicada a Controle Prof. Dr. Alexandre da Silva Simões Homo sapiens: capacidades mentais de grande importância Como um punhado de matéria pode perceber, compreender,
ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIOS
UNIVERSIDADE DO PLANALTO CATARINENSE DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE SISTEMAS DE INFORMAÇÃO (BACHARELADO) JOÃO GABRIEL STEFFANI BURIGO ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS
Técnicas de Inteligência Artificial
Universidade do Sul de Santa Catarina Ciência da Computação Técnicas de Inteligência Artificial Aula 01 Introdução, motivação e áreas de aplicação Prof. Max Pereira O futuro, das máquinas inteligentes,
Linguagens de Programação
Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Computação e Automação Linguagens de Programação Professor Responsável: Luiz Affonso Henderson Guedes de Oliveira Prof.
4 Implementação Computacional
4 Implementação Computacional 4.1. Introdução Neste capítulo é apresentada a formulação matemática do problema de otimização da disposição das linhas de ancoragem para minimizar os deslocamentos (offsets)
6 ESCALONAMENTO DE CPU
6 ESCALONAMENTO DE CPU O escalonamento de CPU é ponto chave da multiprogramação. Ela permite que haja mais de um processo em execução ao mesmo tempo. Em ambientes com um único processador, o escalonador
Inteligência Artificial
Inteligência Artificial Professor Rafael Stubs Parpinelli E-mail: rafael.parpinelli@udesc.br udesc.academia.edu/rafaelstubsparpinelli www.researchgate.net/profile/rafael_parpinelli www.joinville.udesc.br/portal/professores/parpinelli/
SOLUÇÕES HEURÍSTICAS PARA O JOGO DE DAMAS
Universidade Federal do Tocantins SOLUÇÕES HEURÍSTICAS PARA O JOGO DE DAMAS Diogo Rigo de Brito Guimarães Alexandre Tadeu Rossini da Silva Objetivo Implementar soluções heurísticas para o Jogo de Damas
Paradigma Simbólico. Sistemas de Informação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 2)
Paradigma Simbólico Sistemas de Informação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 2) Revisão da aula anterior: definição de IA Podemos associar o termo IA com: Parte da ciência da computação
PEA 2522 MÉTODOS DE OTIMIZAÇÃO. Otimização
PEA MÉTODOS DE OTIMIZAÇÃO Otimização Definir claramente o problema a ser resolvido Estabelecer os limites físicos (capacidades, restrições) Definir o modelo matemático adequado PEA 8 - PLANEJAMENTO DE
Computação Bioinspirada PROF. PAULO SALGADO
Computação Bioinspirada AULA 1 APRESENTAÇÃO DA DISCIPLINA PROF. PAULO SALGADO Aula de hoje Falar sobre Objetivos Ementa Avaliação Roteiro Proposto (Cronograma) Referências Periódicos da Área Objetivos
Algoritmos Genéticos
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Algoritmos Genéticos Aluno: Fabricio Aparecido Breve Prof.: Dr. André Ponce de Leon F. de Carvalho São Carlos São Paulo Maio
4 Implementação do Gerador de arquivos VRML - VRMLGer
29 4 Implementação do Gerador de arquivos VRML - VRMLGer Neste capítulo são apresentados o desenvolvimento do Gerador de arquivos VRML - VRMLGer, a linguagem de programa utilizada, a estrutura da entrada
Teoria da Computação. Complexidade computacional classes de problemas
Teoria da Computação Complexidade computacional classes de problemas 1 Universo de problemas Problemas indecidíveis ou não-computáveis Não admitem algoritmos Problemas intratáveis Não admitem algoritmos
Problema de Satisfação de Restrições
Problema de Satisfação de Restrições Exemplos de PSR (CSP, Constraint Satisfaction Problem) Busca genérica aplicada a PSRs Backtracking Verificação forward Heurísticas para PSRs Problema de Satisfação
Problema de Satisfação de Restrições. Problema de Satisfação de Restrições. Grafo de restrições. Exemplo: 4 Rainhas como um PSR
Problema de Satisfação de Restrições Problema de Satisfação de Restrições Exemplos de PSR (CSP, Constraint Satisfaction Problem) Busca genérica aplicada a PSRs Backtracking Verificação forward Heurísticas
11/1/2012. Agenda. Classe de problemas de interesse. Busca Local. Busca Local. Exemplo de Espaço de Estados
Agenda PCS / PCS 09 Inteligência Artificial Prof. Dr. Jaime Simão Sichman Profa. Dra. Anna Helena Reali Costa Busca Local e Problemas de Otimização. Introdução. Busca Local I. Subida da Encosta (Hill-Climbing)
Buscas Informadas ou Heurísticas - Parte II
Buscas Informadas ou Heurísticas - Parte II Prof. Cedric Luiz de Carvalho Instituto de Informática - UFG Graduação em Ciência da Computação / 2006 FUNÇÕES HEURÍSTICAS - 1/7 FUNÇÕES HEURÍSTICAS - 2/7 Solução
Fabrício Jailson Barth BandTec
Introdução à Inteligência Artificial Fabrício Jailson Barth fabricio.barth@bandtec.com.br BandTec 1 o semestre de 2012 Objetivos e Sumário O que é Inteligência Artificial (IA)? Objetivos da IA. Influência
Inteligência Artificial
Inteligência Artificial Apresentação da disciplina Conceitos básicos Prof. Paulo Martins Engel Informática UFRGS Prof. Paulo Martins Engel Objetivos Apresentar uma visão geral da Inteligência Artificial,
UTILIZANDO TÉCNICAS DE ALGORITMO GENÉTICO PARA RESOLUÇÃO DO PROBLEMA DE GERAÇÃO DE GRADE HORÁRIA PARA ENFERMARIAS
Conferência IADIS Ibero-Americana Computação Aplicada 2013 UTILIZANDO TÉCNICAS DE ALGORITMO GENÉTICO PARA RESOLUÇÃO DO PROBLEMA DE GERAÇÃO DE GRADE HORÁRIA PARA ENFERMARIAS Ricardo Soares Bôaventura 1,
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação Mario E. Matiusso Jr. (11028407) Bacharelado em Ciências da Computação Universidade Federal do ABC (UFABC) Santo André, SP Brasil mario3001[a]ig.com.br Resumo:
ALGORITMOS GENÉTICOS. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR
ALGORITMOS GENÉTICOS Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR Fev/2018 Introdução Algoritmos Genéticos são algoritmos heurísticos de busca, que utilizam regras
Algoritmos Genéticos e Evolucionários
Algoritmos Genéticos e Evolucionários Djalma M. Falcão COPPE/UFRJ PEE e NACAD falcao@nacad.ufrj.br http://www.nacad.ufrj.br/~falcao/ http://www.nacad.ufrj.br/~falcao/ag/ag.htm Resumo do Curso Introdução
Aprendizado Evolutivo: Introdução aos Algoritmos Genéticos
Aprendizado Evolutivo: Introdução aos Algoritmos Genéticos SCC-230 Inteligência Artificial Thiago A. S. Pardo Solange O. Rezende 1 Computação Evolutiva (CE) Trata de sistemas para a resolução de problemas
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
LEI Nº.9, DE 9//00, PUBLICADA NO DOU DE 0//00, SEÇÃO I, PAGS. I - Rua São Luiz Gonzaga, s/n - São Luiz - Formiga - MG - CEP: 0-000 Tel: ()-09 - Site: www.formiga.ifmg.edu.br Matriz Curricular FGGCOMP -
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
LEI Nº.9, DE 9//00, PUBLICADA NO DOU DE 0//00, SEÇÃO I, PAGS. I - Rua São Luiz Gonzaga, s/n - São Luiz - Formiga - MG - CEP: 70-000 Tel: (7)-09 - Site: www.formiga.ifmg.edu.br Matriz Curricular FGGCOMP
MODELAGEM DE UM SISTEMA DE INFORMAÇÃO APLICADO AO GERENCIAMENTO DO ACOMPANHAMENTO DE TRABALHOS DE CONCLUSÃO DE CURSO DO IFC-CAMPUS CAMBORIÚ
MODELAGEM DE UM SISTEMA DE INFORMAÇÃO APLICADO AO GERENCIAMENTO DO ACOMPANHAMENTO DE TRABALHOS DE CONCLUSÃO DE CURSO DO IFC-CAMPUS CAMBORIÚ Lucas MASO 1 ; Ana Elisa Ferreira SCHMIDT 2 ; Angelo Augusto
5 Estudo de Caso e Resultados
5 Estudo de Caso e Resultados 5.1. Introdução Finalizado o desenvolvimento da ferramenta, é indispensável testar suas funcionalidades e a eficácia da aplicação conjunta dos seus módulos de geração de experimentos
GRADE CURRICULAR E CORPO DOCENTE. Fase 1 Carga horária total: 360h
Ciência da Computação CÂMPUS LAGES Instrumentos Regulatórios (Resolução CEPE e CONSUP ou Portaria de reconhecimento do curso pelo MEC) RESOLUÇÃO CEPE/IFSC Nº 39, DE 13 DE AGOSTO DE 2014. RESOLUÇÃO CONSUP/IFSC
Otimização por Enxame de Partículas (PSO) e Otimização por Colônias de Formigas (ASO) aplicadas ao Problema do Caixeiro Viajante (TSP)
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Otimização por Enxame de Partículas (PSO) e Otimização por Colônias de Formigas (ASO) aplicadas ao Problema do Caixeiro Viajante
1. Computação Evolutiva
Computação Bioinspirada - 5955010-1 1. Computação Evolutiva Prof. Renato Tinós Programa de Pós-Graduação Em Computação Aplicada Depto. de Computação e Matemática (FFCLRP/USP) 2 Computação Bioinspirada
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Codificação das variáveis: binária Iniciação da população: aleatória Avaliação: função aptidão Operadores. Critério de parada: número de gerações
AG Simples/Canônico (AGS) AG introduzido por Holland Funciona bem para problemas de otimização simples e/ou de pequenas dimensões A maior parte da teoria dos AGs está baseada no AGS Utilidade didática
3 Otimização Evolucionária de Problemas com Restrição
3 Otimização Evolucionária de Problemas com Restrição 3.1. Introdução Este capítulo resume os principais conceitos sobre os algoritmos evolucionários empregados nesta dissertação. Primeiramente, se fornece
SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG
LEI Nº.9, DE 9//00, PUBLICADA NO DOU DE 0//00, SEÇÃO I, PAGS. I - Rua São Luiz Gonzaga, s/n - São Luiz - Formiga - MG - CEP: 0-000 Tel: ()-09 - Site: www.formiga.ifmg.edu.br Matriz Curricular FGGCOMP -
Escalonador de Ordens de Produção Utilizando Algoritmos Genéticos
Escalonador de Ordens de Produção Utilizando Algoritmos Genéticos Nome: Wilian Kohler Supervisor na FURB: Prof. Jomi Fred Hübner Orientador na Empresa: Evaldo Moresco Jr. Empresa: Metalúrgica Siemsen Ltda.
LINGUAGEM C: ARRAY: VETORES E MATRIZES
LINGUAGEM C: ARRAY: VETORES E MATRIZES Prof. André Backes POR QUE USAR ARRAY? As variáveis declaradas até agora são capazes de armazenar um único valor por vez. Sempre que tentamos armazenar um novo valor
ELABORAÇÃO DE UMA HEURÍSTICA PARA O PROBLEMA DE QUADRO DE HORÁRIOS DOS PROFESSORES DA UNIVERSIDADE ESTADUAL DO PARANÁ CAMPUS CAMPO MOURÃO
ELABORAÇÃO DE UMA HEURÍSTICA PARA O PROBLEMA DE QUADRO DE HORÁRIOS DOS PROFESSORES DA UNIVERSIDADE ESTADUAL DO PARANÁ CAMPUS CAMPO MOURÃO Marcos Oliveira dos Santos (IC, FUNDAÇÃO ARAUCÁRIA), (UNESPAR/FECILCAM),
Variáveis e Memória. Revisão. Conceitos. Operações sobre a memória
Variáveis e Memória Revisão Estudamos, na Introdução, que os programas de computador implementam algoritmos, os quais manipulam um conjunto de dados para produzir um resultado. O algoritmo é um conjunto
O USO DE ALGORITMOS GENÉTICOS NA RESOLUÇÃO DE PROBLEMAS DE PROGRAMAÇÃO LINEAR RESUMO INTRODUÇÃO
O USO DE ALGORITMOS GENÉTICOS NA RESOLUÇÃO DE PROBLEMAS DE PROGRAMAÇÃO LINEAR Douglas Peioto de Carvalho,Miquéias Augusto Ferreira Nantes (Alunos do Curso de Matemática da Universidade Anhanguera - Uniderp)
Processos de software
Processos de software 1 Processos de software Conjunto coerente de atividades para especificação, projeto, implementação e teste de sistemas de software. 2 Objetivos Introduzir modelos de processos de