ALGORITMO GENÉTICO PARA GERAÇÃO DE ESCALA HORÁRIA MÉDICA

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

Download "ALGORITMO GENÉTICO PARA GERAÇÃO DE ESCALA HORÁRIA MÉDICA"

Transcrição

1 UNIVERSIDADE DO PLANALTO CATARINENSE DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE SISTEMAS DE INFORMAÇÃO (BACHARELADO) ANDERSON BEPPLER ALGORITMO GENÉTICO PARA GERAÇÃO DE ESCALA HORÁRIA MÉDICA LAGES (SC) 2009

2 ANDERSON BEPPLER ALGORITMO GENÉTICO PARA GERAÇÃO DE ESCALA HORÁRIA MÉDICA 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ª. Daiana Petry Leite, MSc. LAGES (SC) 2009

3 ANDERSON BEPPLER ALGORITMO GENÉTICO PARA GERAÇÃO DE ESCALA HORÁRIA MÉDICA 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 SISTEMAS DE INFORMAÇÃO Lages (SC), 8 de Dezembro de 2009 Prof(a). Daiana Petry Leite, MSc. Orientadora BANCA EXAMINADORA: Prof. Wilson Castello Branco Neto, Dr. UNIPLAC Prof. Rafael Gattino Furtado, Esp. UNIPLAC Prof. Wilson Castello Branco Neto, Dr. Professor de TCC Prof. Angelo Augusto Frozza, MSc. Coordenador de Curso iii

4 Agradeço à Professora Daiana por toda a dedicação e suporte prestados. Agradeço também ao Hospital e Maternidade Tereza Ramos por possibilitar que fossem utilizados como Caso de Uso para tal trabalho. iv

5 v A vida é uma seleção natural, prepare-se para ser o melhor! (Alosir Moretti)

6 LISTA DE ILUSTRAÇÕES FIGURA 1 - Exemplo de Roleta Simples FIGURA 2 - Exemplo de Roleta Ponderada FIGURA 3 - Cruzamento por um Ponto de Corte FIGURA 4 - Exemplo de Cruzamento de Cromossomos FIGURA 5 - Mutação por Inversão FIGURA 6 - Mutação por Permutação FIGURA 7 - Arquitetura do sistema FIGURA 8 - Modelo lógico do banco de dados FIGURA 9 - Matriz representativa da grade FIGURA 10 - Tela principal do sistema FIGURA 11 - Cadastro de Feriados FIGURA 12 - Cadastro de Médicos FIGURA 13 - Cadastro de indisponibilidades no módulo desktop FIGURA 14 - Cadastro de indisponibilidades no módulo web FIGURA 15 - Tela que antecede a Geração das Grades FIGURA 16 - Verificação fins de semana FIGURA 17 - Tela de Visualização das Grades Geradas no módulo desktop FIGURA 18 - Tela de Visualização das Grades Geradas no módulo desktop FIGURA 19 - Grade para o setor de UTI FIGURA 20 - Cargas horárias geradas FIGURA 21 - Escala de Sobreaviso para mês de Janeiro do setor UTI QUADRO 1 - Exemplo de População Inicial... 9 QUADRO 2 - Exemplo de avaliação de cromossomos... 9 QUADRO 3 - Exemplo roleta ponderada QUADRO 4 - Método construtor da Classe AlgGen QUADRO 5 - Trecho da geração da população inicial Método gerarpopulacao(). 29 QUADRO 6 - Função nextmedico() QUADRO 7 - Método gerargrade() QUADRO 8 - Avaliação período Manhã-Tarde QUADRO 9 - Avaliação janela Manhã-Noite QUADRO 10 - Trecho código avaliação de disponibilidades QUADRO 11 - Trecho código avaliação de feriados seguidos QUADRO 12 - Trecho código avaliação de fins de semana

7 QUADRO 13 - Trecho código controle de horas trabalhadas QUADRO 14 - Trecho método efetuarcruzamento() QUADRO 15 - Trecho método efetuarcruzamento() QUADRO 16 - Trecho método efetuarcruzamento() QUADRO 17 - Método efetuarmutacao() QUADRO 18 - Método gerarsobreaviso() QUADRO 19 - Código com laço while QUADRO 20 - Código com roleta simples QUADRO 21 - Código com cruzamento por ponto de corte QUADRO 22 - Código com mutação por inversão QUADRO 23 - Trecho código em Delphi QUADRO 24 - Trecho código em Java QUADRO 25 - Trecho código em C QUADRO 26 - Trecho código em C# QUADRO 27 - Feriados Cadastrados QUADRO 28 - Indisponibilidades Cadastradas QUADRO 29 - Cargas horárias para o sobreaviso gerado TABELA 1 - Exemplo de seleção por roleta simples... 11

8 LISTA DE ABREVIATURAS E SIGLAS AG CRM CE EAS EPAC FA HGMTR HU IA IAC IAE IAS MM MT NM RP RS SGBD TCC UNIPLAC UTI - Algoritmos Genéticos - Conselho Regional de Medicina - Computação Evolucionária - Estabelecimento Assistencial de Saúde - Encontro Paranaense de Computação - Função de Avaliação - Hospital Geral e Maternidade Teresa Ramos - Hospital Universitário - Inteligência Artificial - Inteligência Artificial Conexionista - Inteligência Artificial Evolutiva - Inteligência Artificial Simbólica - Madrugada-Manhã - Manhã-Tarde - Noite-Madrugada - Roleta Ponderada - Roleta Simples - Sistema Gerenciador de Banco de Dados - Trabalho de Conclusão de Curso - Universidade do Planalto Catarinense - Unidade de Terapia Intensiva

9 RESUMO A elaboração de escalas de horários (timetabling) é um problema clássico de instituições dos mais vários segmentos. Dentro de um Estabelecimento Assistencial de Saúde (EAS), por exemplo, agendar horários dos plantões que os médicos devem realizar é uma tarefa bastante complexa e lenta. A grande quantidade de restrições neste tipo de timetabling dificulta sua solução através de métodos convencionais de programação e, portanto, necessita de uma técnica mais específica. Desta forma, o presente trabalho aborda o desenvolvimento de um sistema para gerar escalas de horários de plantões médicos em EAS através de uma técnica de programação baseada na seleção natural das espécies, os Algoritmos Genéticos (AGs), bem como gerar a escala de sobreaviso baseando-se na escala de plantões gerada. A implementação do sistema foi dividida basicamente em 2 módulos principais: entrada e saída de dados e geração do horário. O módulo de entrada e saída de dados caracteriza-se pela interface com o usuário, compreendendo todos os cadastros necessários para a execução do AG, bem como a apresentação do horário gerado ao usuário. Para o cadastro das possíveis indisponibilidades dos médicos, bem como a visualização da escala de trabalho por cada um deles, foi desenvolvida uma página web, tornando o processo mais simples e com maior disponibilidade. A implementação do AG levou em consideração restrições, tais como períodos inexistentes, possíveis janelas, indisponibilidade médica, carga de trabalho e finais de semana e feriados seguidos. Para tanto, gera-se uma população inicial com 40 indivíduos e a cada avaliação, se não encontrada uma grade adequada, as 8 melhores possibilidades são guardadas (elitismo 20%) e para o restante da população são aplicados os operadores genéticos de cruzamento uniforme e mutação por permutação (10%). O sistema ainda não foi testado em seu ambiente de aplicação real, no entanto, em seus testes preliminares, comportou-se de maneira satisfatória, oferecendo uma escala médica de acordo com as exigências da maioria dos hospitais da rede SUS. Palavras Chaves: Algoritmos Genéticos, Escala de Horários Médicos, Plantão Médico, Sobreaviso Médico.

10 ABSTRACT The preparation of timetables is a classic problem on institutions from various cantles. In a Health Establishment (HE), for example, schedule the doctors that should carry out is a complex and slow task. The restrictions in this kind of timetabling solution by conventional methods of programming requires a technique more specific. Then, this work treat the development of a system to generate timetables for shifts in HEs using a programming technique based on natural selection of species, the genetic algorithms (GAs). The implementation of the system is basically divided into 2 main modules: input and output data and generation time. The module input and output data is characterized by the Graphic User Interface (GUI), including all entries necessary for the implementation of the GA and the presentation of the schedule generated. To register the possible unavailability of doctors, and to display the range of work by each of them has developed a web page, making the process simpler and with more availability. The implementation of the GA took into account constraints such as nonexistent periods, possible "windows", medical availability, workload and weekends and holidays followed. To do so would create an initial population with 40 individuals and each evaluation, if not found an appropriate scale, the 8th best possibilities are kept (elitism - 20%) and for the rest of the population are applied genetic operators of crossover and uniform mutation by swapping (10%). The system has not been tested in a real application environment, however, in their preliminary tests behaved satisfactorily, providing a medical scale according to the requirements of most hospitals in the SUS. Keywords: Genetic Algorithms, Medic Timetable, ER, Medical Guard.

11 SUMÁRIO 1 INTRODUÇÃO Apresentação Descrição do problema Justificativa Objetivo geral Objetivos específicos Metodologia INTELIGÊNCIA ARTIFICIAL NA GERAÇÃO DE ESCALAS HORÁRIAS Inteligência Artificial: Histórico e Conceitos Paradigmas da Inteligência Artificial Inteligência artificial simbólica IAS Inteligência Artificial Conexionista - IAC Inteligência Artificial Evolucionária - IAE Algoritmos Genéticos Funcionamento de um algoritmo genético Aplicação de Algoritmos Genéticos na Geração de Escalas Horárias Conclusão MODELAGEM DO SISTEMA Especificação do sistema Módulo Desktop Módulo Web Estrutura do Algoritmo Genético Geração da população inicial Avaliação/Validação dos elementos da população Geração da nova população O Sobreaviso Conclusão APRESENTAÇÃO DO SISTEMA Módulo de entrada de dados Implementação do AG Avaliação dos Cromossomos Aplicação dos operadores genéticos Implementação do Sobreaviso Módulo de Saída de Dados... 40

12 4.5 Conclusão TESTES E RESULTADOS Estudo de caso Testes feitos durante o desenvolvimento do sistema While ou for? Roleta Simples ou Ponderada? Cruzamento por um ponto de corte ou Cruzamento uniforme? Mutação por inversão ou Mutação por Permutação? Delphi, Java, C ou C#? Testes de funcionalidade do sistema Escalas dos Plantões por Setor Escalas dos Sobreavisos por Especialidade CONSIDERAÇÕES FINAIS REFERÊNCIAS BIBLIOGRÁFICAS BIBLIOGRAFIA COMPLEMENTAR APÊNDICES... 61

13 1 1 INTRODUÇÃO 1.1 Apresentação O desenvolvimento de uma escala de horários adequada que atenda às necessidades dos médicos, bem como dos pacientes de um Estabelecimento Assistencial de Saúde (EAS), é um fator indispensável na administração Hospitalar. Trata-se de um problema complexo e demorado, que vem sendo resolvido de forma manual pela maioria dos EAS, mas que, no entanto, pode ser resolvido através da construção de uma ferramenta computacional baseada em técnicas de Inteligência Artificial. Para Whitby (2004, p.19), Inteligência Artificial (IA) é o estudo do comportamento inteligente (em homens, animais e máquinas) e a tentativa de encontrar formas pelas quais esse comportamento possa ser transformado em qualquer tipo de artefato por meio da engenharia. Já mais especificamente, os Algoritmos Genéticos (AGs), conforme Fernandes (2003, p.115), são inspirados no processo genético e evolutivo dos organismos vivos, onde a combinação de boas características provenientes de diferentes indivíduos ancestrais evoluem, logrando características cada vez melhor adaptadas ao ambiente em que vivem. Assim sendo, com o auxílio da inteligência artificial, mais precisamente a técnica de algoritmos genéticos, foi desenvolvida uma ferramenta para auxiliar na geração das grades horárias, também conhecidas como timetabling, para os médicos de um EAS.

14 2 O presente trabalho apresenta-se dividido em seis partes. No Capítulo 1 é abordada a problemática do projeto, seus objetivos, sua justificativa, bem como a metodologia empregada. Um levantamento bibliográfico sobre os AGs e sua aplicação na geração de escalas horárias, além de outros aspectos conceituais indispensáveis ao projeto, bem como uma apresentação de alguns trabalhos correlatos são mostrados no Capítulo 2. No Capítulo 3 encontra-se a modelagem do sistema. A apresentação do sistema, detalhando sua implementação, é apresentada no Capítulo 4, o qual antecede o detalhamento dos testes e resultados da aplicação do sistema (Capítulo 5). As considerações finais (Capítulo 6) e o artigo científico encerram o trabalho. 1.2 Descrição do problema O regime de trabalho dos médicos dentro da maioria dos hospitais divide-se em duas categorias obrigatórias: plantão e sobreaviso. Considerando a existência de mais de um profissional para cada especialidade e sabendo-se que o hospital necessita que pelo menos um deles esteja disponível em cada categoria durante 24 horas diárias, torna-se complicada a tarefa de definir a escala de horários mensal de cada profissional. 1.3 Justificativa Elaborar escalas periódicas de trabalho pode envolver diversas variáveis (restrições), as quais interferem diretamente no resultado final do processo, tornando-o complexo e demorado. Quando se trata da escala de trabalho dos médicos dentro de hospitais, o cuidado deve ser ainda maior, pois deixar o hospital sem a disponibilidade de um profissional pode significar deixar um paciente sem atendimento. Tornar o processo de geração das escalas de trabalho automático, certamente o deixaria mais rápido e confiável, pois ao invés de elaborar a escala, o responsável precisaria apenas analisá-la e aprová-la.

15 3 Considerando a evolução dos resultados de trabalhos similares na área de timetabling desenvolvidos na UNIPLAC Universidade do Planalto Catarinense, tais como os de Pereira (2001), Oliveira (2004), Lenzi (2004), Santos (2004) e Borges (2007), percebe-se que a técnica de Algoritmos Genéticos vem dando bons resultados para este fim e, portanto, pode ser considerada adequada. 1.4 Objetivo geral Desenvolver uma ferramenta computacional capaz de gerar automaticamente a escala mensal dos horários de trabalho dos médicos de um hospital. 1.5 Objetivos específicos Os objetivos são: a) Identificar as características da técnica de Algoritmos Genéticos relevantes à implementação de ferramentas geradoras de escalas de trabalho; b) Desenvolver uma ferramenta que garanta que, durante 24 horas diárias, pelo menos um profissional de cada especialidade esteja escalado em cada categoria de regime de trabalho; c) Identificar eventuais particularidades do regime de trabalho dos médicos do Hospital Geral e Maternidade Teresa Ramos (HGMTR), da cidade de Lages, a fim de aplicar e validar a ferramenta desenvolvida; d) Implementar uma aplicação web para auxiliar e facilitar o cadastro de compromissos dos médicos antes da geração da grade de horários. 1.6 Metodologia O presente trabalho teve início com o desenvolvimento do seu projeto, o qual incluiu a redação do seu Primeiro Capítulo (Introdução).

16 4 A próxima etapa compreendeu o levantamento bibliográfico necessário para estudar Inteligência Artificial, mais especificamente no que se refere a sua aplicação na geração automática de escalas de horários. Ainda na etapa de levantamento bibliográfico, foi realizado um breve estudo de trabalhos correlatos, a fim de se conhecer um pouco do que já tinha sido feito sobre o assunto, traçando-se, de uma forma mais consistente, o caminho a ser seguido principalmente na modelagem e implementação do sistema. Um estudo direcionado aos requisitos do Hospital Geral e Maternidade Tereza Ramos HGMTR, local onde o sistema desenvolvido está sendo implantado, encerrou a etapa formal de levantamento bibliográfico, sendo que a mesma foi retomada sempre que necessário. Decorrente da finalização da etapa descrita anteriormente foi redigido o Capítulo 2 - Inteligência Artificial na Geração de Escalas Horárias. Logo após, deu-se início à etapa de especificação do sistema, a qual definiu as ferramentas que foram utilizadas para a sua implementação (linguagem, banco de dados, estrutura do Algoritmo Genético, entre outras), bem como a sua modelagem, resultando na redação do Capítulo 3 (Modelagem do Sistema). A partir da modelagem do sistema, o mesmo foi implementado e passou pelos testes necessários à sua validação pelo HGMTR. Por fim, foram redigidas as etapas finais do trabalho: o Capítulo 4 (Apresentação do Sistema), descrevendo todo o processo de implementação realizado; o Capítulo 5, detalhando os testes e resultados da aplicação do sistema no HGMTR; as Considerações Finais (Capítulo 6), incluindo sugestões para futuros trabalhos; e o artigo científico, o qual visa à publicação do trabalho.

17 5 2 INTELIGÊNCIA ARTIFICIAL NA GERAÇÃO DE ESCALAS HORÁRIAS Este capítulo apresenta a Inteligência Artificial, descrevendo seu histórico, principais conceitos e aplicação na geração de escalas horárias. Buscou-se também mencionar alguns trabalhos correlatos estudados, os quais contribuíram para a obtenção do embasamento teórico necessário para o desenvolvimento deste trabalho. 2.1 Inteligência Artificial: Histórico e Conceitos Desde a criação dos computadores, as pessoas os viam com desconfiança, certas de que seriam substituídas no exercício de suas funções. Então os fabricantes investiram em propagandas com o intuito de popularizar seu uso, o que ajudou a mostrar que a maior virtude destes ditos cérebros eletrônicos estava justamente na sua burrice, pois seriam extremamente úteis apenas no exercício de tarefas repetitivas, automatizando muitos dos seus processos (BARRETO, 2001). Desde sua primeira menção oficial, na conferência de verão de Dartmouth em 1956, a Inteligência Artificial (IA) tem gerado polêmica, dada a impossibilidade de uma definição formal, visto que primeiro seria necessária uma definição para a própria inteligência, definição esta que tem gerado o desenvolvimento de diversos livros acerca do assunto. Seus estudos, porém, herdam conceitos tão antigos quanto à lógica, pois está embasada em idéias filosóficas, científicas e tecnológicas (BITTENCOURT, 2001). Porém uma definição concreta padece do fato de que a inteligência em si não é muito bem definida ou entendida. Apesar de se reconhecer um comportamento inteligente quando ele é visto, é muito improvável que alguém seja capaz de definir inteligência de uma maneira que ajude na avaliação de um programa de computador

18 6 6 teoricamente inteligente (LUGER, 2004). Muitos tentaram definir a IA, como por exemplo, Barr e Feigenbaum 1 (apud BITTENCOURT, 2001) que dizem Inteligência Artificial é a parte da ciência da computação que compreende o projeto de sistemas computacionais que exibam características associadas, quando presentes no comportamento humano, à inteligência, já para Haugeland 2 (apud RUSSEL e NORVIG, 2004), O novo e interessante esforço para fazer os computadores pensarem... máquinas com mentes, no sentido total e literal, mas uma das definições mais aceitas devido ao fato de não atribuir inteligência às máquinas vem de Charniak e McDermmot 3 (apud RUSSEL e NORVIG, 2004) que define IA como o estudo das faculdades mentais pelo uso de modelos computacionais. Porém, ainda não se tem uma definição conclusiva a respeito do termo IA. Inclusive, poucos pesquisadores importantes acreditam que venha a surgir alguma conclusão significativa a respeito disso (RUSSEL e NORVIG, 2004). 2.2 Paradigmas da Inteligência Artificial A IA se ocupa da resolução de problemas e para tal é necessário conhecimento sobre o problema e técnicas de manipular tal conhecimento para se obter a solução. Dependendo da abordagem adotada, a forma de adquirir e manipular o conhecimento se difere (BARRETO, 2001) Inteligência artificial simbólica IAS Segundo Barreto (2001, p.22), A IAS deve ser usada quando o problema é bem definido, e que se tenha uma boa idéia de como ele seria resolvido e que seja explícito o modo de se achar a solução.. A linha simbólica segue a tradição lógica e é aplicada no ramo dos sistemas especialistas, que tem como o objetivo simular o comportamento de um especialista 1 A. BARR and E.A. FEIGENBAUN, editors. The Handbook of Artificial Intelligence, volume I-II. William Kaufmann nc., Los Altos, California, HAUGELAND, J.(Ed.). (1981) Mind Design. MIT Press, Cambridge, Massachusetts.

19 7 humano ao resolver problemas em seu domínio específico, também é muito utilizada nas técnicas de busca heurística, porém seu uso leva à chamada explosão combinatória onde memória e tempos necessários para se encontrar a solução crescem exponencialmente com o tamanho do problema (BITTENCOURT, 2001) Inteligência Artificial Conexionista - IAC O conexionismo, também conhecido como Redes Neurais, é uma das duas grandes linhas de pesquisa da IA e tem por objetivo investigar a possibilidade de simulação de comportamentos inteligentes através de modelos baseados na estrutura e funcionamento do cérebro humano. Em 1956, o livro publicado após o encontro em Darthmounth College já continha um artigo a respeito de redes neurais, porém seus primeiros trabalhos datam de No entanto, devido principalmente a falta de computadores suficientemente potentes suas pesquisas não progrediram, renascendo na década de 80 (BITTENCOURT, 2001). Redes Neurais são muito aplicadas no reconhecimento de padrões em geral (visão computacional, reconhecimento de voz, impressão digital, etc), previsão desde variação de carga elétrica até cotações de bolsa de valores e controle de processos Inteligência Artificial Evolucionária - IAE A Inteligência Artificial Evolucionária engloba métodos computacionais inspirados na teoria da evolução natural formalizada por Charles Darwin. Tem seus algoritmos baseados nos mecanismos de seleção natural das espécies. A maior parte dos algoritmos evolutivos utiliza principalmente os operadores genéticos como mecanismos básicos governando a evolução, sendo que os mais comuns são cruzamento e mutação (BARRETO, 2001). 2.3 Algoritmos Genéticos Os algoritmos genéticos são o ramo mais conhecido da Computação 3 CHARNIAK,E,andMcDERMOTT,D.(1985).IntroductiontoArtificialIntelligence.AdissonWeslley,Reading,Mass

20 8 Evolucionária (CE) e se concentram na teoria da evolução e na genética. Nos algoritmos genéticos trabalha-se com um conjunto de indivíduos (população) no qual cada elemento é candidato a ser a solução desejada. O grau de aptidão de cada indivíduo é obtido através de uma função de avaliação. A próxima geração é uma evolução da anterior e para que isso ocorra, os mais aptos devem possuir maior probabilidade de serem selecionados para dar origem à nova geração (BARRETO, 2001) Funcionamento de um algoritmo genético Para que um Algoritmo Genético chegue a sua solução é necessário que este siga alguns passos básicos, tais como: geração da população inicial, validação dos elementos da população e análise de convergência e geração da nova população através da aplicação de operadores genéticos nos cromossomos selecionados como os mais bem adaptados (BITTENCOURT, 2001; BARRETO, 2001). a) Geração da população inicial Criação de uma população de soluções, na qual os indivíduos tenham uma possível solução para o problema proposto. O número de elementos que compõe a população depende muito da experiência do usuário e do seu conhecimento prévio sobre a função a ser otimizada. A população inicial não necessariamente precisa ser gerada aleatoriamente, tendo em vista que o objetivo é gerar uma população inicial onde se acredita conter a solução. Exemplificando o exposto acima, o Quadro 1 apresenta um exemplo onde foram gerados aleatoriamente 4 cromossomos, os quais comporiam a população inicial de um algoritmo genético implementado para gerar o horário de trabalho semanal de médicos num determinado estabelecimento assistencial de saúde. achusetts.

21 9 QUADRO 1 - Exemplo de População Inicial Crom. Segunda Terça Quarta Quinta Sexta Sábado Domingo 1 Médico1 Médico1 Médico4 Médico3 Médico5 Médico3 Médico5 2 Médico2 Médico3 Médico5 Médico3 Médico6 Médico5 Médico7 3 Médico7 Médico2 Médico3 Médico2 Médico5 Médico1 Médico4 4 Médico6 Médico1 Médico1 Médico2 Médico6 Médico7 Médico5 Analisando-se o Quadro anterior, pode-se verificar que, no caso de cada um dos 7 médicos terem que ocupar um dia da semana, a geração aleatória da população inicial não necessariamente apresentaria uma possível solução, já que até o momento o indivíduo não foi avaliado para se determinar sua proximidade da solução. b) Avaliação/Validação dos elementos da população e análise de convergência Avaliação é o processo onde cada elemento da população é exposto à função de avaliação ou função objetivo e, ao final, é classificado de acordo com sua adaptação a esta função. Analisar a convergência significa verificar o desempenho da população, de acordo com a classificação dos seus cromossomos, e comparar com o objetivo buscado. No caso de proximidade aceitável, diante de critérios definidos pelo usuário, pode-se finalizar o processo, validando o cromossomo melhor classificado como resultado da busca. Verifica-se a convergência do Algoritmo Genético à medida que se identificam resultados mais próximos do objetivo a cada população gerada. O Quadro 2 esboça um exemplo de avaliação dos cromossomos para a geração descrita no Quadro 1 QUADRO 2 - Exemplo de avaliação de cromossomos Cromossomo Nota ou Função de Avaliação (FA) = = = =20 No exemplo do Quadro 2, cada cromossomo recebeu a nota máxima 50 e a

22 10 cada repetição diária médica descontou-se 15 pontos do cromossomo. Dessa forma, observa-se que não foi possível se encontrar uma solução perfeita, pois para este caso não seria aceito nenhum desconto, já que nenhum médico poderia trabalhar mais que um dia na semana. c) Geração da Nova População Como resultado da avaliação dos cromossomos de uma população obtém-se o grau de aptidão de cada indivíduo, ou seja, o quão próximo do objetivo ele se encontra. Com o grau de aptidão de cada cromossomo da população, parte-se, então, para a geração da nova população, com base nos conceitos da genética evolucionária. Seleção O processo de seleção tem início após a avaliação da população e tem por objetivo fazer com que somente os indivíduos mais bem adaptados sejam escolhidos para dar origem à nova população. O processo de avaliação fornece aos elementos da população um grau de adaptação que é utilizado pela etapa de seleção. Há muitos métodos para selecionar os cromossomos que darão origem a próxima população, sendo que um dos mais utilizados é o método da roleta (simples ou ponderada). Na roleta simples (RS) os indivíduos tem a probabilidade de serem sorteados de acordo com sua aptidão. Esta probabilidade é definida através do percentual que a sua nota representa comparada ao somatório das notas da população. Ou seja, dividese uma roleta entre os cromossomos de acordo com os seus percentuais de aptidão, aqueles com maior percentual certamente terão mais chances de serem escolhidos. A Tabela 1 exemplifica o método da roleta simples para os valores de avaliação do Quadro 2. A Figura 1 ilustra como seria a distribuição dos cromossomos em uma roleta simples e suas respectivas chances de seleção.

23 11 TABELA 1 - Exemplo de seleção por roleta simples Cromossomo Função de Avaliação Percentual 1 5 6,25% ,00% ,75% ,00% Total A roleta ponderada (RP) também apresenta os indivíduos ordenados conforme seu desempenho, porém, para evitar que alguns indivíduos monopolizem a descendência, cada indivíduo recebe uma nota, reduzindo a distância entre eles. O pior cromossomo, aquele que possui a maior distância do objetivo, recebe nota igual a 1, o segundo pior recebe nota igual a 2, e assim por diante até que o melhor receba nota igual ao número de cromossomos. FIGURA 1 - Exemplo de Roleta Simples O Quadro 3 exemplifica o método da roleta ponderada para os valores de avaliação do Quadro 2. A Figura 2 ilustra como seria a distribuição dos cromossomos em uma roleta e suas respectivas chances de seleção, levando em consideração a nota recebida.

24 12 QUADRO 3 - Exemplo roleta ponderada Cromossomo Função de Avaliação Nota FIGURA 2 - Exemplo de Roleta Ponderada Outra técnica bastante usada na seleção dos cromossomos é a utilização do operador elitista. Este operador força a cópia dos melhores cromossomos de cada geração para a geração seguinte, com a intenção de garantir que os melhores indivíduos da população passem para a nova geração, reduzindo assim o efeito aleatório do processo seletivo. Manipulação Genética A manipulação genética é feita através da aplicação de operadores genéticos (cruzamento e/ou mutação), a fim de se obter os indivíduos da próxima geração. O cruzamento é feito sobre os cromossomos mais evoluídos de acordo com a etapa de seleção e se dá pela associação destes cromossomos (pais) resultando em dois novos cromossomos (filhos) com características herdadas destes dois primeiros. Para tanto, geram-se números aleatórios para a definição da ocorrência ou não do

25 13 cruzamento e aplica-se uma das técnicas de cruzamento existentes, como por exemplo, o cruzamento por um ponto de corte e o cruzamento uniforme. Para o cruzamento por um ponto de corte é selecionado aleatoriamente um gene, o qual servirá como ponto de corte do cromossomo. Logo depois, a carga genética dos cromossomos escolhidos para o cruzamento é trocada e dois cromossomos descendentes são gerados (Figura 3). FIGURA 3 - Cruzamento por um Ponto de Corte Já o cruzamento uniforme efetua uma maior mistura da carga genética dos pais para os seus descendentes. Para tanto, é feita uma leitura gene a gene de cada um dos pais e estabelecido aleatoriamente se esse gene será copiado para o descendente em questão ou se o gene copiado será o correspondente (mesma posição) do outro cromossomo pai (Figura 4). FIGURA 4 - Exemplo de Cruzamento de Cromossomos

26 14 Como poder ser visto na Figura 4, como auxílio ao cruzamento uniforme, pode ser utilizado um vetor do mesmo tamanho do cromossomo, o qual conterá números binários aleatórios. Assim, para gerar o cromossomo C (primeiro descendente) quando o valor binário for igual a 0, o sistema copia a carga genética do gene em questão do cromossomo A (primeiro pai) para o gene de posição equivalente no cromossomo C. Caso o valor binário seja igual a 1, o sistema copia a carga genética de B (segundo pai) e armazena na posição equivalente no cromossomo C. O processo é feito de forma inversa para gerar o cromossomo D (segundo descendente). Já o operador genético de mutação, utilizado para evitar a estagnação da população mesmo depois do cruzamento, também apresenta várias possíveis técnicas, dentre elas, a mutação por inversão e a mutação por permutação. Para a mutação por inversão é determinado um número aleatório (entre 0 e 1) para cada bit (gene) de cada cromossomo. Esse número é comparado com a probabilidade de mutação definida pelo usuário e, se o número aleatório gerado for menor que o estipulado pelo usuário efetua-se a mutação, caso contrário, repete-se o processo com o próximo bit até que o processo seja terminado e todos os bits sejam analisados (Figura 4). FIGURA 5 - Mutação por Inversão Para a mutação por permutação também é determinado um número aleatório (entre 0 e 1) para cada bit de cada cromossomo, a fim de determinar quais deles

27 15 sofrerão mutação. No entanto, para os genes escolhidos para mutação, será obtido aleatoriamente um outro gene do mesmo cromossomo para que suas cargas genéticas sejam trocadas (Figura 6). FIGURA 6 - Mutação por Permutação Aplicação de Algoritmos Genéticos na Geração de Escalas Horárias O processo de geração de escalas horárias é complexo, demorado e de suma importância para qualquer espécie de instituição que necessite de uma escala de funcionários, porém esta importância é maior falando-se de instituições médicas onde a presença de um profissional é obrigatória. Analisando-se trabalhos anteriores, tais como os de Cheang (2003), Freitas et. al (2007) e Lourenço et. al (2000) comprova-se que a técnica de AG tem demonstrado maior eficácia na realização desta tarefa. Esta análise auxiliará no processo de implementação deste trabalho e serão aproveitados ao máximo. Um dos principais trabalhos, desenvolvidos na Universidade do Planalto Catarinense, estudado foi o de Borges (2007), por ser o trabalho mais recente na área de timetabling, além do trabalho de Santos (2004) por tratar-se de um sistema feito também feito para um

28 16 Estabelecimento Assistencial de Saúde. 2.4 Conclusão A partir do estudo da Inteligência Artificial, mais especificamente da técnica de Algoritmos Genéticos, mais os erros e acertos dos trabalhos anteriores, pôde-se encontrar os parâmetros que apresentam os melhores resultados, assim a modelagem do Algoritmo Genético que cumpre o objetivo principal do trabalho se fez possível.

29 17 3 MODELAGEM DO SISTEMA Neste capítulo é apresentada a modelagem do sistema, especificando-se as ferramentas utilizadas para o seu desenvolvimento (linguagens, banco de dados, etc), bem como a estrutura do algoritmo genético implementado. 3.1 Especificação do sistema O sistema possui dois módulos principais, um voltado para a plataforma desktop e outro voltado para a plataforma web. O módulo desktop é responsável pelos cadastros e geração da grade de plantões através do algoritmo genético, bem como da grade de sobreaviso, através de uma busca no Banco de Dados. Já o módulo web é responsável pelo cadastro das indisponibilidades médicas pelo usuário e disponibilização das grades (plantão e sobreaviso) geradas para consulta dos mesmos. Dessa forma, a arquitetura do sistema pode ser ilustrada conforme mostra a Figura 7. FIGURA 7 - Arquitetura do sistema.

30 Módulo Desktop O módulo desktop, desenvolvido através da linguagem Java (IDE Netbeans), é o responsável por gerar toda a grade horária (plantão e sobreaviso) de um determinado estabelecimento de assistência médica e, para isso, conta com cadastros de médicos, feriados e compromissos: Cadastro de médicos: Além dos dados pessoais dos médicos como nome e número do registro no Conselho de Medicina (CRM), é necessário informar o setor de lotação do médico (onde ele faz plantão) e a sua especialidade (para a qual ele fica de sobreaviso). Cadastro de feriados: Para que o sistema possa verificar se em determinada grade o medido trabalhará em feriados seguidos o cadastro destes feriados se faz necessário, onde o usuário informa a data e a descrição do referido feriado. Cadastro de indisponibilidades: Para que o sistema possa verificar se determinado médico possui disponibilidade em determinada data, torna-se necessário o cadastro de seus compromissos, tendo o usuário que informar a data, o período e a descrição do referido compromisso. As informações geradas a partir destes cadastros são armazenadas no banco de dados, utilizando-se do Sistema Gerenciador de Banco de Dados (SGBD) SQLServer, conforme mostra o modelo lógico ilustrado na Figura Módulo Web Para o módulo web utilizou-se a linguagem C# (Visual Studio), onde será possível para o médico cadastrar suas indisponibilidades e, posteriormente, visualizar os horários para os quais este foi escalado. A partir do cadastro das indisponibilidades no Banco de Dados (SQLServer) o módulo desktop poderá gerar a grade de plantões respeitando todas as restrições impostas para o Algoritmo Genético.

31 19 FIGURA 8 - Modelo lógico do banco de dados. 3.2 Estrutura do Algoritmo Genético Cada cromossomo representa uma solução, ou seja, uma grade de horários de plantões para determinado setor. Assim, criou-se a classe Solução e cada objeto solução por sua vez contém uma matriz representando a grade, onde cada linha representa um período do dia e cada coluna um dia do mês (Figura 7). O valor inserido na matriz é o identificador do profissional conforme inserido no banco de dados. Além de uma matriz representando a grade, cada objeto solução possui também os seguintes atributos: Função de Avaliação: para a nota gerada a partir da função de

32 20 avaliação; Médicos: ArrayList para o controle de horas médicas; Contadores dos descontos de cada avaliação; Variável booleana para definição do processo de mutação; Métodos que fazem o controle do FA e dos descontos nas avaliações. FIGURA 9 - Matriz representativa da grade. Para a geração do quadro de horário dos médicos, a execução do algoritmo genético foi dividida em 3 etapas: geração da população inicial, avaliação/validação dos elementos da população e geração da nova população através da aplicação de operadores genéticos nos cromossomos selecionados como os mais bem adaptados Geração da população inicial A geração de 40 indivíduos da população inicial leva em consideração 7 tipos diferentes de horários, que são: "Manhã" = das 08:00 às 12:00; "Tarde" = das 12:00 às 16:00; "Noite" = das 16:00 às 20:00; "Tarde-Noite" = das 12:00 às 20:00; "Plantão Dia" = das 08:00 às 20:00; "Plantão Noite" = das 20:00 às 08:00; "Plantão 24h" = das 08:00 às 08:00. Analisando-se estes horários notam-se 4 diferentes cargas horárias: 4, 8, 12 e 24 horas. Dessa forma, já para a geração da população inicial, o sistema deve controlar a determinação das cargas horárias atribuídas a cada médico em cada dia de trabalho,

33 21 bem como da carga horária total do mês, a qual deve ser uniformemente distribuída entre os médicos de cada setor Avaliação/Validação dos elementos da população Para se determinar o quão perto da solução a grade está, levam-se em consideração os problemas a seguir: Períodos Manhã-Tarde (MT), Noite-Madrugada (NM) e Madrugada- Manhã (MM): não existe a possibilidade de combinação dos períodos Manhã e Tarde, nem dos períodos Noite e Madrugada, e Madrugada e Manhã. Assim, um médico trabalha no período MT somente se for escalado para o Plantão Dia (Manhã, Tarde e Noite) e no período NM somente se for escalado para o Plantão 24 h. Já o período MM não apresenta nenhuma possibilidade; Ocorrência de janelas (períodos livres entre períodos ocupados num mesmo dia ou dias adjacentes): não devem existir escalas nas quais o horário de trabalho do médico esteja intercalado com horário livre. Ou seja, caso o médico esteja escalado para trabalhar no horário Manhã, o mesmo não poderá estar escalado para trabalhar também no horário Noite do mesmo dia. Assim, algumas possíveis janelas seriam: Manhã-Noite, Manhã-Madrugada e Tarde-Madrugada; Disponibilidade médica: um médico não pode ser escalado para um horário no qual possui indisponibilidade. Finais de semana e feriados: é desejável também que determinado médico não seja escalado para finais de semana e feriados seguidos. Horas Trabalhadas: Tendo em vista que cada médico, por contrato, deve trabalhar uma determinada quantidade de horas por mês e levando-se em conta o número de horas existente num mês e o número de médicos pertencentes a cada departamento, o sistema procura distribuir uniformemente os médicos de acordo com o valor resultante de ((24*Dias do mês) / Número de médicos do setor). Para o restante das horas, cada Estabelecimento Assistencial de Saúde

34 22 estabelece uma maneira de compensação. Assim, o algoritmo percorre cada indivíduo da população e, a cada problema/restrição encontrado, exceto para o de horas trabalhadas, desconta-se 5 pontos do valor inicial de 1000 pontos (função de avaliação FA), determinando então o quão perto da solução a grade (indivíduo) está. O indivíduo perfeito, ou solução perfeita, é considerado aquele que não sofre descontos no decorrer do processo de avaliação, ou seja, aquele que continue com FA = Para cada restrição de quantidade de horas trabalhadas, a penalidade é feita de maneira que se desconte do valor de FA o módulo da diferença entre a quantidade de horas almejada e a quantidade encontrada. Tendo em mãos a classificação dos cromossomos, basta compará-las com o objetivo buscado. Se o objetivo for alcançado (FA = 1000), pode-se finalizar o processo e apresentar o cromossomo como resultado do AG. Caso não sejam encontrados cromossomos com classificação máxima, num total de 1000 iterações (gerações), encerra-se o processo e o cromossomo com melhor classificação é validado como resultado do Algoritmo Genético Geração da nova população Por fim são aplicados os operadores genéticos que darão origem a novas possibilidades de soluções até que a solução perfeita seja encontrada ou até que o número máximo de gerações seja alcançado. a) Seleção Após ter sido exposta à função de avaliação, a população tem seus melhores cromossomos selecionados para dar origem à nova população. De acordo com análise de trabalhos correlatos e testes apresentados no Capítulo 5, os métodos de seleção da roleta ponderada e elitismo apresentam de forma mais rápida e eficiente os resultados pretendidos. Portanto, estes foram escolhidos, sendo que para o elitismo foi utilizada uma taxa de 20%.

35 23 b) Cruzamento Após os cromossomos serem selecionados, estes se cruzam para que deem origem às novas possibilidades de solução para o problema. Primeiramente os cromossomos selecionados pelo processo de elitismo são passados adiante, posteriormente os cromossomos selecionados pela roleta ponderada se cruzam, através do cruzamento uniforme, e criam a nova população. O cruzamento uniforme foi escolhido por apresentar melhores resultados conforme teste apresentado no Capítulo 5. c) Mutação Para o processo de mutação do AG implementado neste sistema, cria-se um número aleatório de 0 a 100 para cada cromossomo da população. Dessa forma, não serão todos os cromossomos que sofrerão mutação, mas somente aqueles que tiverem seu número aleatório menor que o percentual pré-definido pelo sistema. Para este algoritmo o percentual definido foi 10%. A técnica de mutação escolhida foi a por permutação, conforme teste apresentado no Capítulo O Sobreaviso Após a geração das grades horárias dos plantões de todos os setores do EAS, pode ser gerada a grade de sobreaviso. O sobreaviso pode ser entendido como um plantão sem a presença do médico no EAS. Ou seja, durante o período de sobreaviso o médico não precisa estar no EAS, mas precisa estar disponível e comparecer no mesmo assim que for chamado. Geralmente, a escala de sobreaviso é feita por especialidade e não por setor, o que garante que pelo menos um médico de cada especialidade esteja disponível para o EAS em todos os períodos do dia. Dessa forma, como um médico não pode estar

36 24 escalado para plantão e sobreaviso ao mesmo tempo, a partir do momento em que as grades de plantões estiverem geradas, o sistema partirá para um busca no Banco de Dados a fim de gerar a grade horária do sobreaviso. 3.4 Conclusão Este capítulo apresentou a modelagem do sistema que irá cumprir as metas propostas no presente trabalho. Este sistema foi possível graças ao estudo da técnica de Algoritmos Genéticos. A partir do estudo deste capítulo, foi possível a implementação da ferramenta capaz de gerar as grades horárias médicas e, assim, cumprir os objetivos propostos.

37 25 4 APRESENTAÇÃO DO SISTEMA Este capítulo apresenta os módulos de entrada e saída de dados, e a implementação do algoritmo genético e da busca para geração da grade horária de plantões e sobreavisos, respectivamente. O acesso aos módulos de entrada e saída bem como a geração das grades é feito a partir da tela principal conforme mostra a Figura 10. FIGURA 10 - Tela principal do sistema.

38 Módulo de entrada de dados Os principais cadastros para proporcionar a geração das grades são os de feriados, médicos e indisponibilidades conforme mostram as Figuras 11, 12 e 13. FIGURA 11 - Cadastro de Feriados. FIGURA 12 - Cadastro de Médicos.

39 27 FIGURA 13 - Cadastro de indisponibilidades no módulo desktop. O cadastro de feriados (Figura 11) se faz necessário desde que cada cidade possui feriados locais diferentes, não permitindo assim que o sistema padronize todos os feriados existentes. Para o cadastro de médicos (Figura 12), o usuário deve fornecer o nome e número do registro no conselho regional de medicina (CRM), bem como indicar a sua especialidade e setor de lotação dentre os já cadastrados no sistema. A tela de cadastro de indisponibilidades no sistema desktop (Figura 13) possibilita que o médico deixe previamente agendado no sistema algum compromisso do próximo mês, evitando que seu nome seja escalado para uma data/horário que não possa comparecer. Como pode ser observado, o sistema possibilita a seleção de um ou mais períodos indisponíveis, bem como o dia todo ou um período de dias, caso o médico entre em férias ou licença prêmio. Através do sistema web o médico tem a possibilidade de cadastrar as suas indisponibilidades (Figura 14), desde que esteja autenticado, além de poder cadastrar suas indisponibilidades o médico posteriormente

40 28 poderá visualizar através do módulo web também para quais horários este foi escalado para plantão e sobreaviso. FIGURA 14 - Cadastro de indisponibilidades no módulo web. 4.2 Implementação do AG Com base nas especificações do Algoritmo Genético explanadas no Capítulo 3, implementou-se a classe AlgGen, a qual é responsável pelo processo de geração das grades de horários de plantões a partir dos cadastros efetuados no módulo de entrada de dados. Na tela que antecede a geração em si (Figura 14), informa-se o mês, o ano e o setor ao qual a grade pertencerá.

41 29 FIGURA 15 - Tela que antecede a Geração das Grades. Com estas informações é instanciado um objeto da classe e, neste momento, já é gerada a população inicial conforme demonstram os Quadros 4 e QUADRO 4 - Método construtor da Classe AlgGen. public AlgGen(Calendar datageracao, int setor, int primeirodomingo, int primeirosabado) { this.datageracao = datageracao; this.ngenes = datageracao.getactualmaximum(calendar.day_of_month); this.setor = setor; this.primeirodomingo = primeirodomingo; this.primeirosabado = primeirosabado; gerarpopulacao(); Para a geração da população inicial é gerado um valor aleatório entre 0 e 3 que representará a carga horária escalada para o médico com menor carga horária total naquele momento. A busca pelos médicos com menor carga horária total, bem como o controle da atribuição de horas a cada um deles, são feitos através da função nextmedico(), a qual recebe a lista de médicos do setor atual e a carga horária a ser atribuída àquele médico da lista com menor carga horária total naquele mês (Quadro 6) QUADRO 5 - Trecho da geração da população inicial Método gerarpopulacao(). i = 0; while (i < npopulacao) { Solucao solucao = new Solucao(nGenes); solucao.setmedicos(medicos);

42 int[][] grade = new int[ngenes][periodosdia]; long seed=system.currenttimemillis(); Random random = new Random(seed); int j = 0; while (j < ngenes) { int carga = random.nextint(4); if (carga == 3) { Medico med = nextmedico(solucao.getmedicos(), 4); int idmedico = med.getidmedico(); grade[j][0] = idmedico; med = nextmedico(solucao.getmedicos(), 8); idmedico = med.getidmedico(); grade[j][1] = idmedico; grade[j][2] = idmedico; med = nextmedico(solucao.getmedicos(), 12); idmedico = med.getidmedico(); grade[j][3] = idmedico; Dessa forma, se a carga sorteada for igual a 3 (8 horas), conforme mostrado no Quadro 5, serão buscados os 3 médicos com menor carga horária total naquele mês e atribuído ao primeiro médico o horário da manhã (4 horas), ao segundo os horários da tarde e noite (8 horas) e ao último o horário da madrugada (12 horas). Da mesma maneira, se a carga sorteada for igual a 2 (24 horas), será buscado o médico com menor carga horária total e atribuídos a ele os quatro horários do dia (manhã, tarde, noite e madrugada). Com a carga igual a 1 (12 horas), serão buscados dois médicos e atribuídos a um deles os três primeiros horários (manhã, tarde e noite) e para o outro o horário da madrugada, totalizando 12 horas para cada um. Por último, caso a carga seja igual a 0 (4 horas), serão buscados os 4 médicos com menor carga horária total e atribuídos a cada um deles um dos quatro horários do dia QUADRO 6 - Função nextmedico(). private Medico nextmedico(list<medico> medicos, int horas) { Medico med = medicos.get(0); medicos.remove(0); int i = 0; while (i < medicos.size()) { if (med.gethoras() > medicos.get(i).gethoras()) { medicos.add(med); med = medicos.get(i); medicos.remove(i); else { i++;

43 med.sethoras(med.gethoras() + horas); medicos.add(med); return med; Utilizando esse mecanismo para a geração da população inicial, consegue-se que os indivíduos criados inicialmente já possuam seus genes populados de maneira aceitável e com controle de horas iniciado, aumentando as chances de encontrar a solução considerada ótima. Estando o objeto da classe AlgGen instanciado, o método principal da classe, gerargrade(), é chamado (Quadro 7) QUADRO 7 - Método gerargrade(). avaliarcromossomos(); int i = 0; while (melhorsolucao.getfa() < FA i < iteracoes) { efetuarcruzamento(8); efetuarmutacao(10); populacao = novapop; avaliarcromossomos(); i++; O método gerargrade() inicia chamando um outro método, avaliarcromossomos(), a fim de avaliar a população inicial gerada, pois a melhor solução já pode ser um dos indivíduos desta população. Logo após esta avaliação, geram-se novas populações através da aplicação dos operadores genéticos (cruzamento e mutação) e avaliam-se as mesmas até que se encontre a solução perfeita ou que o número máximo de iterações seja executado. Logo, se a solução perfeita (FA = 1.000) não for encontrada, o algoritmo retorna a solução que menos penalidades sofreu na avaliação, ou seja, que menos problemas apresentou diante das restrições implementadas na função de avaliação Avaliação dos Cromossomos Conforme explicado no Capítulo 3, durante a avaliação das possíveis soluções é necessário verificar a existência de certos problemas, tais como: Períodos Manhã-Tarde, Noite-Madrugada e Madrugada-Manhã;

44 32 Ocorrência de janelas (períodos livres entre períodos ocupados num mesmo dia ou dias adjacentes); Disponibilidade médica; Finais de semana e feriados seguidos; Quantidade de Horas Trabalhadas; O Quadro 8 apresenta o trecho do código referente à verificação da existência de períodos Manhã-Tarde do método avaliarcromossomo(). Seguindo a mesma idéia e, portanto, não apresentados aqui, foram implementados códigos para verificação de períodos Noite-Madrugada e Madrugada-Manhã QUADRO 8 - Avaliação período Manhã-Tarde. int j = 0; while (j < ngenes) { if (grade[j][0] == grade[j][1]) { if (grade[j][0]!= grade[j][2]) { if (grade[j][0]!= grade[j][3]) { solucao.descontafa(5); solucao.incrementmanhatarde(); j++; Para buscar as possíveis janelas em uma grade (Manhã-Noite, Manhã- Madrugada e Tarde-Madrugada), foram implementados códigos tais como o que se apresenta no Quadro 9, aplicando, portanto, penalidade àquelas grades que apresentem horários livres entre horários escalados para determinado médico QUADRO 9 - Avaliação janela Manhã-Noite. j = 0; while (j < ngenes) { if (grade[j][0]==grade[j][2] && grade[j][0]!=grade[j][1]) { solucao.descontafa(5); solucao.incrementmanhanoite(); j++;

45 33 Para as verificações de disponibilidades e feriados seguidos se faz necessário o carregamento de um ArrayList contendo os mesmos dados cadastrados no sistema. Após o carregamento dos ArrayLists pode-se efetuar as verificações acerca destas duas especificações (Quadros 10 e 11) QUADRO 10 - Trecho código avaliação de disponibilidades. int j = 0; while (j < comps.size()) { int medico = comps.get(j).getidmedico(); int periodo = (comps.get(j).getperiodo()); int dia = (comps.get(j).getdia()) - 1; if (medico == grade[dia][periodo]) { solucao.descontafa(5); j++; Assim como demonstrado na Figura 16 e no Quadro 12, o algoritmo verifica se o médico selecionado está escalado para trabalhar em fins de semana seguidos, passando somente pelos domingos seguidos, somente pelos sábados seguidos e por sábados e domingos no mesmo final de semana e intercalados. O Quadro 12 apresenta somente os trechos de código que fazem a verificação dos sábados e domingos do mesmo final de semana e dos domingos seguidos, no entanto, as outras verificações seguem a mesma lógica. FIGURA 16 - Verificação fins de semana QUADRO 11 - Trecho código avaliação de feriados seguidos. j = 0; while (j < npopulacao) { int k = 1; while (k < feriados.length) { int l = 0; while (l < periodosdia) { int m = 0; while (m < periodosdia) {

46 if (grade[feriados[k - 1]][l] == grade[feriados[k]][m]) { solucao.descontafa(5); j++; QUADRO 12 - Trecho código avaliação de fins de semana. j = primeirodomingo; while ((j + 7) < ngenes) { int k = 0; while (k < periodosdia) { int l = 0; while (l < periodosdia) { if (grade[j][k] == grade[j + 7][l]) { solucao.descontafa(5); solucao.incrementfinsdesemana(); l++; k++; j = j + 7; j = primeirosabado; while ((j + 7) < ngenes) { int k = 0; while (k < periodosdia) { int l = 0; while (l < periodosdia) { if (grade[j][k] == grade[j + 7][l]) { solucao.descontafa(5); solucao.incrementfinsdesemana(); l++; k++; j = j + 7; A quantidade de horas do mês deve ser dividida de maneira uniforme entre os médicos de cada setor, já que o contrato de trabalho é igual para todos eles. Assim, o controle das horas dos médicos também passa pelo processo de avaliação da grade, conforme mostrado no Quadro 13. Nas linhas 1, 2 e 3 é feito o ordenamento do ArrayList a partir do número de horas individuais geradas na criação da população. Nas linhas 9 a 18 verifica-se se o médico foi escalado para trabalhar 24 horas a mais ou a menos da média obtida na linha 4. Caso isto ocorra desconta-se do FA a diferença

47 35 de horas e incrementa-se o contador do controle QUADRO 13 - Trecho código controle de horas trabalhadas. solucao.setmedicos(medicos); solucao.counthoras(); solucao.orderbyhoras(); int horaspormedico=(24*ngenes)/solucao.getmedicos().size(); j = 0; while (j < solucao.getmedicos().size()) { Med medico = solucao.getmedicos().get(j); int horastrabalhadas = medico.gethoras(); if (horastrabalhadas < horaspormedico - 24) { int diferenca = horaspormedico - horastrabalhadas; solucao.descontafa(diferenca); solucao.incrementcontrolehoras(); if (horastrabalhadas > horaspormedico + 24) { int diferenca = horastrabalhadas - horaspormedico; solucao.descontafa(diferenca); solucao.incrementcontrolehoras(); j++; Aplicação dos operadores genéticos Após o término do processo de avaliação da população iniciam-se os processos de cruzamento uniforme e mutação que darão origem à nova população. Estes processos são efetuados a partir dos métodos efetuarcruzamento() e efetuarmutacao(). a) Cruzamento O processo de cruzamento (Quadros 14, 15 e 16) inicia-se efetuando a criação de um novo Array nas mesmas dimensões da população inicial chamado novapop. Este já recebe os 8 melhores indivíduos de acordo com a ordenação dos seus FA s, a fim de suprir a parcela de 20% referente ao elitismo (Quadro 14) QUADRO 14 - Trecho método efetuarcruzamento(). int i = 0; while (i < npopulacao) { int j = i; while (j < npopulacao) {

48 if (populacao[j].getfa() > populacao[i].getfa()) { Solucao aux = populacao[i]; populacao[i] = populacao[j]; populacao[j] = aux; j++; i++; novapop = new Solucao[nPopulacao]; i = 0; while (i < npopulacao) { novapop[i] = new Solucao(nGenes); novapop[i].setmedicos(medicos); novapop[i].setgrade(new int[ngenes][periodosdia]); i++; i = 0; while (i < elite) { Solucao sol = new Solucao(nGenes); int[][] grade = populacao[i].getgrade(); sol.setgrade(grade); sol.setmedicos(medicos); novapop[i] = sol; i++; Após a parte referente ao elitismo parte-se para o processo de seleção (Quadro 15) com o método da roleta ponderada e todos os itens necessários para que isto ocorra, tais como: Ordenação da população de acordo com os FA s dos indivíduos (linhas 1 a 7); Criação de array com as notas (linhas 8 a 14); Geração de um outro array com números randômicos a fim de selecionar os indivíduos que irão cruzar (linha 15); Seleção dos casais (linhas 16 a 24) QUADRO 15 - Trecho método efetuarcruzamento(). int[] notas = new int[npopulacao - elite]; notas[0] = npopulacao - elite; i = 1; while (i < notas.length) { notas[i] = notas[i - 1] + ((npopulacao - elite) - i);

49 i++; Random random = new Random(System.currentTimeMillis()); int[] numsrandom = new int[npopulacao - elite]; i = 0; while (i < numsrandom.length) { numsrandom[i] = random.nextint(notas[notas.length - 1]); i++; int[] casais = new int[numsrandom.length]; i = 0; while (i < casais.length) { int j = 0; while (numsrandom[i] > notas[j]) { j++; casais[i] = j; i++; Logo após a seleção dos casais de cromossomos que deverão cruzar, vem o cruzamento em si (Quadro 16). Para tanto, é gerado um vetor de valores booleanos aleatórios a fim de implementar uma máscara para controlar os genes que serão transmitidos aos descendentes (linhas 1 a 10), conforme cruzamento uniforme explicado no Capítulo 2. O cruzamento dos cromossomos pais e geração dos seus descendentes pode ser visto nas linhas 11 a QUADRO 16 - Trecho método efetuarcruzamento(). boolean[][] mascara=new boolean[npopulacao-elite][ngenes]; i = 0; while (i < mascara.length) { int j = 0; while (j < mascara[i].length) { mascara[i][j] = random.nextboolean(); j++; i++; i = 1; while (i<npopulacao-elite) { int[][] gradepai1 = populacao[casais[i - 1]].getGrade(); int[][] gradepai2 = populacao[casais[i]].getgrade(); int[][] gradefilho1 = new int[ngenes][periodosdia]; int[][] gradefilho2 = new int[ngenes][periodosdia]; int j = 0; while (j < ngenes) { if (mascara[i - 1][j]) { gradefilho1[j] = gradepai1[j]; gradefilho2[j] = gradepai2[j];

50 else { gradefilho1[j] = gradepai2[j]; gradefilho2[j] = gradepai1[j]; j++; Solucao sol1 = null, sol2 = null; sol1 = new Solucao(nGenes); sol1.setgrade(gradefilho1); sol1.setmedicos(medicos); sol2 = new Solucao(nGenes); sol2.setgrade(gradefilho2); sol2.setmedicos(medicos); novapop[i - 1] = sol1; novapop[i] = sol2; i++; b) Mutação Na mutação (Quadro 17) é chamado um valor inteiro a partir de um objeto Random. Se este número for menor que a porcentagem pré-determinada de 10% a variável booleana muta do objeto novapop, no índice referido pela variável i, recebe o valor true, caso contrário recebe o valor false (linhas 1 a 11). Agora basta verificar se a variável booleana recebeu true no procedimento anterior e, caso verdadeiro, efetuar o processo de mutação, que consiste em sortear dois genes do individuo em questão e efetuar a troca da carga genética entre eles (linhas 12 a 27) QUADRO 17 - Método efetuarmutacao(). Random random = new Random(System.currentTimeMillis()); int i = 0; while (i < npopulacao) { int sorteio = random.nextint(100); if (sorteio < porcentagem) { novapop[i].setmuta(true); else{ novapop[i].setmuta(false); i++; int genesmutados = 0; i = 0; while (i < npopulacao) { if (novapop[i].ismuta()) { genesmutados++;

51 int[][] grade=novapop[i].getgrade(); int gene1=random.nextint(ngenes); int gene2=random.nextint(ngenes); int[] aux=grade[gene1]; grade[gene1]=grade[gene2]; grade[gene2]=aux; novapop[i].setgrade(grade); i++; 4.3 Implementação do Sobreaviso A classe AlgGen também é responsável pela geração das grades de sobreaviso a partir das escalas de plantões geradas, porém não utiliza a técnica de Algoritmos Genéticos conforme mostrado no trecho de código presente no Quadro 18. Os sobreavisos são gerados com base nas especialidades, para tanto é carregado inicialmente um ArrayList com as especialidades presentes no sistema. Tendo este ArrayList, o algoritmo busca todos os médicos da determinada especialidade e distribui estes médicos, verificando sua disponibilidade, em um Array simples já que para o sobreaviso não existe divisões de períodos. Após escalar o determinado médico para o dia em que este está disponível utilizando o método nextmedico(), o algoritmo contabiliza 24 horas na escala de sobreaviso, a fim de controlar o número máximo de horas que cada médico pode ser escalado. No momento em que este número de horas é ultrapassado o médico é eliminado da fila. Este processo é executado enquanto houverem médicos ou dias disponíveis para escala QUADRO 18 - Método gerarsobreaviso(). int i = 0; while (i < especialidades.size()) { int[] gradesobreaviso = new int[ngenes]; medicos.clear(); medicos = new MedicoDAO().getAll(especialidades.get(i)); if (medicos.size() > 1) { int j = 0; while (j < ngenes && medicos.size() > 0) { Medico med = medicos.get(0); medicos.remove(0); if (compdao.isdisponivel(med, (j + 1), comps)) { gradesobreaviso[j] = med.getidmedico(); med.addhoras(24);

52 if (med.gethoras() < (maxhorassobreaviso - 24)){ medicos.add(med); else { int l = 0; while ((!compdao.isdisponivel(med, (j + 1), comps)) && l < medicos.size()) { medicos.add(med); med = medicos.get(0); medicos.remove(0); l++; gradesobreaviso[j] = med.getidmedico(); med.addhoras(24); if (med.gethoras() < (maxhorassobreaviso - 24)){ medicos.add(med); j++; else { Medico med = medicos.get(0); medicos.remove(0); int j = 0; while (med.gethoras() < (maxhorassobreaviso - 24) && j < ngenes) { if (compdao.isdisponivel(med, j + 1, comps)) { gradesobreaviso[j] = med.getidmedico(); med.addhoras(24); j++; 4.4 Módulo de Saída de Dados O módulo de saída de dados na aplicação desktop é apresentado através da tela Visualizar Grade, no final o usuário seleciona determinada data e o sistema exibe que médicos estão escalados para os quatro períodos do dia. Também existe a possibilidade de consultar o número de horas que determinado médico está escalado para trabalhar no mês selecionado, conforme mostra a Figura 18. Já na aplicação web o médico tem acesso somente aos dias e períodos em que ele foi escalado no determinado mês (Figura 17).

53 41 FIGURA 17 - Tela de Visualização das Grades Geradas no módulo desktop FIGURA 18 - Tela de Visualização das Grades Geradas no módulo desktop 4.5 Conclusão Neste capítulo foi apresentado o Sistema Gerador de Grades Médicas em seus dois módulos web e desktop o qual teve sua modelagem explicada no Capítulo 3,

54 42 bem como as interfaces responsáveis pela alimentação e visualização dos dados que o sistema utiliza para a geração das escalas de plantões e sobreaviso, este primeiro utilizando-se de um Algoritmo Genético.

55 43 5 TESTES E RESULTADOS Este capítulo apresenta os testes efetuados afim de se aperfeiçoar o Algoritmo Genético melhorando assim os resultados obtidos, bem como da sua funcionalidade para implantação no EAS. 5.1 Estudo de caso Para teste e verificação da funcionalidade do sistema desenvolvido, o mesmo foi implantado no Hospital Geral e Maternidade Tereza Ramos (HGMTR), na cidade de Lages SC. Para tanto, algumas particularidades do Estabelecimento Assistencial de Saúde foram levadas em consideração: O HGMTR encontra-se organizado em 6 setores: Unidade de Terapia Intensiva, UTI Neo-Natal, Ginecologia, Cardiologia, Oncologia e Obstetrícia. Cada médico é vinculado a um dos setores do EAS, no qual deverá fazer seus plantões preenchendo uma carga horária mínima de quatro vezes o número de dias do mês, descontando os finais de semana. Ou seja, para meses com 4 semanas, por exemplo, um médico terá que realizar 4 horas X 5 dias X 4 semanas = 80 horas de plantões. Se, para preencher todos os dias do mês (inclusive finais de semana) com um médico de plantão, for necessário escalar mais do que 80 horas para algum deles, essas horas são contadas como horas extras. O importante é que nenhum setor fique sem médico em nenhum dos períodos do dia. Se não forem completadas as 80 horas para algum dos médicos, este

56 44 deverá ter a sua carga horária completada através das visitas que faz aos seus pacientes durante o mês. Este cronograma de visitas é feito pelo próprio médico. Os períodos disponibilizados para a escala de plantões são: Manhã (das 08:00 às 12:00), Tarde (das 12:00 às 16:00), Noite (das 16:00 às 20:00) e Madrugada (das 20:00 às 08:00). As possíveis combinações entre períodos são: Manhã-Tarde-Noite, Manhã-Tarde-Noite- Madrugada e Tarde-Noite. O sobreaviso do HGMTR é feito por especialidade e não por setor. Ou seja, na escala de plantão de um determinado setor, a cada período do dia, pode existir um médico de especialidade diferente trabalhando. Já na escala de sobreaviso sempre haverá um médico de cada especialidade disponível para o EAS. Dessa forma, um médico que esteja na escala de plantão do seu setor num determinado período não pode estar também na escala de sua especialidade no mesmo período. A carga horária disponibilizada para o sobreaviso é de, no máximo, 200 horas mensais para cada médico. Isso quer dizer que, se uma determinada especialidade possui poucos médicos, certamente ficarão dias sem médico de sobreaviso para tal. Para dias de semana o horário de sobreaviso é das 18:00h às 08:00h. Já nos finais de semana, o horário é das 08:00 às 08: Testes feitos durante o desenvolvimento do sistema No decorrer do desenvolvimento do sistema, foram feitos alguns testes a fim de definir qual a melhor opção dentro de algumas possibilidades que se tinha: while ou for?, roleta simples ou ponderada?, cruzamento por um ponto de corte ou cruzamento uniforme?, mutação por inversão ou por permutação?, Delphi, Java, C ou C#?

57 While ou for? Um teste de desempenho (velocidade em gerar resposta) foi feito envolvendo os laços de repetição while e for. O algoritmo para o qual foi computado o tempo de resposta através dos dois laços de repetição é apresentado utilizando-se do laço while no Quadro QUADRO 19 - Código com laço while. private void gerarpopulacao() { long tinicial=system.currenttimemillis(); int ngenes = 30; int i = 0; while (i < ) { int[][] grade = new int[ngenes][4]; int j = 0; while (j < ngenes) { int idmedico = nextmedico(); grade[j][0] = idmedico; idmedico = nextmedico(); grade[j][1] = idmedico; grade[j][2] = idmedico; idmedico = nextmedico(); grade[j][3] = idmedico; j++; i++; long tfinal=system.currenttimemillis(); JOptionPane.showMessageDialog(null, tfinal-tinicial); Executando-se o código utilizando o laço while 15 vezes obteve-se um tempo médio de 1126,66ms para a obtenção da resposta desejada. Já utilizando o laço de repetição for, foi necessário um tempo médio de 1197ms. Ou seja, através deste teste foi definida a utilização de laços while em todas as vezes que fosse necessário, já que este apresentou um tempo 5,87% menor que o outro para a geração de resposta Roleta Simples ou Ponderada? Para a seleção dos casais para o cruzamento genético foram testadas as roletas simples (Quadro 20) e ponderada. A roleta ponderada foi escolhida por

58 46 aumentar a chance de todos os cromossomos (indivíduos) de serem escolhidos para cruzamento, evitando a predominância de determinados indivíduos e, assim, permitindo a geração de grades mais variadas QUADRO 20 - Código com roleta simples. int[] soma = new int[npopulacao]; soma[0] = FAs[0]; for (int i = 1; i < npopulacao; i++) { soma[i] = soma[i - 1] + FAs[i]; int[] numsrandom = new int[npopulacao - elite]; i = 0; while (i < numsrandom.length) { i++; int[] casais = new int[npopulacao - elite]; i = 0; while (i < numsrandom.length) { int j = 0; while (numsrandom[i] > soma[j]) { j++; casais[i] = j; i++; Cruzamento por um ponto de corte ou Cruzamento uniforme? De acordo com o Quadro 21, foram testados dois tipos de cruzamento: por um ponto de corte e uniforme. O cruzamento por um ponto de corte dificultou a equiparação das cargas horárias dos médicos, ou seja, levava-se muito mais tempo para o algoritmo encontrar uma grade que estivesse de acordo com a restrição da carga horária. O cruzamento uniforme minimizou esse problema já que a chance de obtenção de grades com carga horária nula para algum dos médicos é bem menor QUADRO 21 - Código com cruzamento por ponto de corte. int[] pontosdequebra = new int[casais.length / 2]; i = 0; while (i < pontosdequebra.length) { pontosdequebra[i] = random.nextint(ngenes + 1); i++;

59 i = 0; while (i < pontosdequebra.length) { int j = 0; while (j < ngenes) { if (j < pontosdequebra[i]) { popnova[elite+i*2][j]=populacao[casais[i*2]][j]; popnova[elite+i*2+1][j]=populacao[casais[i*2+1]][j]; else { popnova[elite+i*2][j]=populacao[casais[i*2+1]][j]; popnova[elite+i*2+1][j]=populacao[casais[i*2]][j]; j++; i++; Mutação por inversão ou Mutação por Permutação? Foram testados dois tipos de mutação genética, sendo eles a mutação por inversão e a mutação por permutação. O Quadro 22 apresenta os códigos testados para esses dois tipos de mutação QUADRO 22 - Código com mutação por inversão. int[][] sofremutacao = new int[populacao.length][ngenes]; int i = 0; while (i < populacao.length) { int j = 0; while (j < ngenes) { sofremutacao[i][j] = random.nextint(100); j++; i++; i = 0; while (i < populacao.length) { int j = 0; while (j < ngenes) { if (sofremutacao[i][j] < porcentagem) { int med1 = nextmedico(medicos).getidmedico(); int med2 = nextmedico(medicos).getidmedico(); int med3 = nextmedico(medicos).getidmedico(); int med4 = nextmedico(medicos).getidmedico(); int[] cromonovo = new int[]{med1, med2, med3, med4; popnova[i][j] = cromonovo; j++; i++;

60 48 A mutação por inversão escolhia aleatoriamente outros médicos para substituírem os escalados para o dia em questão. Dessa forma, a carga horária dos médicos variava muito, ficando difícil encontrar uma grade que estivesse de acordo com esta restrição. Utilizando a mutação por permutação essa questão foi resolvida, desde que, efetuando a troca genética entre dois genes, as cargas horárias permanecem as mesmas, mudando apenas a data que o médico será escalado Delphi, Java, C ou C#? A fim de se analisar qual linguagem de programação seria mais adequada para a implementação do sistema fez-se teste com 4 linguagens de programação: Delphi, Java, C e C#, aplicando a mesma lógica pode-se obter os tempos de execução. Os códigos foram executados 15 vezes para a obtenção de uma média. O código em Delphi o qual possui seu trecho no Quadro 23 executou em uma média de 106,133 milésimos de segundo, o código em Java (Quadro 24) executou em uma média de 2159,133 milésimos de segundo, o código em C (Quadro 25) executou em uma média de 443,1 milésimos de segundo, e o código em C# executou em uma média de 1404 milésimos de segundo. Deve-se levar em consideração que as declarações das variáveis feitas em Java são realizadas somente no momento de sua implementação, o mesmo acontece nos códigos em C e C#, o que acarreta em um maior tempo para execução já que as variáveis precisam ser alocadas em memória antes de ser utilizadas na operação. Apesar da linguagem Java ter obtido o maior tempo de execução no teste realizado, a mesma foi escolhida por sua característica de portabilidade e, principalmente, por se tratar de linguagem livre. Como o sistema proposto visa implantação em EAS e a realidade da maioria destes segue uma tendência de utilização de software livre, optou-se então pela utilização da linguagem Java QUADRO 23 - Trecho código em Delphi. i:=0; while i< do begin j:=1; while j<ngenes do begin

61 carga:=random(horarios); if(carga=3) then begin idmedico := nextmedico(); grade[j,1] := idmedico; idmedico := nextmedico(); grade[j,2] := idmedico; grade[j,3] := idmedico; idmedico := nextmedico(); grade[j,4] := idmedico; end; QUADRO 24 - Trecho código em Java. int i=0; while(i<100000){ int[][] grade = new int[ngenes][4]; int j=0; while(j<ngenes){ carga=random.nextint(4); if(carga==3){ int idmedico = nextmedico(); grade[j][0] = idmedico; idmedico = nextmedico(); grade[j][1] = idmedico; grade[j][2] = idmedico; idmedico = nextmedico(); grade[j][3] = idmedico; QUADRO 25 - Trecho código em C. int i = 0; srand (time(null)); while (i < ) { int grade[ngenes][periodosdia]; int j = 0; while (j < ngenes) { int carga = rand() % 4; if (carga == 3) { int idmedico = nextmedico(); grade[j][0] = idmedico; idmedico = nextmedico(); grade[j][1] = idmedico; grade[j][2] = idmedico; idmedico = nextmedico(); grade[j][3] = idmedico; QUADRO 26 - Trecho código em C#. int i = 0; while (i < ) { int[,] grade = new int[ngenes,periodosdia]; int j = 0; while (j < ngenes) { int carga = random.next(4); if (carga == 3) {

62 int idmedico = nextmedico(); grade[j,0] = idmedico; idmedico = nextmedico(); grade[j,1] = idmedico; grade[j,2] = idmedico; idmedico = nextmedico(); grade[j,3] = idmedico; 5.3 Testes de funcionalidade do sistema Para testar a funcionalidade do sistema foi estabelecido o seguinte protocolo: a) Cadastrar alguns dos feriados existentes no ano. b) Cadastrar algumas indisponibilidades para os médicos. c) Gerar as escalas de plantão e sobreaviso para todos os meses do ano de d) Verificar em que geração e qual indivíduo obteve o FA=1000, correspondendo a uma resposta aceitável. e) Se nenhum indivíduo obteve FA=1000, verificar em que geração e qual indivíduo obteve a maior FA contabilizada pelo sistema. f) Contabilizar as possíveis não-conformidades das grades geradas, levando em consideração as restrições impostas ao sistema. Os Quadros 20 e 21 apresentam os feriados e indisponibilidades (para os médicos do setor UTI) cadastrados no sistema, respectivamente. QUADRO 27 - Feriados Cadastrados. Data Feriado 21/04/09 Tiradentes 01/05/09 Dia do Trabalhador 07/09/09 Independência do Brasil 12/10/09 Nossa Senhora Aparecida 02/11/09 Finados 15/11/09 Proclamação da República 25/12/09 Natal QUADRO 28 - Indisponibilidades Cadastradas.

63 Escalas dos Plantões por Setor Para o setor UTI foram cadastrados 15 médicos cujas especialidades são cardiologia, gastroenterologia, nefrologia, hematologia e cirurgião. As grades geradas para a UTI são apresentadas na Figura 19. Em azul estão representados os sábados, em vermelho os domingos, e as colunas com preenchimento representam os feriados cadastrados. Na Figura 20 encontram-se as cargas horárias geradas para cada um dos médicos do setor UTI. FIGURA 19 - Grade para o setor de UTI.

64 52 Como pode ser verificado na Figura 19, não foram geradas janelas entre horários nem combinações de horários inexistentes, assim como não houve nenhuma repetição de médico nem em finais de semana nem em feriados seguidos. As indisponibilidades cadastradas (Quadro 28) também foram respeitadas, não aparecendo a escala de nenhum médico em horários que não pudesse estar presente.

65 53 FIGURA 20 - Cargas horárias geradas. A adequação do sistema com relação a carga horária dos médicos pode ser vista na Figura 20, já que foi mantida uma divisão de carga horária entre os médicos, respeitando a regra estabelecida. Apesar de terem sido geradas cargas fora do intervalo pré-estabelecido no Capítulo 3, a divisão das horas tem se mantido aceitável. No entanto, algumas medidas ainda deverão ser tomadas para correção desse problema. Sendo assim, o Algoritmo Genético desenvolvido para a geração das escalas de plantões médicos pode ser considerado adequado, desde que as saídas geradas por ele estão de acordo com o desejado Escalas dos Sobreavisos por Especialidade A Figura 21 apresenta a escala de sobreaviso de todas as especialidades envolvidas no setor de UTI para o mês de Janeiro. Para este teste os médicos cadastrados no setor de UTI tinham as seguintes especialidades: Médicos 1, 2, 3, 5, 10, 11, 12, 13, 14 e 15: Cardiologia; Médico 4: Cirurgião; Médico 6: Gastroenterologia; Médico 7: Hematologia; Médicos 8 e 9: Nefrologia.

66 54 FIGURA 21 - Escala de Sobreaviso para mês de Janeiro do setor UTI. O Quadro 29 apresenta as cargas horárias geradas em função da escala de sobreaviso. Como pode ser visto o sistema atende às duas restrições impostas ao sobreaviso, ou seja, nenhum médico escalado para o sobreaviso possui choque de horário com o plantão e nenhum médico tem mais que 200 horas geradas para o sobreaviso. QUADRO 29 - Cargas horárias para o sobreaviso gerado. Como todas as escalas seguem a mesma lógica, suas gerações não foram apresentadas aqui. No entanto, como pôde ser observado as escalas de sobreaviso estão sendo geradas de acordo com o desejado. 5.4 Conclusão A realização de testes no processo de desenvolvimento de um software é o que permite garantir que determinado software realiza as funções para as quais este se propõe, assim, este capítulo mostrou além de testes de performance que aprimoraram o Algoritmo Genético como também os testes que validaram a sua eficácia para as funções que o mesmo de propõe.

67 55 6 CONSIDERAÇÕES FINAIS Este trabalho teve como principal motivação o desenvolvimento de um sistema que, através de técnicas estudadas durante o curso, pudesse auxiliar nos processos da geração de escalas horárias médicas de Estabelecimentos Assistenciais de Saúde (EAS). Para tanto, tomou-se o cuidado de tornar o sistema genérico a fim de que possa ser adaptado facilmente para qualquer EAS, já que cada um pode apresentar particularidades diferentes para a geração de suas grades horárias. O primeiro objetivo específico proposto foi de identificar as características da técnica de AG relevantes à implementação de ferramentas geradoras de escalas de trabalho. Este objetivo pode ser considerado cumprido, já que no Capítulo 2 podem ser encontradas essas características identificadas a partir de trabalhos anteriores estudados, além de terem sido testadas, conforme apresentado no Capítulo 5, testes estes que consumiram a maior parte do tempo dedicado ao trabalho, acarretando na demora no processo de escrita do presente trabalho. O segundo objetivo específico propunha o desenvolvimento de uma ferramenta que garanta que em, durante 24 horas diárias, pelo menos um profissional de cada especialidade estivesse escalado para prestar serviços no EAS. O sistema desenvolvido, através da escala de plantões, garante que cada setor terá sempre um médico escalado para trabalhar, não ficando em nenhum período sem a presença de um médico. Já a escala de sobreaviso garante que durante 24 horas diárias sempre haverá um médico de cada especialidade disponível para o EAS. Obviamente que, conforme visto no teste apresentado no Capítulo 5, caso exista restrições de carga horária máxima para os médicos e existam poucos médicos de uma mesma especialidade inseridos no EAS, alguns dias poderão ficar sem a disponibilidade de médicos para o EAS, porém este fato ocorrerá devido à problemas de estrutura do EAS em questão.

68 56 O terceiro objetivo específico foi o de identificar eventuais particularidades do regime de trabalho dos médicos do HGMTR, a fim de aplicar e validar a ferramenta desenvolvida. Tais particularidades podem ser vistas no Capítulo 5 deste trabalho, o qual especifica o regime de trabalho dos médicos do HGMTR Lages. No entanto, o sistema ainda não foi implantado no seu ambiente de aplicação, estando ainda passando por atualizações segundo reuniões feitas com o pessoal do EAS. Dessa forma, o sistema ainda não pode ser considerado validado pelo EAS. O quarto e último objetivo específico surgiu no decorrer do desenvolvimento do trabalho, quando se identificou a necessidade de facilitar a interação dos médicos com o sistema, no momento em que os mesmos precisam cadastrar suas indisponibilidades mensais. Sendo assim, conforme visto no Capítulo 4, foi implementada uma aplicação web com o intuito de tornar mais simples e rápida essa interação com os médicos. Dessa forma, apesar de o sistema ainda não ter sido testado em seu ambiente real de aplicação, os testes de funcionalidade feitos podem garantir que o objetivo geral foi alcançado, pois foi desenvolvida uma ferramenta computacional capaz de gerar automaticamente a escala mensal dos horários de trabalho dos médicos de um EAS. O sistema, ainda gerando apenas a escala de plantões, foi publicado e apresentado no III EPAC - Encontro Paranaense de Computação, conforme pode ser visto no Apêndice B e, em sua versão completa, foi apresentado na Mostra Científica da UNIPLAC. Para trabalhos futuros podem ser incorporadas as grades horárias de outros setores, tais como enfermagem e administrativo, assim como testar outras técnicas de cruzamento a fim de buscar grades melhores principalmente quanto a distribuição da carga horária entre os médicos, distribuição esta que mais demandou esforços no momento de implementação do AG, necessitando de cuidados desde a geração da população inicial. Além desse cuidado, sempre em função da dificuldade de se conseguir uma melhor distribuição de horas entre os médicos, tiveram que ser feitos testes de possíveis técnicas para aplicação dos operadores genéticos: seleção, cruzamento e mutação, a fim de encontrar as que melhor se adaptariam a essa

69 57 restrição. Como apresentado no Capítulo 5, a seleção por roleta ponderada, o cruzamento uniforme e a mutação por permutação foram as técnicas utilizadas neste trabalho.

70 58 REFERÊNCIAS BIBLIOGRÁFICAS BARRETO, J. M. Inteligência artificial no limiar do século XXI. 3. ed. Florianópolis: Ed. do Autor, p. BITTENCOURT, G. Inteligência artificial: ferramentas e teorias. Florianópolis: UFSC, p. BORGES, C. P. Aperfeiçoamento de um algoritmo genético para elaboração de quadros de horários em instituições de ensino f. Trabalho de Conclusão de Curso (Bacharelado em Sistemas de Informação) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages. CHEANG, B. Nurse rostering problems: a bibliographic survey, European Journal of Operational Research, V. 151, n. 3, Janeiro de 2003, pp FERNANDES, A. M. da R. Inteligência artificial: noções gerais. Florianópolis: Visual Books, p. FREITAS, C.C., GUIMARÃES, P.R.B., NETO, M.C.M., BARBOZA1, F.J.R. Uma Ferramenta Baseada em Algoritmos Genéticos para a Geração de Tabela de Horário Escolar, ERBASE, LENZI A. L. Desenvolvimento de grades horárias por Algoritmos Genéticos f. Trabalho de Conclusão de Curso (Bacharelado em Informática) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages. LOURENÇO, H. R., PAIXÃO, J. P., PORTUGAL, R. The Crew-Scheduling Module in the GIST System, Universidade de Lisboa, Lisboa, LUGER, G. F. Inteligência artificial: estruturas e estratégias para a solução de problemas complexos. 4. ed. Porto Alegre: Bookman, p. OLIVEIRA, M. Aperfeiçoamento de Algoritmos Genéticos para a geração de grade horária em instituições de ensino f. Trabalho de Conclusão de Curso (Bacharelado em Informática) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages. PEREIRA, J. F. Geração de Grades horárias por Algoritmos Genéticos f. Trabalho de Conclusão de Curso (Bacharelado em Informática) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages. RUSSELL, S.; NORVIG, P. Inteligência artificial: tradução da segunda edição.

71 59 Campinas: Campus, p. SANTOS, G. C. Sistema para desenvolvimento de escalas de serviços do Hospital e Maternidade Tereza Ramos f. Trabalho de conclusão de curso (Bacharelado em Informática) Departamento de Ciências exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages. WHITBY, B. Inteligência artificial: um guia para iniciantes. São Paulo: Madras, p.

72 60 BIBLIOGRAFIA COMPLEMENTAR CHEANG, B. Nurse rostering problems: a bibliographic survey. European Journal of Operational Research, v. 151, n. 3, p , Janeiro de FREITAS, C.C., GUIMARÃES, P.R.B., NETO, M.C.M., BARBOZA1, F.J.R. Uma Ferramenta Baseada em Algoritmos Genéticos para a Geração de Tabela de Horário Escolar. ERBASE, Vitória da Conquista, abril de GOLDBERG, D. E. Genetics algorithms in search, optimization and machine learning. Boston: Addison-Wesley, p.

73 61 APÊNDICES APÊNDICE A ARTIGO COMPLETO APÊNDICE B ARTIGO PUBLICADO NO III EPAC ISSN:

74 62 APÊNDICE A ARTIGO COMPLETO Sistema para Geração de Escalas de Plantões Médicos Anderson Beppler 1, Daiana Petry Leite 1 1 Sistemas de Informação Universidade do Planalto Catarinense (UNIPLAC) Av. Castelo Branco, Lages SC Brasil abeppler2000@gmail.com, daiana@uniplac.net Abstract: The preparation of timetables is a classic problem on institutions from various cantles. In a Health Establishment (HE), for example, schedule the doctors that should carry out is a complex and slow task. The restrictions in this kind of timetabling solution by conventional methods of programming requires a technique more specific. Then, this work treat the development of a system to generate timetables for shifts in HEs using a programming technique based on natural selection of species, the genetic algorithms (GAs). The implementation of the system is basically divided into 2 main modules: input and output data and generation time. The module input and output data is characterized by the Graphic User Interface (GUI), including all entries necessary for the implementation of the GA and the presentation of the schedule generated. To register the possible unavailability of doctors, and to display the range of work by each of them has developed a web page, making the process simpler and with more availability. The implementation of the GA took into account constraints such as non-existent periods, possible "windows", medical availability, workload and weekends and holidays followed. To do so would create an initial population with 40 individuals and each evaluation, if not found an appropriate scale, the 8th best possibilities are kept (elitism - 20%) and for the rest of the population are applied genetic operators of crossover and uniform mutation by swapping (10%). The system has not been tested in a real application environment, however, in their preliminary tests behaved satisfactorily, providing a medical scale according to the requirements of most hospitals in the SUS. Resumo. A elaboração de escalas de horários (timetabling) é um problema clássico de instituições dos mais vários segmentos. Dentro de um Estabelecimento Assistencial de Saúde (EAS), por exemplo, agendar horários dos plantões que os médicos devem realizar é uma tarefa bastante complexa e lenta. A grande quantidade de restrições neste tipo de timetabling dificulta sua solução através de métodos convencionais de programação e, portanto, necessita de uma técnica mais específica. Desta forma, o presente trabalho aborda o desenvolvimento de um sistema para gerar escalas de horários de plantões médicos em EAS através de uma técnica de programação baseada na seleção natural das espécies, os Algoritmos Genéticos (AGs). A implementação do sistema foi dividida basicamente em 2

75 63 módulos principais: entrada e saída de dados e geração do horário. O módulo de entrada e saída de dados caracteriza-se pela interface com o usuário, compreendendo todos os cadastros necessários para a execução do AG, bem como a apresentação do horário gerado ao usuário. Para o cadastro das possíveis indisponibilidades dos médicos, bem como a visualização da escala de trabalho por cada um deles, foi desenvolvida uma página web, tornando o processo mais simples e com maior disponibilidade. A implementação do AG levou em consideração restrições, tais como períodos inexistentes, possíveis janelas, indisponibilidade médica, carga de trabalho e finais de semana e feriados seguidos. Para tanto, gerase uma população inicial com 40 indivíduos e a cada avaliação, se não encontrada uma grade adequada, as 8 melhores possibilidades são guardadas (elitismo 20%) e para o restante da população são aplicados os operadores genéticos de cruzamento uniforme e mutação por permutação (10%). O sistema ainda não foi testado em seu ambiente de aplicação real, no entanto, em seus testes preliminares, comportou-se de maneira satisfatória, oferecendo uma escala médica de acordo com as exigências da maioria dos hospitais da rede SUS. 1. Introdução O desenvolvimento de uma escala de horários adequada que atenda às necessidades dos médicos, bem como dos pacientes de um Estabelecimento Assistencial de Saúde (EAS), é um fator indispensável na administração Hospitalar. Trata-se de um problema complexo e demorado, que vem sendo resolvido de forma manual pela maioria dos EAS, mas que, no entanto, pode ser resolvido através da construção de uma ferramenta computacional baseada em técnicas de Inteligência Artificial. Para Whitby [1], Inteligência Artificial (IA) é o estudo do comportamento inteligente (em homens, animais e máquinas) e a tentativa de encontrar formas pelas quais esse comportamento possa ser transformado em qualquer tipo de artefato por meio da engenharia. Já mais especificamente, os Algoritmos Genéticos (AGs), conforme Fernandes [2], estão inspirados no processo genético e evolutivo dos organismos vivos, onde a combinação de boas características provenientes de diferentes indivíduos ancestrais evoluem, logrando características cada vez melhor adaptadas ao ambiente em que vivem. Desta forma, com o auxílio da inteligência artificial, mais especificamente da técnica de algoritmos genéticos, este artigo descreve o desenvolvimento de uma ferramenta capaz de auxiliar na geração das escalas de plantões médicos, também conhecidas como timetabling. 2. Algoritmos Genéticos e Timetabling Os algoritmos genéticos são o ramo mais conhecido da Computação Evolucionária (CE) e, portanto, se concentram na teoria da evolução e na genética. Nos algoritmos genéticos trabalha-se com um conjunto de indivíduos (população) no qual cada elemento é candidato a ser a solução desejada. O grau de aptidão de cada indivíduo é obtido através de uma função de avaliação. A próxima geração será uma evolução da anterior e, para que isso ocorra, os mais aptos deverão possuir maior probabilidade de serem selecionados e, após a aplicação de operadores genéticos (cruzamento e mutação), darão origem à nova geração [3, 4, 5]. O problema de geração de escalas de horário, timetabling, é um problema de otimização que vem sendo usado em vários tipos de aplicações, tais como, escalonamento de enfermeiros [6], horários de aula em instituições de ensino [7, 8, 9, 10,11], horários em instituições médicas [12] e planejamento de transporte público [13]. Com um amplo conjunto de restrições, que

76 64 varia de acordo com o contexto, dois fatores são fundamentais neste tipo de problema: o tempo gasto buscando uma resposta que satisfaça as regras pré-estabelecidas, e a qualidade do resultado obtido. O problema de timetabling de plantões médicos consiste em organizar os plantões de um intervalo de tempo, geralmente um mês, de modo que eles satisfaçam as restrições prédefinidas. O conjunto de restrições varia com as características do estabelecimento assistencial de saúde (EAS). A montagem do horário é feita, na maioria dos casos, de forma manual e leva um considerável tempo na sua elaboração. 3. Materiais e Métodos O sistema foi desenvolvido utilizando a linguagem de programação Java, através da IDE Netbeans. Sua implementação foi dividida basicamente em 2 módulos principais: entrada e saída de dados e geração do horário Módulo de Entrada e Saída dos Dados O módulo de entrada e saída dos dados é realizada através da interface do sistema com o usuário, compreendendo todos os cadastros necessários para a execução do algoritmo genético (médico, especialidade, setor e feriados), bem como a interface que apresenta o horário gerado ao usuário. Como sistema de banco de dados para armazenamento das informações necessárias, foi utilizado o SQLServer. Para o cadastro das possíveis indisponibilidades dos médicos, foi desenvolvida uma página web, tornando o processo mais simples, desde que estará disponível no momento em que o profissional necessitar. Para o desenvolvimento da página foi utilizada a linguagem C# Módulo de Geração de Horários A implementação do algoritmo genético que gerará o quadro de horários de plantões médicos foi dividida em 3 etapas: geração da população inicial, avaliação/validação dos elementos da população e geração da nova população através da aplicação de operadores genéticos nos cromossomos selecionados Geração da População Inicial Cada cromossomo representa uma solução, ou seja, uma escala de plantão para determinado setor. Assim, a população de cromossomos é representada por um vetor tridimensional, conforme apresentado na Figura 3. Figura 1. Estrutura da População de Cromossomos

77 65 Cada matriz representa uma grade de horários, cada linha um período do dia, cada coluna um dia do mês, e o valor inserido na matriz é o identificador do profissional conforme estabelecido no banco de dados. A geração da população inicial leva em consideração que existem 4 tipos diferentes de horários, "Manhã" = 08:00 às 12:00, "Tarde" = 12:00 às 16:00, "Noite" = 16:00 às 20:00 e Madrugada = 20:00 às 08:00. Diante disso geram-se dois números aleatórios, um para escolher o médico e outro para o horário em que este médico será inserido, construindo assim 40 indivíduos para a população inicial Avaliação/Validação dos Elementos da População Avaliação é o processo onde cada elemento da população é exposto à função de avaliação ou função objetivo e, ao final, é classificado de acordo com sua adaptação a esta função. Para se chegar à função de avaliação levam-se em consideração os seguintes problemas/restrições: Períodos Manhã-Tarde (MT), Noite-Madrugada (NM) e Madrugada-Manhã (MM): não existe a possibilidade de combinação dos períodos Manhã e Tarde, nem dos períodos Noite e Madrugada, e Madrugada e Manhã. Assim, um médico trabalha no período MT somente se for escalado para o Plantão Dia (Manhã, Tarde e Noite) e no período NM somente se for escalado para o Plantão 24 h. Já o período MM não apresenta nenhuma possibilidade; Ocorrência de janelas (períodos livres entre períodos ocupados num mesmo dia ou dias adjacentes): não devem existir escalas nas quais o horário de trabalho do médico esteja intercalado com horário livre. Ou seja, caso o médico esteja escalado para trabalhar no horário Manhã, o mesmo não poderá estar escalado para trabalhar também no horário Noite do mesmo dia. Assim, algumas possíveis janelas seriam: Manhã-Noite, Manhã-Madrugada e Tarde-Madrugada, Disponibilidade médica: um médico não pode ser escalado para um horário no qual possui indisponibilidade. Finais de semana e feriados: é desejável também que determinado médico não seja escalado para finais de semana e feriados seguidos. Horas Trabalhadas: levando-se em conta o número de horas existente num mês e o número de médicos pertencentes a cada setor, o sistema procura distribuir uniformemente os médicos de acordo com o valor resultante de (quantidade de horas do mês / Número de médicos do setor). Assim, o algoritmo percorre cada indivíduo da população e, a cada restrição encontrada, desconta 5 pontos do valor inicial de 1000 pontos (função de avaliação FA), determinando então o quão perto da solução a grade (indivíduo) está. O indivíduo perfeito para o algoritmo é considerado aquele que não sofre descontos no decorrer do processo de avaliação, ou seja, aquele que continue com FA = Tendo em mãos a classificação dos cromossomos de uma população, basta compará-las com o objetivo buscado. No caso de proximidade aceitável, diante de critérios definidos pelo usuário, pode-se finalizar o processo, validando o cromossomo melhor classificado como resultado da busca. No caso de encontrar uma proximidade aceitável, parte-se para a geração de uma nova população, através da aplicação de operadores genéticos. Para esse sistema foi considerada uma proximidade aceitável quando a quantidade de horas trabalhadas dentro do intervalo (horas_mês/quantidade_médicos_setor) + ou - 24.

78 Geração da Nova População Por fim são aplicados os operadores genéticos que dão origem às novas populações (possibilidades de solução) até que a solução perfeita seja encontrada ou até que um número máximo de 1000 gerações seja alcançado. Antes da aplicação dos operadores genéticos, cruzamento e mutação, é feita a seleção dos cromossomos (pais) que darão origem a nova população (filhos). Seleção: O processo de seleção tem início após a avaliação da população e tem por objetivo fazer com que os indivíduos mais bem adaptados tenham mais chances de ser escolhidos para dar origem à nova população. Dentre os vários métodos existentes para a seleção dos cromossomos, para este trabalho definiu-se os métodos de elitismo e da roleta ponderada. O operador elitista força a cópia do melhor ou melhores cromossomos de cada geração para a geração seguinte, com a intenção de garantir que os melhores indivíduos da população não sejam descartados, pois a melhor solução já pode ter sido encontrada. Para este algoritmo os 8 melhores indivíduos (20%) são escolhidos para dar início a nova população. A roleta ponderada (RP), utilizada para definir a seleção do restante dos cromossomos, primeiramente ordena todos os indivíduos conforme seu desempenho. Logo após, cada indivíduo recebe uma nota: o pior cromossomo, aquele que possui a maior distância do objetivo, recebe nota igual a 1, o segundo pior recebe nota igual a 2, e assim por diante até que o melhor receba nota igual ao tamanho da população. Esses valores é que formarão a roleta, ou seja, significarão o percentual de chance que cada cromossomo terá de ser selecionado na roleta. Dessa forma, garante-se uma redução da distância entre os indivíduos, evitando que alguns deles monopolizem a descendência. Cruzamento: Após os cromossomos serem selecionados, estes se cruzam para que deem origem a novas possibilidades de solução para o problema. Primeiramente, os cromossomos selecionados pelo processo de elitismo são simplesmente copiados. Posteriormente, os cromossomos selecionados pela roleta ponderada, excluindo da mesma aqueles indivíduos já selecionados pelo elitismo, se cruzam e formam novos indivíduos que completarão a nova população (40 indivíduos). Durante o cruzamento ocorre a troca genética entre os cromossomos pais, através de um único ponto de corte obtido aleatoriamente, gerando então os cromossomos descendentes, como ilustra a Figura 4. Figura 2. Exemplo de Cruzamento de Cromossomos

79 67 Mutação: Para o processo de mutação, cria-se um vetor do tamanho da população o qual recebe de forma aleatória os números de 0 a 100. Após o preenchimento do vetor, seus valores são comparados com a porcentagem pré-determinada (10%) para se saber se determinado gene (cada elemento do cromossomo) passará ou não pelo processo de mutação. Para os genes escolhidos é aplicado um processo semelhante ao de criação da população inicial, gerando aleatoriamente outros genes para substituí-los. 3. O Sobreaviso O processo de geração dos sobreavisos é feito com base nas especialidades da instituição, para tanto é carregado inicialmente uma lista com as especialidades presentes no sistema, para que o algoritmo possa posteriormente buscar os médicos da determinada especialidade, e distribuí-los de maneira uniforme, verificando sua disponibilidade, em um vetor simples, já que para o sobreaviso não existe divisões de períodos. Após escalar o determinado médico para o dia em que este está disponível utilizando o método nextmedico(), o algoritmo contabiliza 24 horas na escala de sobreaviso, afim de controlar o número máximo de horas que cada médico pode ser escalado. No momento em que este número de horas é ultrapassado o médico é eliminado da fila. Este processo é executado enquanto houverem médicos ou dias disponíveis para escala. 4. Resultados O sistema ainda não foi implantado num ambiente real de atuação, estando na sua fase de testes e possíveis ajustes, mas já se consegue encontrar as respostas buscadas como perfeitas, muito próximas da buscada,em seus testes preliminares e fictícios se comportou de maneira aceitável, conforme demonstra o estudo de caso a seguir Estudo de caso para a geração de uma escala médica fictícia Foi gerada a escala fictícia de 15 médicos para a UTI (Unidade de Tratamento Intensivo) de um EAS. O mês de novembro foi escolhido por compreender dois feriados (dias 2 e 15). Existindo 15 médicos no setor e o mês possuindo 720 horas, segundo descrito na seção , espera-se que a quantidade de horas para cada médico esteja no intervalo de 24 a 72. Para este caso ainda foram cadastradas indisponibilidades para dois médicos. A Figura 5 apresenta o número do médico inserido no período e dia correspondente ao seu compromisso. Figura 3. Compromissos Cadastrados para o Estudo de Caso A execução do sistema para a geração de tal grade apresentou como saída o individuo 28 da iteração/população 53 com FA = 1000, ou seja, não ocorreu nenhum desconto. Analisando a escala gerada (Figura 6), podem-se encontrar quais foram as causas dos três descontos na avaliação da mesma quanto as restrições especificadas anteriormente, além de outras observações.

80 68 Figura 4. Escala Gerada para o Estudo de Caso Ao analisarem-se os finais de semana (células com preenchimento na Figura 6), percebe-se que não existe duplicidade de médicos em finais de semana seguidos, estando de acordo com a restrição imposta. Ao verificar-se a quantidade total de horas destinadas ao Médico 13 (84), encontra-se um valor que não está no intervalo esperado de 24 a 72. No entanto, também apesar de computar o desconto, o valor de FA encontrado é considerável aceitável. Quanto à restrição de não colocar um médico em feriados seguidos, percebe-se se o algoritmo se comportou de maneira correta, pois nos dias 2 e 15 não aparecem médicos iguais. Quanto à restrição referente às janelas (horário livre entre horários de trabalho no mesmo dia), verifica-se que nenhuma delas foi gerada na resposta da escala. Bem como, quanto a combinação de períodos Noite-Madrugada e Mahã-Tarde, que também não apareceram. Quanto aos compromissos cadastrados para os médicos 3 e 16, conforme mostrado na Figura 5, os mesmo foram respeitados, desde que os médico não foram escalados para os dias em que estavam indisponíveis Geração do Sobreaviso Para esta geração os médicos cadastrados no setor de UTI tinham as seguintes especialidades: Médicos 1, 2, 3, 5, 10, 11, 12, 13, 14 e 15: Cardiologia; Médico 4: Cirurgião; Médico 6: Gastroenterologia; Médico 7: Hematologia; Médicos 8 e 9: Nefrologia. Com base nestas especialidades e nas disponibilidades dos médicos o algoritmo gerou a escala de sobreaviso conforme mostra a Figura X. Figura 5. Escala de sobreaviso gerada no teste. O Quadro X apresenta as cargas horárias geradas em função da escala de sobreaviso. Como pode ser visto o sistema atende às duas restrições impostas ao sobreaviso, ou seja, nenhum

81 69 médico escalado para o sobreaviso possui choque de horário com o plantão e nenhum médico tem mais que 200 horas geradas para o sobreaviso. 5. Conclusões Figura 6. Cargas horárias de acordo com especialidades. Foi apresentado um sistema para geração de escalas de horários de plantões médicos desenvolvido através da técnica de algoritmos genéticos, a fim de tornar esse processo mais rápido e simples. Estando o sistema em sua fase de testes e possíveis ajustes, conclui-se que, apesar de ter sido apresentado um estudo de caso para o qual o algoritmo não supriu uma das restrições, o sistema num todo tem se comportado bem e, na medida em que for sendo testado no ambiente real de aplicação será facilmente ajustado. Referências [1] Whitby, B. Inteligência artificial: um guia para iniciantes, Madras, São Paulo, [2] Fernandes, A.M.R., Inteligência artificial: noções gerais, Visual Books, Florianópolis, [3] Barreto, J.M., Inteligência artificial no limiar do século XXI, Florianópolis, 3. ed., [4] Bittencourt, G., Inteligência artificial: ferramentas e teorias, Editora da UFSC, Florianópolis, [5] Goldberg, D. E., Genetics algorithms in search, optimization and machine learning. Editora Addison-Wesley, Boston, 1989, 412 p. [6] Cheang, B., Nurse rostering problems: a bibliographic survey, European Journal of Operational Research, Vol. 151, No. 3, Janeiro de 2003, pp [7] Freitas, C.C., Guimarães, P.R.B., Neto, M.C.M., Barboza1, F.J.R., Uma Ferramenta Baseada em Algoritmos Genéticos para a Geração de Tabela de Horário Escolar, ERBASE, [8] Borges, C. P., Aperfeiçoamento de um Algoritmo Genético para Elaboração de Quadros de Horários em Instituições de Ensino, tcc, UNIPLAC Universidade do Planalto Catarinenese, Lages, dezembro de 2007.

82 70 [9] Lenzi A. L. Desenvolvimento de grades horárias por Algoritmos Genéticos p. Trabalho de Conclusão de Curso (Bacharelado em Sistemas de Informação) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense Lages, [10] Oliveira, M. Aperfeiçoamento de Algoritmos Genéticos para a geração de grade horária em instituições de ensino p. Trabalho de Conclusão de Curso (Bacharelado em Sistemas de Informação) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages [11] Pereira, J. F. Geração de Grades horárias por Algoritmos Genéticos p. Trabalho de Conclusão de Curso (Bacharelado em Sistemas de Informação) Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages, [12] Santos, G. C. Sistema para desenvolvimento de escalas de serviços do Hospital e Maternidade Tereza Ramos p. Trabalho de conclusão de curso (Bacharelado em Informática) Departamento de Ciências exatas e Tecnológicas, Universidade do Planalto Catarinense, Lages, [13] Lourenço, H. R., Paixão, J. P., Portugal, R., The Crew-Scheduling Module in the GIST System, Universidade de Lisboa, Lisboa, 2000.

83 71 APÊNDICE B ARTIGO PUBLICADO NO III EPAC ISSN: Sistema para Geração de Escalas de Plantões Médicos FIGURA 22 - Anderson Beppler 1, Daiana Petry Leite 2 1 UNIPLAC - Universidade do Planalto Catarinense Curso de Sistemas de Informação Av. Castelo Branco, 170. Bairro Universitário. Caixa Postal CEP Lages, SC abeppler2000@gmail.com 2 UNIPLAC - Universidade do Planalto Catarinense Curso de Sistemas de Informação Av. Castelo Branco, 170. Bairro Universitário. Caixa Postal CEP Lages, SC daiana@uniplac.net Resumo. A elaboração de escalas de horários (timetabling) é um problema clássico das instituições de ensino, no entanto, sua necessidade é verificada em vários segmentos. Dentro de um Estabelecimento Assistencial de Saúde (EAS), por exemplo, agendar horários dos plantões que os médicos devem realizar é uma tarefa bastante complexa e lenta. A grande quantidade de restrições neste tipo de timetabling dificulta sua solução através de métodos convencionais de programação e, portanto, necessita de uma técnica mais específica. Desta forma, este artigo aborda o desenvolvimento de um sistema para gerar escalas de horários de plantões médicos em EAS através de uma técnica de programação baseada na seleção natural das espécies, os Algoritmos Genéticos (AGs). 1. Introdução O desenvolvimento de uma escala de horários adequada que atenda às necessidades dos médicos, bem como dos pacientes de um Estabelecimento Assistencial de Saúde (EAS), é um fator indispensável na administração Hospitalar. Trata-se de um problema complexo e demorado, que vem sendo resolvido de forma manual pela maioria dos EAS, mas que, no entanto, pode ser resolvido através da construção de uma ferramenta computacional baseada em técnicas de Inteligência Artificial. Para Whitby [1], Inteligência Artificial (IA) é o estudo do comportamento inteligente (em homens, animais e máquinas) e a tentativa de encontrar formas pelas quais esse comportamento possa ser transformado em qualquer tipo de artefato por meio da engenharia.

84 72 Já mais especificamente, os Algoritmos Genéticos (AGs), conforme Fernandes [2], estão inspirados no processo genético e evolutivo dos organismos vivos, onde a combinação de boas características provenientes de diferentes indivíduos ancestrais evoluem, logrando características cada vez melhor adaptadas ao ambiente em que vivem. Desta forma, com o auxílio da inteligência artificial, mais especificamente da técnica de algoritmos genéticos, este artigo descreve o desenvolvimento de uma ferramenta capaz de auxiliar na geração das escalas de plantões médicos, também conhecidas como timetabling. 2. Algoritmos Genéticos e Timetabling Os algoritmos genéticos são o ramo mais conhecido da Computação Evolucionária (CE) e, portanto, se concentram na teoria da evolução e na genética. Nos algoritmos genéticos trabalha-se com um conjunto de indivíduos (população) no qual cada elemento é candidato a ser a solução desejada. O grau de aptidão de cada indivíduo é obtido através de uma função de avaliação. A próxima geração será uma evolução da anterior e, para que isso ocorra, os mais aptos deverão possuir maior probabilidade de serem selecionados e, após a aplicação de operadores genéticos (cruzamento e mutação), darão origem à nova geração [3, 4, 5]. O problema de geração de escalas de horário, timetabling, é um problema de otimização que vem sendo usado em vários tipos de aplicações, tais como, escalonamento de enfermeiros [6], horários de aula em instituições de ensino [7, 8, 9, 10,11], horários em instituições médicas [12] e planejamento de transporte público [13]. Com um amplo conjunto de restrições, que varia de acordo com o contexto, dois fatores são fundamentais neste tipo de problema: o tempo gasto buscando uma resposta que satisfaça as regras pré-estabelecidas, e a qualidade do resultado obtido. O problema de timetabling de plantões médicos consiste em organizar os plantões de um intervalo de tempo, geralmente um mês, de modo que eles satisfaçam as restrições prédefinidas. O conjunto de restrições varia com as características do estabelecimento assistencial de saúde (EAS). A montagem do horário é feita, na maioria dos casos, de forma manual e leva um considerável tempo na sua elaboração. 3. Materiais e Métodos O sistema foi desenvolvido utilizando a linguagem de programação Java, através da IDE Netbeans. Sua implementação foi dividida basicamente em 2 módulos principais: entrada e saída de dados e geração do horário Módulo de Entrada e Saída dos Dados O módulo de entrada e saída dos dados é realizada através da interface do sistema com o usuário, compreendendo todos os cadastros necessários para a execução do algoritmo genético (médico, especialidade, setor e feriados), bem como a interface que apresenta o horário gerado ao usuário. Como sistema de banco de dados para armazenamento das informações necessárias, foi utilizado o Firebird. Para o cadastro das possíveis indisponibilidades dos médicos, foi desenvolvida uma página web, tornando o processo mais simples, desde que estará disponível no momento em que o profissional necessitar. Para o desenvolvimento da página foi utilizada a linguagem PHP (Hypertext Preprocessor), sendo que o compartilhamento de informações com o banco de dados foi feito através do formato XML (extensible Markup Language). As Figuras 1 e 2 apresentam as telas referentes à abertura do sistema e ao cadastro de médicos, respectivamente.

85 73 Figura 1. Interface de Abertura do Sistema 3.2. Módulo de Geração de Horários Figura 2. Interface de Cadastro de Médicos A implementação do algoritmo genético que gerará o quadro de horários de plantões médicos foi dividida em 3 etapas: geração da população inicial, avaliação/validação dos elementos da população e geração da nova população através da aplicação de operadores genéticos nos cromossomos selecionados Geração da População Inicial Cada cromossomo representa uma solução, ou seja, uma escala de plantão para determinado setor. Assim, a população de cromossomos é representada por um vetor tridimensional, conforme apresentado na Figura 3.

86 74 Figura 3. Estrutura da População de Cromossomos Cada matriz representa uma grade de horários, cada linha um período do dia, cada coluna um dia do mês, e o valor inserido na matriz é o identificador do profissional conforme estabelecido no banco de dados. A geração da população inicial leva em consideração que existem 4 tipos diferentes de horários, "Manhã" = 08:00 às 12:00, "Tarde" = 12:00 às 16:00, "Noite" = 16:00 às 20:00 e Madrugada = 20:00 às 08:00. Diante disso geram-se dois números aleatórios, um para escolher o médico e outro para o horário em que este médico será inserido, construindo assim 40 indivíduos para a população inicial Avaliação/Validação dos Elementos da População Avaliação é o processo onde cada elemento da população é exposto à função de avaliação ou função objetivo e, ao final, é classificado de acordo com sua adaptação a esta função. Para se chegar à função de avaliação levam-se em consideração os seguintes problemas/restrições: Períodos Manhã-Tarde (MT), Noite-Madrugada (NM) e Madrugada-Manhã (MM): não existe a possibilidade de combinação dos períodos Manhã e Tarde, nem dos períodos Noite e Madrugada, e Madrugada e Manhã. Assim, um médico trabalha no período MT somente se for escalado para o Plantão Dia (Manhã, Tarde e Noite) e no período NM somente se for escalado para o Plantão 24 h. Já o período MM não apresenta nenhuma possibilidade; Ocorrência de janelas (períodos livres entre períodos ocupados num mesmo dia ou dias adjacentes): não devem existir escalas nas quais o horário de trabalho do médico esteja intercalado com horário livre. Ou seja, caso o médico esteja escalado para trabalhar no horário Manhã, o mesmo não poderá estar escalado para trabalhar também no horário Noite do mesmo dia. Assim, algumas possíveis janelas seriam: Manhã-Noite, Manhã-Madrugada e Tarde-Madrugada, Disponibilidade médica: um médico não pode ser escalado para um horário no qual possui indisponibilidade. Finais de semana e feriados: é desejável também que determinado médico não seja escalado para finais de semana e feriados seguidos. Horas Trabalhadas: levando-se em conta o número de horas existente num mês e o número de médicos pertencentes a cada setor, o sistema procura distribuir uniformemente os médicos de acordo com o valor resultante de (quantidade de horas do mês / Número de médicos do setor).

87 75 Assim, o algoritmo percorre cada indivíduo da população e, a cada restrição encontrada, desconta 5 pontos do valor inicial de 500 pontos (função de avaliação FA), determinando então o quão perto da solução a grade (indivíduo) está. O indivíduo perfeito para o algoritmo é considerado aquele que não sofre descontos no decorrer do processo de avaliação, ou seja, aquele que continue com FA = 500. Tendo em mãos a classificação dos cromossomos de uma população, basta compará-las com o objetivo buscado. No caso de proximidade aceitável, diante de critérios definidos pelo usuário, pode-se finalizar o processo, validando o cromossomo melhor classificado como resultado da busca. No caso de encontrar uma proximidade aceitável, parte-se para a geração de uma nova população, através da aplicação de operadores genéticos. Para esse sistema foi considerada uma proximidade aceitável quando os descontos fossem decorrentes de dois casos: a) quantidade de horas trabalhadas fora do intervalo (horas_mês/quantidade_médicos_setor) + ou - 16, sendo que o desvio padrão não fosse maior que 24; b) quando a repetição de finais de semana acontecesse, mas não fossem acumulados mais que 5 períodos de trabalho Geração da Nova População Por fim são aplicados os operadores genéticos que dão origem às novas populações (possibilidades de solução) até que a solução perfeita seja encontrada ou até que um número máximo de 500 gerações seja alcançado. Antes da aplicação dos operadores genéticos, cruzamento e mutação, é feita a seleção dos cromossomos (pais) que darão origem a nova população (filhos). Seleção: O processo de seleção tem início após a avaliação da população e tem por objetivo fazer com que os indivíduos mais bem adaptados tenham mais chances de ser escolhidos para dar origem à nova população. Dentre os vários métodos existentes para a seleção dos cromossomos, para este trabalho definiu-se os métodos de elitismo e da roleta ponderada. O operador elitista força a cópia do melhor ou melhores cromossomos de cada geração para a geração seguinte, com a intenção de garantir que os melhores indivíduos da população não sejam descartados, pois a melhor solução já pode ter sido encontrada. Para este algoritmo os 8 melhores indivíduos (20%) são escolhidos para dar início a nova população. A roleta ponderada (RP), utilizada para definir a seleção do restante dos cromossomos, primeiramente ordena todos os indivíduos conforme seu desempenho. Logo após, cada indivíduo recebe uma nota: o pior cromossomo, aquele que possui a maior distância do objetivo, recebe nota igual a 1, o segundo pior recebe nota igual a 2, e assim por diante até que o melhor receba nota igual ao tamanho da população. Esses valores é que formarão a roleta, ou seja, significarão o percentual de chance que cada cromossomo terá de ser selecionado na roleta. Dessa forma, garante-se uma redução da distância entre os indivíduos, evitando que alguns deles monopolizem a descendência. Cruzamento: Após os cromossomos serem selecionados, estes se cruzam para que deem origem a novas possibilidades de solução para o problema. Primeiramente, os cromossomos selecionados pelo processo de elitismo são simplesmente copiados. Posteriormente, os cromossomos selecionados pela roleta ponderada, excluindo da

88 76 mesma aqueles indivíduos já selecionados pelo elitismo, se cruzam e formam novos indivíduos que completarão a nova população (40 indivíduos). Durante o cruzamento ocorre a troca genética entre os cromossomos pais, através de um único ponto de corte obtido aleatoriamente, gerando então os cromossomos descendentes, como ilustra a Figura 4. Figura 4. Exemplo de Cruzamento de Cromossomos Mutação: Para o processo de mutação, cria-se um vetor do tamanho da população o qual recebe de forma aleatória os números de 0 a 100. Após o preenchimento do vetor, seus valores são comparados com a porcentagem pré-determinada (10%) para se saber se determinado gene (cada elemento do cromossomo) passará ou não pelo processo de mutação. Para os genes escolhidos é aplicado um processo semelhante ao de criação da população inicial, gerando aleatoriamente outros genes para substituí-los. 4. Resultados O sistema ainda não foi implantado num ambiente real de atuação, estando na sua fase de testes e possíveis ajustes, mas já se consegue encontrar as respostas buscadas como perfeitas, muito próximas da buscada,em seus testes preliminares e fictícios se comportou de maneira aceitável, conforme demonstra o estudo de caso a seguir Estudo de caso para a geração de uma escala médica fictícia Foi gerada a escala fictícia de 13 médicos para a UTI (Unidade de Tratamento Intensivo) de um EAS. O mês de novembro foi escolhido por compreender dois feriados (dias 2 e 15). Existindo 13 médicos no setor e o mês possuindo 720 horas, segundo descrito na seção , espera-se que a quantidade de horas para cada médico esteja no intervalo de 39 a 71. Para este caso ainda foram cadastradas indisponibilidades para dois médicos. A Figura 5 apresenta o número do médico inserido no período e dia correspondente ao seu compromisso. Figura 5. Compromissos Cadastrados para o Estudo de Caso A execução do sistema para a geração de tal grade apresentou como saída o individuo 34 da iteração/população 51 com FA = 485, conforme mostra a Figura 6. Ou seja, ocorreram três descontos de 5 pontos.

89 77 Figura 6. Saída do Sistema para Geração da Escala do Estudo de Caso Analisando a escala gerada (Figura 7), podem-se encontrar quais foram as causas dos três descontos na avaliação da mesma quanto as restrições especificadas anteriormente, além de outras observações. Figura 7. Escala Gerada para o Estudo de Caso Ao analisar-se os dias 7 e 14 (sábados seguidos), percebe-se o Médico 3 aparece em ambos os dias, em desacordo com uma das restrições impostas. No entanto, apesar de computar o desconto, de acordo com a seção , esse desacordo é aceitável, já que a quantidade de períodos de trabalho acumulado deste médico, nos dois dias, não ultrapassa o valor 5 estipulado. Ao verificar-se a quantidade total de horas destinadas ao Médico 11 (76), encontra-se um valor que não está no intervalo esperado de 39 a 71. No entanto, também apesar de computar o desconto, de acordo com a seção , o valor de FA encontrado é considerável aceitável por estar no intervalo de 31 a 79. O terceiro desconto é encontrado no dia 23, no qual aparece a combinação dos períodos Manhã e Tarde, não aceitável segundo as restrições impostas. Quanto à restrição de não colocar um médico em feriados seguidos, percebe-se se o algoritmo se comportou de maneira correta, pois nos dias 2 e 15 não aparecem médicos iguais. Quanto à restrição referente às janelas (horário livre entre horários de trabalho no mesmo dia), verifica-se que nenhuma delas foi gerada na resposta da escala. Bem como, quanto a combinação de períodos Noite e Madrugada, que também não apareceu. Quanto aos compromissos cadastrados para os médicos 1 e 8, conforme mostrado na Figura 5, os mesmo foram respeitados, desde que os médico não foram escalados para os dias em que estavam indisponíveis. Para melhor ilustração do funcionamento sistema, a Figura 8 apresenta a tela do sistema para apresentação da escala gerada.

90 78 5. Conclusões Figura 8. Tela de Apresentação de Escalas Geradas Foi apresentado um sistema para geração de escalas de horários de plantões médicos desenvolvido através da técnica de algoritmos genéticos, a fim de tornar esse processo mais rápido e simples. Estando o sistema em sua fase de testes e possíveis ajustes, conclui-se que, apesar de ter sido apresentado um estudo de caso para o qual o algoritmo não supriu uma das restrições, o sistema num todo tem se comportado bem e, na medida em que for sendo testado no ambiente real de aplicação será facilmente ajustado. Referências [1] Whitby, B. Inteligência artificial: um guia para iniciantes, Madras, São Paulo, [2] Fernandes, A.M.R., Inteligência artificial: noções gerais, Visual Books, Florianópolis, [3] Barreto, J.M., Inteligência artificial no limiar do século XXI, Florianópolis, 3. ed., [4] Bittencourt, G., Inteligência artificial: ferramentas e teorias, Editora da UFSC, Florianópolis, [5] Goldberg, D. E., Genetics algorithms in search, optimization and machine learning. Editora Addison-Wesley, Boston, 1989, 412 p. [6] Cheang, B., Nurse rostering problems: a bibliographic survey, European Journal of Operational Research, Vol. 151, No. 3, Janeiro de 2003, pp [7] Freitas, C.C., Guimarães, P.R.B., Neto, M.C.M., Barboza1, F.J.R., Uma Ferramenta Baseada em Algoritmos Genéticos para a Geração de Tabela de Horário Escolar, ERBASE, [8] Borges, C. P., Aperfeiçoamento de um Algoritmo Genético para Elaboração de Quadros de Horários em Instituições de Ensino, tcc, UNIPLAC Universidade do Planalto Catarinenese, Lages, dezembro de 2007.

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

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

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

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

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

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

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

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

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

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

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

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

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

Algoritmos Genéticos

Algoritmos Genéticos Algoritmos Genéticos Introdução Um Algoritmo Genético (AG), conceitualmente, segue passos inspirados no processo biológico de evolução natural segundo a teoria de Darwin Algoritmos Genéticos seguem a idéia

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

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

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

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

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

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

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

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

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

ESTUDO DOS PARAMETROS DE UM ALGORITMO GENÉTICO PARA POSTERIOR USO NA SOLUÇÃO DE PROBLEMAS DO TIPO JOB-SHOP

ESTUDO DOS PARAMETROS DE UM ALGORITMO GENÉTICO PARA POSTERIOR USO NA SOLUÇÃO DE PROBLEMAS DO TIPO JOB-SHOP ESTUDO DOS PARAMETROS DE UM ALGORITMO GENÉTICO PARA POSTERIOR USO NA SOLUÇÃO DE PROBLEMAS DO TIPO JOB-SHOP Gilson Rogério Batista, Gideon Villar Leandro Universidade Regional do Noroeste do Estado do Rio

Leia mais

4 Caso de Uso no Ambiente Oracle

4 Caso de Uso no Ambiente Oracle 4 Caso de Uso no Ambiente Oracle No capítulo anterior foi definido o processo para definição de uma estratégia de rastreabilidade. Neste capítulo será realizada uma instanciação do processo em um ambiente

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

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

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

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

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

Introdução a Algoritmos Genéticos

Introdução a Algoritmos Genéticos Introdução a Algoritmos Genéticos Tiago da Conceição Mota Laboratório de Inteligência Computacional Núcleo de Computação Eletrônica Universidade Federal do Rio de Janeiro Outubro de 2007 O Que São? Busca

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

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

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

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

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

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

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

Um Algoritmo Genético para o Problema de Roteamento de Veículos com Janelas de Tempo

Um Algoritmo Genético para o Problema de Roteamento de Veículos com Janelas de Tempo Um Algoritmo Genético para o Problema de Roteamento de Veículos com Janelas de Tempo Francisco Henrique de Freitas Viana Pontifícia Universidade Católica do Rio de Janeiro PUC-Rio Departamento de Informática

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

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

Uso de Algoritmo Genético para a otimização do ponto de corte da probabilidade de sucesso estimada do modelo de Regressão Logística

Uso de Algoritmo Genético para a otimização do ponto de corte da probabilidade de sucesso estimada do modelo de Regressão Logística Uso de Algoritmo Genético para a otimização do ponto de corte da probabilidade de sucesso estimada do modelo de Regressão Logística José Edson Rodrigues Guedes Gondim 1 Joab de Oliveira Lima 2 1 Introdução

Leia mais

Aplicação da Metaheurística Algoritmos Genéticos na solução do problema das n Rainhas

Aplicação da Metaheurística Algoritmos Genéticos na solução do problema das n Rainhas Aplicação da Metaheurística Algoritmos Genéticos na solução do problema das n Rainhas Resumo Gardiego Luiz da Silva 1 Henrique Faria de Oliveira 2 Faculdade

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

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

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

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

Inteligência Artificial

Inteligência Artificial Inteligência Artificial Fabrício Olivetti de França 07 de Junho de 2018 1 Heurísticas e Meta-Heurísticas 2 Heurística Heurística, derivada do grego encontrar ou descobrir, são técnicas para encontrar a

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

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

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ ALGORITMOS GENÉTICOS. Metaheurísticas de Buscas

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ ALGORITMOS GENÉTICOS. Metaheurísticas de Buscas PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ ALGORITMOS GENÉTICOS Metaheurísticas de Buscas ALGORITMOS GENÉTICOS (AG) Popularizados por John Holland podem ser considerados os primeiros modelos algorítmicos

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

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

4 Metáforas de Optimização

4 Metáforas de Optimização 4 Metáforas de Optimização O gigantesco avanço tecnológico que vem sofrendo os sistemas de computação, mais precisamente as unidades de processamento, criou a base para o uso efetivo da Inteligência Computacional,

Leia mais

Um Middleware de Inteligência Artificial para Jogos Digitais 105

Um Middleware de Inteligência Artificial para Jogos Digitais 105 6 Conclusão Este capítulo apresenta alguns comentários e considerações gerais sobre o trabalho de pesquisa realizado durante o desenvolvimento desta dissertação, as contribuições alcançadas e sugestões

Leia mais

APLICAÇÃO DE REDES NEURAIS RECORRENTES EM AMBIENTES PARCIALMENTE OBSERVÁVEIS 1

APLICAÇÃO DE REDES NEURAIS RECORRENTES EM AMBIENTES PARCIALMENTE OBSERVÁVEIS 1 APLICAÇÃO DE REDES NEURAIS RECORRENTES EM AMBIENTES PARCIALMENTE OBSERVÁVEIS 1 Eldair Fabrício Dornelles 2, Henrique Augusto Richter 3, Márcia Da Silva 4, Rogério Samuel De Moura Martins 5, Sandro Sawicki

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

Algoritmos genéticos Abordagem unificada de algoritmos evolutivos simples

Algoritmos genéticos Abordagem unificada de algoritmos evolutivos simples Introdução Inspiração biológica Histórico da computação evolutiva Algoritmo evolutivo simples Programação evolutiva Estratégias evolutivas Algoritmos genéticos Abordagem unificada de algoritmos evolutivos

Leia mais

ESTUDO DO EFEITO DOS PARÂMETROS GENÉTICOS DE UM ALGORITMO GENÉTICO NA SOLUÇÃO OTIMIZADA E NO TEMPO DE CONVERGÊNCIA EM UMA FUNÇÃO DE DUAS VARIÁVEIS

ESTUDO DO EFEITO DOS PARÂMETROS GENÉTICOS DE UM ALGORITMO GENÉTICO NA SOLUÇÃO OTIMIZADA E NO TEMPO DE CONVERGÊNCIA EM UMA FUNÇÃO DE DUAS VARIÁVEIS ESTUDO DO EFEITO DOS PARÂMETROS GENÉTICOS DE UM ALGORITMO GENÉTICO NA SOLUÇÃO OTIMIZADA E NO TEMPO DE CONVERGÊNCIA EM UMA FUNÇÃO DE DUAS VARIÁVEIS Marcelo Henrique dos Santos Universidade de Uberaba, Engenharia

Leia mais

Otimização. Unidade 6: Algoritmo Genético. Jaime Arturo Ramírez. 7. Teoria do processo evolutivo num GA. 8. Aspectos avançados

Otimização. Unidade 6: Algoritmo Genético. Jaime Arturo Ramírez. 7. Teoria do processo evolutivo num GA. 8. Aspectos avançados Otimização Jaime Arturo Ramírez Conteúdo 1. Introdução 2. Analogia de mecanismos de seleção natural com sistemas artificiais 3. Algoritmo genético modelo 4. Um GA simples 5. Representação, genes e cromossomos

Leia mais

Marcos Borges Pessoa. Geração e execução automática de scripts de teste para aplicações web a partir de casos de uso direcionados por comportamento

Marcos Borges Pessoa. Geração e execução automática de scripts de teste para aplicações web a partir de casos de uso direcionados por comportamento Marcos Borges Pessoa Geração e execução automática de scripts de teste para aplicações web a partir de casos de uso direcionados por comportamento Dissertação de mestrado Dissertação apresentada como requisito

Leia mais

5 Projeto de Novos Polímeros Condutores

5 Projeto de Novos Polímeros Condutores 5 Projeto de Novos Polímeros Condutores Polímeros condutores constituem uma nova classe de materiais eletrônicos com propriedades incomuns, baseadas em novos fenômenos físicos, tendo aplicações com largo

Leia mais

3 Otimização Aplicada a Reconstituição de Acidentes

3 Otimização Aplicada a Reconstituição de Acidentes 27 3 Otimização Aplicada a Reconstituição de Acidentes 3.1. Otimização A otimização é uma metodologia empregada para minimizar ou maximizar uma função e geralmente são utilizados em problemas onde existam

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

Algoritmos Genéticos. 1 Semestre de Cleber Zanchettin UFPE - Universidade Federal de Pernambuco CIn - Centro de Informática

Algoritmos Genéticos. 1 Semestre de Cleber Zanchettin UFPE - Universidade Federal de Pernambuco CIn - Centro de Informática Algoritmos Genéticos 1 Semestre de 2015 Cleber Zanchettin UFPE - Universidade Federal de Pernambuco CIn - Centro de Informática 1 2 Introdução Darwin Naturalistas: cada espécie havia sido criada separadamente

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

Engenharia Software. Ení Berbert Camilo Contaiffer

Engenharia Software. Ení Berbert Camilo Contaiffer Engenharia Software Ení Berbert Camilo Contaiffer Características do Software Software não é um elemento físico, é um elemento lógico; Software é desenvolvido ou projetado por engenharia, não manufaturado

Leia mais

Roteirização de veículo para realização de coleta utilizando algoritmo evolucionários

Roteirização de veículo para realização de coleta utilizando algoritmo evolucionários Departamento de Sistemas e Computação FURB Curso de Ciência da Computação Trabalho de conclusão de curso 2014/01 Roteirização de veículo para realização de coleta utilizando algoritmo evolucionários Acadêmico:

Leia mais

IF-705 Automação Inteligente Algoritmos Evolucionários

IF-705 Automação Inteligente Algoritmos Evolucionários IF-705 Automação Inteligente Algoritmos Evolucionários Aluizio Fausto Ribeiro Araújo Universidade Federal de Pernambuco Centro de Informática - CIn Departamento de Sistemas da Computação aluizioa@cin.ufpe.br

Leia mais

Gerador de grade de horários com Algoritmos Genéticos

Gerador de grade de horários com Algoritmos Genéticos Gerador de grade de horários com Algoritmos Genéticos Rodrigo Correia Prof. Roberto Heinzle, Doutor - Orientador Roteiro da apresentação Introdução Objetivos Fundamentação teórica Tecnologias utilizadas

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

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

ESPECIFICAÇÃO DO TRABALHO DA DISCIPLINA DE ANÁLISE DE SISTEMAS ORIENTADOS A OBJETOS DO CURSO DE TECNOLOGIA EM DESENVOLVIMENTO DE SOFTWARE

ESPECIFICAÇÃO DO TRABALHO DA DISCIPLINA DE ANÁLISE DE SISTEMAS ORIENTADOS A OBJETOS DO CURSO DE TECNOLOGIA EM DESENVOLVIMENTO DE SOFTWARE O trabalho consiste em duas etapas. Na primeira etapa, a equipe deverá apresentar os documentos necessários para especificação do problema e a sua análise, através da UML. Na segunda etapa, a equipe fará

Leia mais

Introdução ao Algoritmo Genético

Introdução ao Algoritmo Genético Introdução ao Algoritmo Genético Sadao Massago Agosto de 2013 1 Introdução O algoritmo genético é um método de otimização bio insperado, desenvolvida por John Henry Holland em 1975. Segundo a teoria evolucionária

Leia mais

De que modo computadores podem resolver problemas, sem que tenham que ser explicitamente programados para isso?

De que modo computadores podem resolver problemas, sem que tenham que ser explicitamente programados para isso? Programação Genética Genetic Programming - GP De que modo computadores podem resolver problemas, sem que tenham que ser eplicitamente programados para isso? Programação Genética - GP Etensão de Algoritmos

Leia mais

DESENVOLVIMENTO DE GRADE HORÁRIA POR ALGORITMOS GENÉTICOS

DESENVOLVIMENTO DE GRADE HORÁRIA POR ALGORITMOS GENÉTICOS UNIVERSIDADE DO PLANALTO CATARINENSE DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE INFORMÁTICA (BACHARELADO) DESENVOLVIMENTO DE GRADE HORÁRIA POR ALGORITMOS GENÉTICOS LUIZ ALBERTO LENZI LAGES,

Leia mais

7 Congresso de Pós-Graduação MODELAGEM DE BASE DE CONHECIMENTO PARA TAREFA DE CLASSIFICAÇÃO EM MINERAÇÃO DE DADOS

7 Congresso de Pós-Graduação MODELAGEM DE BASE DE CONHECIMENTO PARA TAREFA DE CLASSIFICAÇÃO EM MINERAÇÃO DE DADOS 7 Congresso de Pós-Graduação MODELAGEM DE BASE DE CONHECIMENTO PARA TAREFA DE CLASSIFICAÇÃO EM MINERAÇÃO DE DADOS Autor(es) LIDIA MARTINS DA SILVA Orientador(es) ANA ESTELA ANTUNES DA SILVA 1. Introdução

Leia mais

3 Computação Evolucionária

3 Computação Evolucionária 34 3 Computação Evolucionária Computação Evolucionária compreende diversos algoritmos inspirados no princípio Darwiniano da evolução das espécies e na genética. São algoritmos probabilísticos, que fornecem

Leia mais

GAs são indicados em problemas complexos de otimização- onde se busca uma solução melhor:

GAs são indicados em problemas complexos de otimização- onde se busca uma solução melhor: Componentes de um Algoritmo Genético 1. Problema 2. Representação 3. Decodificação 4. Avaliação 5. Operadores 6. Técnicas 7. Parâmetros 1. PROBLEMA GAs são indicados em problemas complexos de otimização-

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Implementação De Um Algoritmo Genético Codificado Para A Solução do Problema do Caixeiro Viajante

Implementação De Um Algoritmo Genético Codificado Para A Solução do Problema do Caixeiro Viajante Implementação De Um Algoritmo Genético Codificado Para A Solução do Problema do Caixeiro Viajante 1 Resumo Neste trabalho será realizada a codificação do algoritmo genético para a solução do problema do

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

Algoritmos Genéticos 1

Algoritmos Genéticos 1 Algoritmos Genéticos 1 Esquema de um GA Algoritmos Genéticos são um ramo da computação evolucionária Seu funcionamento pode ser resumido algoritimicamente através dos seguintes passos: Inicialize a população

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

Planejamento Hidrotérmico Utilizando Algoritmos Genéticos

Planejamento Hidrotérmico Utilizando Algoritmos Genéticos 1 Planejamento Hidrotérmico Utilizando Algoritmos Genéticos Thayse Cristina Trajano da Silva Pontifícia Universidade Católica Puc-Rio Engenharia Elétrica Rio de Janeiro RJ Brasil Resumo O planejamento

Leia mais

6. QUADRIMESTRE IDEAL 7. NÍVEL Graduação 8. Nº. MÁXIMO DE ALUNOS POR TURMA TEORIA: 60 LABORATÓRIO: 30

6. QUADRIMESTRE IDEAL 7. NÍVEL Graduação 8. Nº. MÁXIMO DE ALUNOS POR TURMA TEORIA: 60 LABORATÓRIO: 30 Universidade Federal do ABC Rua Santa Adélia, 166 - Bairro Bangu - Santo André - SP - Brasil CEP 09.210-170 - Telefone/Fax: +55 11 4996-3166 1. CÓDIGO E NOME DA DISCIPLINA MC5001 - SISTEMAS MULTIAGENTES

Leia mais

OTIMIZAÇÃO DA LIMPEZA DE REDES DE TROCADORES DE CALOR EMPREGANDO OS ALGORITMOS GENÉTICOS

OTIMIZAÇÃO DA LIMPEZA DE REDES DE TROCADORES DE CALOR EMPREGANDO OS ALGORITMOS GENÉTICOS OTIMIZAÇÃO DA LIMPEZA DE REDES DE TROCADORES DE CALOR EMPREGANDO OS ALGORITMOS GENÉTICOS C. de O. GONÇALVES 1, E. M. QUEIROZ 2, F. L. P. PESSOA 2, F. S. LIPORACE 3, S. G. OLIVEIRA 3 e A. L. H. COSTA 1

Leia mais

Otimização com Algoritmos Genéticos no MATLAB. Prof. Rafael Saraiva Campos CEFET-RJ

Otimização com Algoritmos Genéticos no MATLAB. Prof. Rafael Saraiva Campos CEFET-RJ Otimização com Algoritmos Genéticos no MATLAB Prof. Rafael Saraiva Campos CEFET-RJ Conteúdo do Mini-Curso PARTE 1 Teoria PARTE 2 Prática Conteúdo do Mini-Curso PARTE 1 Teoria 1.1. Conceitos Básicos de

Leia mais

Computação Evolutiva. Prof. Eduardo R. Hruschka (Slides baseados nos originais do Prof. André C. P. L. F. de Carvalho)

Computação Evolutiva. Prof. Eduardo R. Hruschka (Slides baseados nos originais do Prof. André C. P. L. F. de Carvalho) Computação Evolutiva Prof. Eduardo R. Hruschka (Slides baseados nos originais do Prof. André C. P. L. F. de Carvalho) Principais Tópicos Computação Evolutiva Algoritmos Genéticos Codificação Função de

Leia mais

Estratégias Evolutivas EEs. Prof. Juan Moisés Mauricio Villanueva

Estratégias Evolutivas EEs. Prof. Juan Moisés Mauricio Villanueva Estratégias Evolutivas EEs Prof. Juan Moisés Mauricio Villanueva jmauricio@cear.ufpb.br www.cear.ufpb.br/juan Estratégias Evolutivas Desenvolvidas por Rechenberg e Schwefel, e estendida por Herdy, Kursawe

Leia mais

UMA INTRODUÇÃO AOS ALGORITMOS GENETICOS

UMA INTRODUÇÃO AOS ALGORITMOS GENETICOS UMA INTRODUÇÃO AOS ALGORITMOS GENETICOS Uma visão geral dos GAs Um algoritmo genético é uma classe de algoritmo de busca. O algoritmo procura uma solução dentro de um espaço para um problema de otimização.

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

Sistemas de Informação e Decisão. Douglas Farias Cordeiro

Sistemas de Informação e Decisão. Douglas Farias Cordeiro Sistemas de Informação e Decisão Douglas Farias Cordeiro Decisão Tomamos decisões a todo momento! O que é uma decisão? Uma decisão consiste na escolha de um modo de agir, entre diversas alternativas possíveis,

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

COMPUTAÇÃO EVOLUTIVA APLICADA AO PROBLEMA DE PRODUÇÃO DE GRADE HORÁRIA: O CASO DO CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DO IFTM

COMPUTAÇÃO EVOLUTIVA APLICADA AO PROBLEMA DE PRODUÇÃO DE GRADE HORÁRIA: O CASO DO CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DO IFTM COMPUTAÇÃO EVOLUTIVA APLICADA AO PROBLEMA DE PRODUÇÃO DE GRADE HORÁRIA: O CASO DO CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DO IFTM Jairo Gervásio de Freitas, Keiji Yamanaka jairo@iftm.edu.br, keiji@ufu.br

Leia mais

PORTAL DO EGRESSO DO IFC CAMPUS CAMBORIÚ

PORTAL DO EGRESSO DO IFC CAMPUS CAMBORIÚ PORTAL DO EGRESSO DO IFC CAMPUS CAMBORIÚ Autores: Renan Ramon Esser HILLESHEIM 1 ;; Dafny Ribas REICHERT 2 ;; Angelo Augusto FROZZA 3 ;; Reginaldo Rubens da SILVA 3 Identificação autores: 1 Bolsista de

Leia mais

Elaboração de Grades Horárias Utilizando Algoritmos Genéticos

Elaboração de Grades Horárias Utilizando Algoritmos Genéticos Elaboração de Grades Horárias Utilizando Algoritmos Genéticos Lucas Bucior, Fabio Asturian Zanin, Marcos A. Lucas Departamento de Engenharias e Ciência da Computação Universidade Regional Integrada do

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