Programação

  • Benvindos ao curso de Inteligência Artificial

    O objetivo principal da disciplina é introduzir os elementos básicos da Inteligência Artificial e da sua relação com a inovação, especialmente no quando esta está ligada a automação de processos, serviços e sistemas. Teremos uma abordagem conceitual da IA, combinando teoria e prática referentes à inteligência de máquina e ao desenvolvimento de sistemas baseados em conhecimento. Discutiremos as diversas formas de representação de conhecimento mas focaremos nas regras de produção, base de dados (na forma de fatos ou acoplado ao sistema inteligente).  A dinâmica destes sistemas é baseada em regras de inferência. técnicas de busca e nos métodos computáveis de resolução de problemas, sintetizados nas técnicas planejamento inteligente e planejamento automático.  

     

  • Introdução



    Começaremos com uma discussão sobre o conceito de inteligência e seus pressupostos, para delimitar expectativas e dimensionar corretamente o que se pode esperar dos sistemas inteligentes.  Estamos diante de uma época marcada por um "corte epistemológico" entre sistemas funcionais e sistemas flexíveis (inteligentes) associados às diversas áreas do conhecimento. Portanto, é importante separar claramente o que se chama de "digital mind" ou inteligência computacional - a que pode ser inserida em algoritmos eminentemente procedurais - dos métodos baseados em conhecimento. Faremos um breve histórico sobre o interesse acadêmico e global na inteligência, na sua reprodução por máquinas e sistemas. Introduziremos o conceito de agente inteligente, fundamental para a inteligência de máquina, seja embarcada ou distribuída. 

    O curso está dividido em uma parte teórica e uma parte prática. Gostaríamos de ter a capacidade de desenvolver pequenos programas inteligentes em pelo menos uma linguagem. A parte prática será trabalhada em notebooks, desenvolvidos no ambiente SWISH Prolog. O objetivo deste notebook é reduzir a curva de aprendizado para elaborar um programa simples, mas suficiente para perceber a diferença entre os programas procedurais e aqueles baseados em conhecimento. 

    Uma versão online do SWI Prolog for Sharing será instalada na nuvem especificamente para esta disciplina. Eliminaremos assim problemas com instalação em desktops e a concorrência com o resto do mundo para usar a versão livre do SWI Prolog. 

  • Agentes inteligentes



    Telemedicina: um novo desafio para a IA


    Nesta aula vamos começar a tratar da resolução de problemas usando IA. Este tópico significou um divisor de águas no desenvolvimento da IA e na sua relação com os sistemas automatizados. Um conceito essencial para isso é o de agentes, especialmente agentes inteligentes. O processo de automação é dado pelo conhecimento do ambiente sobre o qual se aplica a automação,  seu estado atual, dos processos que podem ser aplicados nesse ambiente, dos agentes, e das ações e processos que esse pode imprimir nos atuadores.  O ciclo de automação consiste do sensoriamento, processamento (inteligente ou não) e acionamento. Portanto, cada agente deve ser capaz de trabalhar nestes limites, capturando o seu task enviroment, isto é, do conjunto de problemas que deve resolver, definindo "a melhor" ação a ser feita, e acionando os dispositivos ao seu alcance para mudar o estado do ambiente. Seguindo o livro-texto, vamos falar da classificação dos agentes, sempre de "olho nas aplicações" e em especial, am aplicações ligadas a automação. O uso em telemedicina - que ilustra esta seção - é um dos desafios que se apresentam para a inteligência de máquina e IA. 

  • Métodos e paradigmas para resolução de problemas



    Um comportamento consensualmente considerado inteligente é a capacidade de resolver problemas. Portanto, vamos abordar em seguida os tipos principais de problema e os métodos para tratá-los, sempre em busca de método geral para tratar qualquer problema. A diferença entre um sistema algorítmico normal (procedural) e um sistema inteligente está nos métodos de resolução,  isto é, na capacidade de automatizar a resolução destes problemas. Vamos portanto focar nos aspectos conceituais desta automação, e nos algoritmos de apoio, iniciando pelos algoritmos de busca. Estes algoritmos podem ser usados para resolver problemas com um "espaço de estados" pequeno, grande ou até "potencialmente ilimitado", se tivermos alguma indicação de que será possível achar uma solução em um número finito de passos (caso contrário dizemos que o processo de resolução "não-converge"). 

    Na parte prática, vamos dar mais um passo no uso de estruturas em programação lógica, agora usando a estrutura das listas para compor árvores, sobre as quais seriam feitas as buscas.  

  • Algoritmos de Busca não-informada




    Uma maneira de abordar a resolução de problemas por máquinas é, seguindo o paradigma estado transição, e uma vez obtido o espaço de estados,  e admitindo que um desses estados é o ponto de partida e outro a solução desejada, usar os métodos de busca para traçar um caminho que liga o estado inicial ao estado final. Quando não existe uma análise do espaço de estados que possa resultar em heurísticas e/ou propriedades que possam ser usadas para orientar a busca, dizemos que se trata de uma "busca cega".  Algumas propriedades, como o diâmetro do espaço de estados podem também ser usadas para limitar a busca. Todas estas possibilidades podem ser associadas à inferência de propriedades e heurísticas que orientam a escolha das ações e das "transições" de um estado para outro, chamada busca informada, que veremos na próxima aula. Exploraremos nesta aula apenas a busca não-informada e o uso de estruturas já conhecidas como pilhas para guardar a memória do caminho entre o estado inicial e o estado final. Discutiremos brevemente o uso geral de algoritmos de busca na solução de problemas em engenharia, e em especial, em problemas ligados a automação e inteligência artificial.

    Como leitura suplementar acrescentamos um artigo de Allen Newel e Herbert Simon sobre as diferenças entre "Human Problem Solving and Machine Problem Solving". 


  • Algoritmos de Busca Informada




    Na aula passada discutimos conceitualmente as estratégias de resolução de problemas por humanos e máquinas, com o objetivo de fazer uma clara distinção entre os dois processos e deixar claro as limitações da máquina (no caso o computador no seu modelo von Neuman sequencial) para tratar de processos normalmente associados a humanos. A proposta de ter um método geral para resolução de qualquer problema (que discutiremos mais detalhadamente nas próximas aulas) está ligado a esta referência (humana) e é uma discussão antiga, como vimos no histórico das primeiras aulas.

    Partiremos do paradigma estado/transição para tratar do problema da resolução de problemas por máquinas, tomando como exemplo o exercício que foi dado para as equipes recentemente formadas. Discutimos em primeiro lugar os algoritmos de busca não-informada e nas aulas seguintes os algoritmos de busca informada, o conceito de heurística e conhecimento tácito, muito importante para a elaboração de sistemas especialistas. Lembrando que estamos discutindo os conceitos clássicos da IA. 

    Apresentaremos algumas "boas práticas" no desenvolvimento de software para inteligência artificial, novamente tomando como base o exercício-programa que apresentaremos na aula de hoje. 

  • Programando em Prolog - Exercício Programa (Torre de Hanoi)


    Como veremos na aula de hoje, existem cinco linguagens que ocupam a preferência para o desenvolvimento de sistemas, agentes e sistemas inteligentes com uma carga cognitiva voltada para resolução de problemas, assistentes especialistas, supervisorios, etc.  As três primeiras são Python, C++ e Java, que, além de serem usadas em sistemas cognitivos têm papel importante em sistemas de aprendizado e análise de dados. As seguintes seriam LISP e Prolog. Portanto, vamos explorar e exercitar como fazer programas com uma certa carga cognitiva e fazer a transição entre os algoritmos que podem ser implementados em qualquer linguagem, inclusive procedural, como a maior parte dos algoritmos de busca que vimos nas aulas anteriores, e os que vão ser beneficiados e facilitados pela implementação em uma linguagem declarativa. 

    Qualquer que seja o caso ou a aplicação é preciso passar por uma fase de análise do domínio do problema e dos aspectos ditos "inteligentes", mas a escolha da linguagem pode fazer diferença quando se delega à máquina a inferência nos passos para resolver um dado problema.

    =============================================================================

    Configuração das equipes para o exercício-programa:



  • Sistemas Baseados em Conhecimento




    Resumindo o que vimos até aqui sobre resolução de problemas usando Inteligência Artificial podemos estabelecer uma linha evolutiva e histórica, que talvez explique a sucessão de diferentes surtos de popularidade desde a criação o termo Inteligência Artificial em 1956.  Desde o inicio deste processo existiram 3 grandes booms da IA: o primeiro foi marcado pelos métodos e algoritmos de busca e um foco notadamente cognitivo, embora o aprendizado de máquina estivesse presente, especialmente nos programas para jogar damas. Em seguida, tivemos o boom marcado pelos sistemas baseados em conhecimento e pelo sistema especialista, com a perspectiva de ampliação das aplicações da IA para o mercado, o que ocorreu parcialmente. Discutiremos nesta aula este segundo boom e como este influenciou as aplicações atuais.

  • Sistemas Especialistas em Automação




    Nesta aula vamos voltar mais a nossa atenção para a aplicação dos sistemas e agentes inteligentes que vimos até aqui em automação. Temos a abordagem para resolução de problemas com agentes inteligentes, o uso de sistemas de busca e heurística e os sistemas baseados em conhecimento, usando conhecimento tácito e explícito (os sistemas especialistas). As aplicações para esse tipo de sistema têm características bem definidas, como os sistemas logísticos, de diagnóstico, e outros, mas vamos explorar também os sistemas RPA (Robotic Process Automation), que têm características diferentes mas também se encaixam no perfil dos sistemas que podem ser beneficiados com agentes inteligentes.

     

  • Agentes Racionais




    Nesta aula vamos discutir os agentes inteligentes, aplicados em vários processos de automação, desde os sistemas residenciais, de saúde, manufatura e jogos. Portanto vamos unir o que discutimos sobre resolução de problemas em IA com a possibilidade de aplicação de sistemas baseados em conhecimento (knowledge based) em automação. Os sistemas especialistas seriam um caso especial, onde se utiliza conhecimento tácito e explícito conjuntamente.

    A resolução de problemas norteou as aplicações da Inteligência Artificial desde o início do curso, considerando a modelagem do problema, eventualmente usando modelagem discreta e o paradigma estado-transição, acrescentando heurística e conhecimento especialista (tácito). No entanto faltou entender como esse processo é feito e como seria um processo sistêmico de criação destes sistemas. Vamos agora aprofundar um pouco mais esta discussão generalizando o que chamaremos de Sistemas Baseados em Conhecimento, para deixar mais claro este processo, com uma representação direta do conhecimento em regras de produção e um método de inferência baseado em unificação/resolução. 




  • Representação de conhecimento

    What is Knowledge Representation in AI? | Different Techniques | Edureka


    Nesta aula vamos discutir as formas de representação de conhecimento usados em sistemas baseados em conhecimento, concentrado o uso prático nas regras de produção, usando cláusulas de Horn. O desenvolvimento de sistemas inteligentes e de inteligência de máquina passam pela eliciação e representação do domínio do especialista - o ambiente sobre o qual atuará o(s) agente(s) inteligente(s) - para compor a base de conhecimento. A definição do domínio especialista e do domínio de conhecimento é geralmente feita por um Engenheiro de Conhecimento (existem profissionais certificados na área). O próximo passo seria a formalização desse processo compondo a base de conhecimento em uma forma de representação que se adeque à aplicação. Na fase de design o Engenheiro de Sistemas deve compor a base de conhecimento e outras bases de dados parâmetros e possíveis formas de percepção que devem fornecer input para a máquina de inferência e definir com o Engenheiro de conhecimento como alimentar essa máquina de inferência. Finalmente o comportamento do sistema inteligente é inserido em uma jornada do usuário que foi objeto do planejamento inicial da aplicação (requisitos). 

    Embora não seja o centro da discussão nessa aula, veremos que além dos métodos de representação de conhecimento canônicos existem tendências no mercado para o uso de ontologias ou knowledge graph que devem estar no radar das aplicações práticas para automação.


    Para a próxima aula.
     Vocês devem pensar no tema da monografia final sobre aplicações acadêmicas ou de mercado de sistemas inteligentes e submeter o título e uma breve descrição (abstract) de qual será o conteúdo.


  • Mecanismo de inferência

    São as máquinas inteligentes? - Época Negócios | IAgora?

     

    Uma vez determinada a forma básica de representação de conhecimento (uma discussão bem mais longa do que a realizada na aula passada), temos agora de investigar os mecanismos de inferência que poderemos utilizar para implementar sistemas baseados em conhecimento. Estes métodos de inferência são baseados na Lógica de Primeira Ordem (LPO), que dão a base formal para estes processos. Um subconjunto da LPO, a lógica proposicional será de fato utilizada eliminando os quantificadores universal e existencial, e sintetizando as sentenças na forma normal disjuntiva. Como já vimos anteriormente, assumindo que pelo menos uma das sentenças é verdadeira, poderemos reescreve-las em cláusulas de Horn, que é a base da programação lógica em Prolog. 

    Um conjunto de sentenças pode então deduzir novas sentenças usando forward e backward chaining. Com estes recursos estaremos em condição de derivar novas cláusulas e de inferir resultados que podem ser aplicados para resolver problemas. Assim, novas aplicações para sistemas inteligentes podem ser exploradas, que vão além da geração total ou parcial do espaço de estados e da busca informada sobre esse espaço. Nesta aula também começaremos a discutir a resolução de problemas usando IA, agora focado no problema de planejamento inteligente.

  • Planejamento inteligente




     Nesta aula vamos introduzir a base conceitual do planejamento automático,  independente de domínio, isto é, uma abordagem geral para a resolução de problemas (em IA). O ponto mais importante está na relação os processos de planejamento e a modelagem do domínio baseada no paradigma estado-transição, usando sistemas discretos, aplicada aos sistemas automatizados.  Este conceito E a inspiração para o processo de planejamento conhecido como STRIPS (Stanford Research Institute Problem Solver). Nesta aula apresentaremos a base deste algoritmo genérico para a resolução de problemas informalmente, utilizando o problema-modelo do mundo de blocos. 

    O SRI (Stanford Research Institute) se destacou durante os últimos 50 anos na pesquisa em Inteligência Artificial e foi o berço do que chamado planejamento clássico. O interesse maior sempre  foi definir um planejador genérico, independente de domínio de aplicação, que pudesse ser embarcado em sistemas autônomos, como o robô Shakey mostrado na figura acima, da década de 70. Novos métodos de planejamento inteligente continuam a ser discutidos hoje em um evento internacional, o ICAPS, que é anual e reune toda a comunidade de planejamento inteligente do mundo.



  • Explorando o STRIPS



    Nesta aula vamos entrar em mais detalhes sobre o STRIPS que serviu de base conceitual para os métodos atuais de planejamento automático. Os pressupostos do STRIPS são revistos baseado em um artigo do Fikes e Nilsson publicado em 1993 pela revista Artificial Intelligence, uma das mais destacadas na área. O artigo faz um retrospecto do projeto que consolidou o STRIPS, mostrando o esforço de grandes pesquisadores da área como R. Fikes, N. Nilsson, E. Sacerdoti, P. E. Hart, B. Raphael, e outros, envolvidos no projeto do robô Shakey (mostrado na figura que ilustra a aula passada). O objetivo do artigo é destacar a força conceitual do STRIPS e sua base do General Problem Solver (GPS), proposto por Allen Newel e Herbert Simon, que valeu a ambos o Turing Award. Por outro lado é preciso também mostrar as fragilidades do método que foram importantes para simplificar o problema (ou para motivar futuros desenvolvimentos) e direcionar o foco para o "STRIPS monitor" que efetivamente "prova o teoremas" relacionados ao processo de planejamento mas, também podem conduzir a resultados inesperados.

    A anomalia de Sussman, ilustra uma destas fragilidades e foi apresentada por Gerald J. Sussman na durante a elaboração da sua tese de doutorado em 1973, orientada por Marvin Mynsky no MIT. Ao contrário da maioria dos grandes pesquisadores citados Sussman está vivo e ainda atuante no CSAIL (Computer Science and Artificial Intelligence Lab) do MIT. O trabalho dele foi importante para mostrar que é preciso um certo cuidado ao usar implementar planejadores automatizados.

    Embora seja importante destacar as limitações do STRIPS isso não afeta a sua influência conceitual nos planejadores automáticos atuais, todos podem evitar facilmente a anomalia de Sussman.  Uma maneira de evitar esta anomalia é analisar devidamente o espaço de estados, como fizemos no exemplo do problema modelo do mundo de blocos.  Embora seja um caso muito especial, onde o espaço de estados é pequeno o suficiente para ser gerado manualmente, este exemplo mostra didaticamente a força que esse tipo de análise pode ter.  Em termos gerais, o processo de análise do dos domínios - que pode gerar heurística, estados preferenciais, etc. - é chamado de Knowledge Engineering for Planning and Scheduling (KEPS). 

  • Algoritmos de Planejamento



    Nesta aula continuaremos a discussão sobre o principal algoritmo de planejamento automático, o STRIPS, e sua estratégia de implementação. O processo se divide em três etapas: a primeira voltada à análise dos operadores (que foi dada como milestone na aula passada); a segunda voltada para a análise do KEPS (Knowledge Engineering for Planning and Scheduling); e a terceira para o algorítmos de geração do plano (planner), que deve compor o plano final.  Nesta aula trataremos brevemente destas três etapas e na aula que em discutiremos com mais detalhe  a possibilidade de ter metas intermediárias, isto é, fazer um plano para um (ou mais) estado intermediário "atingível" a partir do estado inicial, que está no caminho para o estado final pretendido. Uma espécie de sub-plano. 

    Trataremos também das limitações do algoritmo STRIPS, como método geral para a solução de problemas e como abordagem não-ótima para problemas independentes de domínio. Eventualmente este algoritmo pode receber uma carga adicional de conhecimento específico relacionado a um domínio de aplicação, de modo a resultar em uma aplicação prática acoplada a um domínio. 

  • Desenvolvendo planejadores inteligentes



    Nesta aula vamos finalizar o curso discutindo um aspecto do projeto de sistemas de planejamento que pode ter ficado escondido, dado a ênfase didática na programação. Os problemas reais de planejamento automático são "resolvidos" por um sistema geral composto pelo menos por duas partes essenciais: 

    • o sistema de Engenharia de Conhecimento, focado no estudo do espaço de estados, objetos, recursos, e condições de habilitação das ações; 
    • o planejador, que utiliza do primeiro para achar um plano o mais próximo possível do plano ótimo.

    Esta separação - mesmo sem entrar em detalhes sobre o conteúdo de cada uma (especialmente da primeira), levanta um problema que é a representação de conhecimento usada na fase de Engenharia e estudo do domínio, e sua transferência para a segunda. O ponto de destaque é que precisamos ter certeza que o conhecimento foi inteiramente capturado (sem ambiguidades, de forma fechada) na primeira fase, e que os planejadores (um exemplo foi colocado no nosso exercício programa) devem ser capazes de entender essa mesma representação. Portanto a comunidade de Planning & Scheduling adota como norma o uso da PDDL (Planning Domain Definition Language) e consequentemente, todos os planejadores devem "entender" esta representação. Isso garante fluidez no processo de projeto usando planejamento automático, e é um requisito nas competições mundiais entre planejadores (ou nas competições de sistemas de engenharia de conhecimento para planning, que devem enviar os resultados para vários planejadores.


    Applied Sciences | Free Full-Text | PDDL Planning with Natural  Language-Based Scene Understanding for UAV-UGV Cooperation

     


     


  • Avaliação geral

    Destaque

    O resultado da avaliação está no quadro abaixo, levando em conta os dois exercícios programa e a monografia. As notas acima de 4,5 serão aproximadas para 5,0. O mesmo ocorreria com notas acima de 2,5 - nesse caso aproximadas para 3,0 - para dar a chance da prova de recuperação aos que assim desejarem.  


    AP - aprovado

    RP - reprovado

    RF - reprovado por falta