ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIO

Tamanho: px
Começar a partir da página:

Download "ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIO"

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

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

Leia mais

ALGORITMO GENÉTICO COMO REPRESENTAÇÃO DAS MUTAÇÕES NA BIOLOGIA

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

Leia mais

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 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

Leia mais

3. Resolução de problemas por meio de busca

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

Leia mais

Algoritmo Genético. Inteligência Artificial. Professor: Rosalvo Ferreira de Oliveira Neto

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

Leia mais

Algoritmos Genéticos. Princípio de Seleção Natural. Sub-áreas da Computação Evolutiva. Idéias básicas da CE. Computação Evolutiva

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

Leia mais

Sistema para Geração de Escalas de Plantões Médicos

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

Leia mais

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. 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

Leia mais

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 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

Leia mais

6 Estudos de Casos Porta Lógica OU de 4 Entradas

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.

Leia mais

Técnicas de Inteligência Artificial

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

Leia mais

Técnicas de Inteligência Artificial

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

Leia mais

Computação Evolutiva. Computação Evolutiva. Principais Tópicos. Evolução natural. Introdução. Evolução natural

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/

Leia mais

Introdução aos Algoritmos Genéticos

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

Leia mais

Algoritmos Genéticos. Estéfane G. M. de Lacerda DCA/UFRN Outubro/2008

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.

Leia mais

4 Modelos Propostos para Otimização de Planejamentos com Restrições de Precedência 4.1 Representação com Algoritmos Genéticos

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

Leia mais

Modelos Evolucionários e Tratamento de Incertezas

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,

Leia mais

Inteligência Artificial. Conceitos Gerais

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.

Leia mais

INTELIGÊNCIA COMPUTACIONAL

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

Leia mais

APLICAÇÃO DE ALGORITMOS BIO-INSPIRADOS EM CONTROLE ÓTIMO

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

Leia mais

3 Algoritmos Genéticos

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

Leia mais

Sistema Computacional

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.

Leia mais

3 Aprendizado por reforço

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

Leia mais

Max Pereira. Inteligência Artificial

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

Leia mais

Algoritmos Evolutivos para Otimização

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

Leia mais

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 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.

Leia mais

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 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

Leia mais

Inteligência Artificial

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.

Leia mais

INF 1771 Inteligência Artificial

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

Leia mais

Um Algoritmo Genético com Aprendizado por Reforço Simples aplicado ao problema do Mundo de Grid

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

Leia mais

Tópicos Especiais em Informática Fatec Indaiatuba

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

Leia mais

IA: Inteligência Artificial

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

Leia mais

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 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)

Leia mais

INTELIGÊNCIA ARTIFICIAL

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

Leia mais

Breve Avaliação de Parâmetros básicos de Algoritmos Genéticos

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

Leia mais

3 Algoritmos Genéticos

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

Leia mais

Programação de Computadores I Introdução PROFESSORA CINTIA CAETANO

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

Leia mais

INTRODUÇÃO À INTELIGÊNCIA COMPUTACIONAL. Aula 06 Prof. Vitor Hugo Ferreira

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

Leia mais

Métodos de Busca. Inteligência Artificial. Algoritmos Genéticos. Algoritmos Evolucionários. Prof. Ms. Luiz Alberto Contato:

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

Leia mais

Inteligência Artificial

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

Leia mais

Inteligência Artificial

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

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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

Leia mais

CRÉDITOS DO CURSO. Carga Horária Créditos IN1030 Seminários 30 2

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

Leia mais

3 Métodos de Otimização

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

Leia mais

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 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

Leia mais

1. Computação Evolutiva

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

Leia mais

Introdução. Aula 1 Inteligência Artificial HDL

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

Leia mais

Inteligência Artificial. Aula 1 Prof. Nayat Sánchez Pi

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.

Leia mais

INTELIGÊNCIA ARTIFICIAL

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

Leia mais

Algoritmos Genéticos

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

Leia mais

Figura 3.1: Fluxograma do algoritmo da Programação Genética.

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

Leia mais

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 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...

Leia mais

Buscas Informadas ou Heurísticas - Parte III

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

Leia mais

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 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)

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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

Leia mais

IAC - Inteligência Artificial Aplicada a Controle

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,

Leia mais

ALGORITMOS GENÉTICOS PARA GERAÇÃO DE QUADROS DE HORÁRIOS

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

Leia mais

Técnicas de Inteligência Artificial

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,

Leia mais

Linguagens de Programação

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.

Leia mais

4 Implementação Computacional

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)

Leia mais

6 ESCALONAMENTO DE CPU

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

Leia mais

Inteligência Artificial

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/

Leia mais

SOLUÇÕES HEURÍSTICAS PARA O JOGO DE DAMAS

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

Leia mais

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) 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

Leia mais

PEA 2522 MÉTODOS DE OTIMIZAÇÃO. Otimizaçã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

Leia mais

Computação Bioinspirada PROF. PAULO SALGADO

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

Leia mais

Algoritmos Genéticos

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

Leia mais

4 Implementação do Gerador de arquivos VRML - VRMLGer

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

Leia mais

Teoria da Computação. Complexidade computacional classes de problemas

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

Leia mais

Problema de Satisfação de Restrições

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

Leia mais

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. 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

Leia mais

11/1/2012. Agenda. Classe de problemas de interesse. Busca Local. Busca Local. Exemplo de Espaço de Estados

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)

Leia mais

Buscas Informadas ou Heurísticas - Parte II

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

Leia mais

Fabrício Jailson Barth BandTec

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

Leia mais

Inteligência Artificial

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,

Leia mais

UTILIZANDO TÉCNICAS DE ALGORITMO GENÉTICO PARA RESOLUÇÃO DO PROBLEMA DE GERAÇÃO DE GRADE HORÁRIA PARA ENFERMARIAS

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,

Leia mais

Análise empírica de algoritmos de ordenação

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:

Leia mais

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 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

Leia mais

Algoritmos Genéticos e Evolucionários

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

Leia mais

Aprendizado Evolutivo: Introdução aos Algoritmos Genéticos

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

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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 -

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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

Leia mais

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Ú 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

Leia mais

5 Estudo de Caso e Resultados

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

Leia mais

GRADE CURRICULAR E CORPO DOCENTE. Fase 1 Carga horária total: 360h

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

Leia mais

Otimização por Enxame de Partículas (PSO) e Otimização por Colônias de Formigas (ASO) aplicadas ao Problema do Caixeiro Viajante (TSP)

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

Leia mais

1. Computação Evolutiva

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

Leia mais

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

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:

Leia mais

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

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

Leia mais

3 Otimização Evolucionária de Problemas com Restrição

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

Leia mais

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS IFMG

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 -

Leia mais

Escalonador de Ordens de Produção Utilizando Algoritmos Genéticos

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.

Leia mais

LINGUAGEM C: ARRAY: VETORES E MATRIZES

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

Leia mais

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 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),

Leia mais

Variáveis e Memória. Revisão. Conceitos. Operações sobre a memória

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

Leia mais

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 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)

Leia mais

Processos de software

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

Leia mais