Este livro vem preencher uma lacuna na literatura sobre sistemas especialistas, por apresentar e documentar um software desenvolvido para resolver o problema de obtenção de horários em escolas do ensino fundamental e médio, cujo código-fonte está disponibilizado na internet. É utilizada a linguagem Java, mas o leitor não precisa ter conhecimentos prévios de Java, sendo suficiente ter algumas noções sobre programação. Através dessa obra, é possível uma imersão no interessante conjunto de técnicas que possibilitam a solução automatizada do problema de horários. Através da assimilação dessas técnicas, o leitor poderá desenvolver aplicações semelhantes em sua área de atuação. A descrição do software para obtenção de horários contida neste livro se traduz numa introdução à importante subárea da inteligência artificial que trata do problema de satisfação de restrições, um assunto que contempla diversas aplicações e uma área em desenvolvimento e com pesquisa ativa. A partir dessa leitura, o leitor se convencerá de que mesmo conceitos matemáticos básicos, como operações simples e rudimentos de lógica, encontram larga aplicação na atividade de programação. De fato, um dos objetivos desse livro é desenvolver o raciocínio lógico e a capacidade de aplicá-lo na solução de problemas. Praticamente todo o conteúdo deste livro é inédito, e este foi um dos fatores que mais motivou a sua publicação. Em determinados pontos durante a construção de um horário de aulas, devem ser executados testes que respondem se a parte do horário que já foi concluída é viável e permite a finalização da solução procurada. Nestes testes são empregados critérios que implicam condições necessárias para uma solução viável, e que constituem a principal base matemática da solução do problema de horários. Neste livro são explicados os fundamentos e a aplicação de tais critérios.