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.
As aulas presenciais serão na sala A-05, prédio da Engenharia Mecânica, Naval e Mecatrônica.
-
Ask Yourself These Questions About the Next Rogue-AI Story
6 ways to interrogate an AI panic
Um exemplo de como se propaga informações nem sempre confiáveis sobre o papel e o potencial da IA no mundo.
-
Começaremos com uma discussão sobre inteligência e seus pressupostos, para delimitar expectativas e dimensionar corretamente o que se pode esperar dos sistemas inteligentes. Estamos em uma época marcada por um "corte epistemológico" entre sistemas funcionais e sistemas flexíveis e interativos (inteligentes) associados às diversas áreas do conhecimento. Portanto, é importante separar claramente o que se chama de "digital mind" ou inteligência computacional - 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, para introduzir o conceito de agente inteligente, fundamental para a inteligência de máquina, embarcada ou distribuída.
O curso está dividido em uma parte teórica e uma parte prática. A parte prática envolve o desenvolvimento de pequenos programas em Programação Lógica, e será feita no ambiente SWISH Prolog. O sistema pode ser baixado do link https://www.swi-prolog.org ou usado online via browser. O objetivo é entender as diferenças entre a programação procedural, feita por exemplo em Python e a programação lógica e como seria o desenvolvimento de sistemas baseados em conhecimento. O objetivo não é se aprofundar em programação lógica mas deixar clara a diferença entre o desenvolvimento de sistemas procedurais com inteligência computacional e sistemas inteligentes.
-
Link para ambiente de programação SWISH Prolog do D-Lab.
-
Tutorial para programação em Prolog
-
Link para o tutorial em português sobre programação em Prolog
-
-
Telemedicina: um novo desafio para a IA
Antes de tratar da resolução de problemas usando IA, precisamos identificar os agentes responsáveis por este processo. Este tópico significou um divisor de águas no desenvolvimento da IA e na sua relação com os sistemas automatizados. O conceito de agentes, especialmente agentes inteligentes e seus diferentes tipos é essencial para termos uma referencia sobre o design de sistemas automatizados dotados de inteligência artificial. O ciclo de automação consiste do conhecimento sobre o ambiente sobre o qual se aplica a automação (environment), sobre os estados que pode atingir, sobre a dinâmica dos processos que alteram os estados do ambiente (apenas uma ou uma sequencia de ações). A "inteligência" do sistema (computacional ou artificial) consiste na escolha adequada das ações de modo a responder a uma demanda do environment, da manutenção de um modelo, da mudança para um dado estado objetivo ou para a manutenção de um serviço. A aplicações são bastante diversificadas e vão desde a manufatura inteligente aos serviços - incluindo o apoio aos processos educacionais.
Nesta aula vamos tratar prioritariamente da identificação e classificação dos agentes.
-
slides da Aula2
-
Defina com os seus colegas um grupo de até quatro integrantes e poste nesse link a definição do grupo com os respectivos nome e número USP. Só um membro do grupo precisa fazer o upload do documento.
Vocês podem rever a formação dos grupos até a próxima sexta, mas busquem otimizar o número de grupos, evitando ter menos de três alunos por grupo. Submetam a formação dos grupos em arquivo PDF.
-
Um comportamento considerado inteligente por todos é a capacidade de resolver problemas. Portanto, vamos nos preparar para trabalhar com agentes que interagem e com o seu environment de diferentes maneiras e podem resolver diferentes classes de problemas . O "agent program" faz com que um agente assuma um certo tipo de comportamento e com isso interaja com o environment deve ser substancialmente diferente de um algorítmico procedural, e devemos usar programação lógica (Prolog) para marcar essa diferença, ainda que na prática, para sistemas de maior porte, seja necessário ter um tratamento diferente. Portanto, nessa aula vamos rever o comportamento dos agentes - dentro da abordagem moderna proposta pelo livro texto - e também algumas noções básicas de Prolog que permitirão fazer os primeiros exercícios.-
slides da Aula3
-
-
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, escolher um desses estados como ponto de partida e outro a solução desejada, para então usar os métodos de busca e 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 orientar a busca, dizemos que se trata de uma "busca cega", e esta pode ser feita usando algoritmos de busca já conhecidos, como a busca em profundidade ou largura. Nesse caso, nenhuma informação sobre a natureza do estado ou sobre a escolha dos caminhos (geralmente em uma estrutura de árvore) precisam ser considerados. Por outro lado, esses algoritmos podem ser implementados usando programação procedural, e constituem inteligência computacional. Por outro lado, essa estrutura computacional nos dá uma base para inserir informação no processo de busca, como as heurísticas, transpondo o limite do procedural.
Para trazer esses algoritmos para a programação lógica precisamos tratar das estruturas de dados em Prolog. Vamos inserir a estrutura de listas e com ela representar árvores e grafos direcionados. Um programa simples de roteamento de trajetória pode ser feito sobre esta base.
Como leitura suplementar acrescentamos um artigo de Allen Newel e Herbert Simon sobre as diferenças entre "Human Problem Solving and Machine Problem Solving".
-
Em matéria de 9 de setembro do ano passado o New York Times anuncia o lançamento de um sistema de Inteligência Artificial que escreve código em 12 linguagens diferentes e traduz de uma para outra. Esta é sem dúvida uma tarefa importante para um sistema inteligente e um grande alívio para quem tem uma certa preguiça de escrever código.
Veja o artigo
-
Reportagem da Computer Weekly de 11 de Agosto de 2022.
-
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. No momento, o nosso foco é com os métodos clássicos baseados em busca, saindo da busca cega (que pode ser implementada con inteligência computacional) para a introdução de heurísticas e conhecimento tácito.
Os algoritmos serão apresentados usando como exemplo jogos como o 8-puzzle e os sistemas de roteamento de veículos, tratados de uma forma muito simples e direta.
-
Vejam um livro muito interessante da Pamela McCorduk, professora dos cursos de Inteligência Artificial em Stanford.
-
Slides da Aula5
-
Esta é a formação atual dos grupos, falatando a confirmação do grupo 17 (o último). Por favor confiram a tabela. Lembro que a partir da aula desta quarta-feira começaremos a discutir o primeiro exercício-programa. Os grupos devem permanecer os mesmos até o final do curso.
-
-
O nosso próximo passo é aplicar heurísticas e a função de avaliação aos algoritmos de busca, gerando um processo de busca informada. Passaremos pelo Best-First, Greedy Best-First e A*. O objetivo, como vimos na aula passada, é melhorar a performance destes algoritmos, estimada em O(bd), reduzindo o coeficiente "d" associado à profundidade da árvore de busca. Esta é a primeira abordagem para resolução automática de problemas, bem próxima dos métodos procedurais.
Para implementar uma solução veremos a base do algoritmo de busca, baseada na referência do livro Artificial Intelligence: a New Synthesis, de Nils Nilsson, e sobre esta base vamos inserir as heurísticas como forma de priorizar a busca. Portanto, sobre a mesma base podemos gerar diferentes algoritmos e esse será o objetivo do primeiro exercício programa.
-
Slides da Aula 6
-
-
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 com um foco notadamente cognitivo. Embora o aprendizado de máquina estivesse presente, especialmente nos programas para jogar damas, dependia muito de capacidade de processamento, e parte da comunidade da época apostava na evolução do trabalho do Marvin Minsky sobre os neurônios artificiais. O segundo boom foi nos anos 80, basedo nos sistemas especialistas. Nessa época se propagou a demanda de aplicaçã de sistemas inteligantes em processos práticos, especialmente o roteamento de veículos, processos quimicos, sistemas de diagnóstico, etc. Havia ainda um gargalo na capacidade de processamento, mas justamente nessa época surgiram as "workstations" para ampliar a capacidade dos PCs correntes provendo uma quantidade substancialmente maior de memória RAM.
-
Slides da Aula7
-
Artigo de revisão sobre aplicações modernas de sistemas especialistas. No caso específico na montagem de uma biblioteca digital, substituindo as bibliotecas convencionais.
-
Demo de um sistema de triagem e diagnóstico médico feito com base em IA, estatística e interface com linguagem natural.
-
Faça o upload do seu exercício-programa: uma arquivo em PDF com a análise e comparação da execução do algoritmo com R=0 e depois com R=1 e W=1, e também o link pra o SWISH Prolog onde está o programa feito pelo seu grupo. Apenas um membro do grupo precisa submeter o exercício, mas por favor lembrem de colocar o nome do grupo todo.
-
Poste a sua dúvida sobre o exercíciop-programa
-
-
Nesta aula vamos voltar a nossa atenção para a aplicação dos sistemas e agentes inteligentes em sistemas de automação. Temos uma abordagem preliminar para resolução de problemas com agentes inteligentes, baseado em sistemas de busca heurística e já começamos a discutir 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, assistivos e outros, e a abordagem deve portanto ser genérica.
-
Noticia divulgada pelo Select Game, um site especializado em noticias sobre games, com conteúdo técnico sofrível, mas sempre bem cuidado e sem exageros.
-
-
O primeiro "boom" da IA está associado à resolução de problemas usando técnicas de busca e busca informada ou heurística. Vamos passar ao segundo "boom", baseado em sistemas lógicos, ou sistemas que trabalham sobre bases de conhecimento. Historicamente o período desse segundo "boom", os anos 80, coincidiu também com uma difusão da IA para aplicações comerciais e industriais, criando também uma grande expectativa por resultados. Para explorar esse tipo de aplicação precisaremos entender como funciona uma máquina de inferência. Existe uma aboradagem formal para isso, mas tentaremos chegar a um bom entendimento do processo sem seguir esse formalismo (o livro texto traz uma descrição mais formal), mas também sem atropelar o formalismo. Tarefa muito difícil!
-
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).
Falaremos também sobre as opções de linguagem e sobre a fusão da linguagem Prolog com Java, C, e especialmente com Python.
Redefinimos o nosso cronograma de atividades até o final do semestre, e também os prazos de entrega dos próximos exercícios-programa.
-
Uma vez escolhida a forma básica de representação de conhecimento (entre as que foram apresentadas na aula passada), temos agora de investigar como desenvolver um sistema especialista, passando pelas fases essenciais do processo de design. Na aula passada já apresentamos um roteiro de montagem de arquitetura em quatro fases, destacando o papel do usuário (modelado como receptor e alvo do processo), do especialista no domínio (de onde se deverá extrair as heurística e o conhecimento tácito), do engenheiro de conhecimento (que deve montar a base de conhecimento de modo a atender a demanda da fase 1), e o engenheiro de sistemas (que deve cuidar do processo como um todo, incluindo perceptrons, tratamento dos dados de entrada, interface, acoplamento com a máquina de inferência ou extensão desta, e do fechamento da jornada do usuário com o feedback apropriado).
Os elementos da equipe devem passar por todas essas fases em momentos distintos para que possamos atingir os objetivos didáticos. Portanto a identificação de papeis distintos não implica na "distribuição" destas atividades.
===========================================================================
O exercício-programa com um sistema especialista para a matrícula dos alunos de Engenharia Mecatrônica no terceiro semestre deve ser entregue na próxima aula, quarta-feira, dia 8/11, à meia-noite.
-
Faça o upload do relatório descrevendo como fez o segundo exercício progrma, especialmente o conhecimento especialista, e inclua o link para o SWISH Prolog onde está o seu programa.
-
Devido ao rearranjo do cronograma, vamos concluir a discussão sobre os mecanismos de inferência, sem um aprofundamento maior que incluiria o modelo de unificação/resolução usado em programação lógica. Com essa conclusão sucinta vamos fazer a passagem para os agentes baseados em objetivo e para a terceira fase da disciplina, onde o foco seria o planejamento inteligente (AI planning).
O objetivo é caracterizar os conceitos que envolvem um problema de planejamento automático (inteligente), o que embasará a busca por métodos de resolução de problemas, ou pelo menos de uma classe especial de problema: os problemas de planejamento. Existem várias aplicações práticas para essa abordagem, mas vamos concluir com um problema modelo, que dará a base intuitiva para a proposta de um algoritmo para planejamento automático: o problema do mundo de blocos. Este será também o foco do nosso terceiro exercício-programa.
-
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 é a relação entre os processos de planejamento e a modelagem do domínio baseada no paradigma estado-transição, aplicada aos sistemas automatizados. Este conceito é a base para um processo geral de planejamento e resolução de problemas conhecido como STRIPS (Stanford Research Institute Problem Solver). Nesta aula apresentaremos a base deste algoritmo genérico 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 chamado planejamento clássico. O interesse maior sempre foi em 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, criado na década de 70. Novos métodos de planejamento inteligente continuam a ser discutidos hoje em um evento internacional, o ICAPS, um evento anual que reune toda a comunidade de AI Planning e Secheduling.
-
Aplicações de Automated Planning em Engenharia de Software: arquitetura e manutenção.
-
Aplicações de Automated Planning em logística em ambientes industriais.
-
-
Na aula passada discutimos de forma bem intuitiva o problema-modelo do mundo de blocos. Hoje vamos generalizar o problema de planning e os conceitos relacionados. O problema do mundo de blocos e sua conceituação simples devem então se encaixar nesse modelo geral pela introdução de reduções e simplificações. Assim, podemos mostrar que estamos ainda no mesmo domínio de problema, mas em uma categoria bem mais simples e mais direta, o que nos permite evitar o tratamento mais formal. A ideia é enfatizar que temos uma classe de problemas que ainda tem uma certa complexidade mas que pode ser minorada pela introdução de uma análise (formal) do espaço de estados, resultando em heurístcas e/ou em um conjunto de regras que compõem uma base de conhecimento (KB). Portanto o nosso desafio é introduzir este KB em um problema simples como o mundo de blocos e evitar algumas situações críticas como a Anomalia de Sussman.
A anomalia de Sussman foi proposta 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 implementar planejadores automatizados, especialmente se os estados são percorridos e analisados linearmente.
Embora seja importante destacar as limitações do STRIPS isso não afeta a sua influência conceitual nos planejadores automáticos atuais. Propostas mais recentes ou são inspiradas no STRIPS, no relaxamento de algumas de suas propriedades, ou das restrições feitas sobre a definição geral dos problemas de planning para chegar no STRIPS ou no mundo de blocos. Evidentemente, as aplicações práticas são bem mais sofisticadas que esse problema-modelo.
3o. exercício programa
O terceiro exercício programa consiste em fazer um planejador para o mundo de blocos.
O Mundo de Blocos é um sistema estado-transição (um T-system) composto por três blocos identificados pelas letras a, b, e c, que podem ser dispostos em diferentes arranjos, como mostrado na aula de hoje. O espaço de estados é finito e, evolui pela aplicação de uma ação provocada por um robô manipulador que, uma vez instanciada com os blocos (ou a mesa) torna-se um operardor responsável pela mudança de estados (o conjunto de eventos é vazio).
Faça um planejador (um programa em Prolog) que recebe como demanda o estado inicial e final do mundo de blocos, e, usando o operador move acha um caminho no grafo de estados entre um e outro. O programa deve seguir as seguintes restrições:
1. estados são representados por uma lista de predicados sobre o posicionamento dos blocos (como visto em aula);
2. o plano (feito offline) é uma string (uma lista) de operadores que leva do estado inicial ao estado final;
3. É parte ESSENCIAL do exercício usar conhecimento adquirido pela análise do espaço de estados (mesmo nesse exemplo simples) de modo a aproximar a solução do ótimo e evitar problemas como a anomalia de Susseman.
Como sempre a entrega é um arquivo PDF com a descrição básica do algoritmo e o iink para o SWISH Prolog onde está o programa.
ENTREGAR ATË o dia 13 de dezembro à meia noite VIA e-disciplinas.-
R. E. Fikes, N. J. Nilsson, STRIPS, a retrospective, Artificial Intelligence, 59, pp. 227-232, Elsevier, 1993
-
-
Vamos retomar a discussão sobre a definição geral de AI Planning para falar muito brevemente de aplicações práticas e das simplificações a serem feitas para destacar o papel de problemas-modelo como o do mundo de blocos. No caso o principal foco será associar o desenvolvimento de um planejador ao processo de Engenharia de Conhecimento e consequentemente a um projeto de automação. Assim, mostraremos como, para um problema simples, com um espaço de estados muito simples e finito e um transition graph limitado, poderemos, mesmo assim, extrair elementos para uma base de conhecimento capaz de orientar a escolha das ações e também a proximidade da solução do que seria uma solução ótima. Um processo similar é feito em várias aplicações práticas, mas com um grau de complexidade muito maior.
Além de mostrar o uso da Engenharia do conhecimento associado ao algoritmo STRIPS vamos também trabalhar nas habilidades e criar um algoritmo, isto é, um planejador, nos moldes discutidos na aula passada. Discutiremos parte do código nessa aula e também orientação de como criar o restante desse código.
-
Deposite o seu exercício-programa em arquivo PDF, onde pode comentar aspectos de design do seu planejador e as escolhas feitas para compor o programa, e também o link para o local onde está depositado o programa. Não será possível admitir links via e-mail, o quadro de notas é composto pelas submissões feitas ao e-disciplinas.
-
O resultado da avaliação está no quadro abaixo, levando em conta os exercícios programa.
Avaliação PMR3510 Grupo
Mile1
Mile2
Mile3
Final
Grupo 1
Jefferson Junior Ramirez
Lucas Borba
Maria Fernanda Rezende
Nathan Aguiar Carvalho9
7
9
8,3
Grupo 2
Vinícius Hideki Inomata
Gabriel Ribeiro de Carvalho
Gabriel Gelli Checchinato
Carlos Eugenio Lucas6
3
8
5,7
Grupo 3
Lucas Morais de Souza
Lucas Song
Lucas Zago Barreto da Silva
Roberto Gabriel Gondim Sobral6
0
9
5
Grupo 4
Enzo Klautau Gomes
---------------------------------Henrique Gropelli
Pedro Henrique de Oliveira Lima
Rafael Augusto Amorim Ribeiro5,5
7
6
-----
4
6,1
5,5
Grupo 5
Arthur Ferreira Banhos
Bruno Uchôa Brandão e Silva
Gianlucca Berardi
Rayan Luz Ralile6
7
7
6,7
Grupo 6
Enzo Giannoni de Oliveira
César Ferreira Magnanini
Enrico Rocha Soares
Tiago de Lucas Barbosa
Bruno Tyszler6
2
7
5
Grupo 7
Arthur Daisuke Yamaguchi
Eduardo Figueiredo Lindemberg
Felipe Russo Buttler
Lucas Vilela Spartani de Godoy4
3
6
4,3
Grupo 8
**
Bruno Rodrigues Chiqueto
Matheus Rigone Romano4
7
4
5
Grupo 9
Fernando Ferreira Doria
José Rafael Souza do Nascimento
Patrick Vignol Baptista
Raphael de Souza Cibulka6
8
6
6,7
Grupo 10
*
Alisson Tulino Brito
Gabriel Emidio dos Santos
Igor Schroter Salviatto
Victor Marques de Almeida0
0
0
0
Grupo 11
Luan Gustavo de Britto
Marcos Vinicius Ramos Mulari
Vitor Amaral Kiguchi
Arthur Calabresi7
6
7
6,8
Grupo 12
João Gabriel Guimarães Coelho
Matheus Tierro de Paula
Jorge Henrique Losso Giglio
Higor Felipe de Almeida Silva5
7
9
7
Grupo 13
Matheus Dias Coelho Gonçalves
João Pedro de Baptista Guimarães
Gustavo Satler Soares
Tomas Gorescu Caldeira6
0
6
4
Grupo 14
Raphael Akira Okamura Ferro
Sophia Celine Rafael Alves Pereira
Vicente Valério Brusamolin
Willlynston Melendez9
4
9
7,3
Grupo 15
Henrique de Oliveira
Gabrielly Ferreira Gama
Leonardo Carvalho Franzin
Eduardo Marques Terra5
0
4
3
Grupo 16
*
Lucas Oliveira Santarosa Martins
Mateus Garcia Dias Duarte
Vinicius Russel Donadan3
0
3
2
Grupo 17
*
Felipe Arthur Eckert
Carlos Matheus Neto0
0
0
0