Sistemas Multi Agente e Aprendizado em Grupos de Semáforos

Ultimamente tenho andado muito ocupado com as aulas e trabalhos do mestrado, além de ter que vincular os estudos com o trabalho. Por isso não tenho postado nada no blog. O que antes já não era muito frequente, agora se tornou raro.

Mas a medida que o tempo vai passando, sinto novamente a necessidade de compartilhar algo, por hobby. Vá que alguém leia, né?

O que vou tentar resumir em poucas linhas, são os Sistemas Multi Agente, uma sub-área da Inteligência Artificial que consiste, resumidamente e a grosso modo, em vários agentes inteligentes com capacidades de realizar tarefas distintas ou não, e interagir entre si, agindo sobre um ambiente.

O ambiente pode ser definido como um agente passivo, que pode ser:

  • Totalmente ou Parcialmente Observável: no primeiro é fornecido acesso completo aos estados do ambiente, no segundo não, sendo necessário que o agente possa guardar informações sobre os estados, caso necessário.
  • Episódico ou Sequencial: em um ambiente sequencial não possui dependência da experiência anterior do agente, já no episódico, a experiência do agente é dividida em episódios. Por episódio podemos definir uma tripla precepção – ação – reação (ou reward).
  • Discreto ou Contínuo: um ambiente discreto possui estados e ações distintas, o ambiente contínuo possui um número de estados e ações tão grande quanto o possível.
  • Determinístico ou Estocástico: no primeiro uma dada ação vai resultar em uma reação específica, no segundo, uma dada ação pode resultar em uma ação específica com uma probabilidade x e pode resultar em outra ação com uma probabilidade 1-x, por exemplo.
  • Estático ou Dinâmico: onde o ambiente pode permanecer inalterado (estático) como resultado das ações, ou o ambiente pode se alterar (dinâmico).
  • Mono ou Multi Agente: referente a um agente ou vários agentes.
     

Neste exemplo, que é baseado em um trabalho publicado pela profª Ana Bazzan (referenciado abaixo), o ambiente é o trânsito, onde foi realizada uma micro simulação, onde um número x de carros passava nas vias, definidas como principais (horizontais) e secundárias (verticais).

Os agentes eram semáforos, que se encontravam nos cruzamentos e observavam o trânsito, e de acordo com o estado percebido podiam mudar seu plano semafórico de modo a diminuir o congestionamento nas vias.

Utilizando Q-Learning, como técnica de aprendizado por reforço, os semáforos aprendiam os melhores resultados e com o tempo podiam optar pela melhor ação possível a ser tomada para diminuir o congestionamento.

Posterior ao aprendizado dos semáforos, havia grupos de supervisores, agentes de alto nível, que observavam as ações tomadas por grupos menores de semáforos adjacentes, após um período de observação, esses agentes supervisores podiam induzir os semáforos a se comportar conforme o melhor resultado observado pelos supervisores.

Mais detalhes estão no artigo que está referenciado.

O que eu fiz?

Bom, o trabalho já estava pronto, o que tive que fazer foi reproduzir os resultados, como forma de avaliação de uma das disciplinas que cursei, o que não é nada trivial dada a complexidade do trabalho como um todo. Objetivando o aprendizado das técnicas envolvidas e o uso do microsimulador de trânsito SUMO (Simulation of Urbanity MObility).

sumo1

Representação de um cruzamento com semáforo

rede-viaria

Congestionamento em uma via

Para interagir com o simulador tive que utilizar a linguagem de programação python, e optei por utilizar o PyBrain, uma biblioteca de inteligência artificial para python, que na minha opinião é um framework, pois ele realiza várias abstrações e prover uma boa metodologia de desenvolvimento aplicado a IA. Uma junção da prática orientada a objetos com MVC orientado a IA, no entanto, ao invés de MVC (Model – View – Controller) das camadas dos Sistemas de Informação, temos o Environment, Agent e Tasks. Detalhes sobre como desenvolver no pybrain são encontrados no site, também referenciado abaixo. Minha contribuição para o pybrain foi desenvolver classes que viabilizasse trabalhar com ambientes multi agente, conforme o diagrama.

framework

Framework Original do PyBrain

multi-agent framework

Minha contribuição

No caso, o PyBrain trabalha com Experiment, Agent, Environment, Task, sendo esse último um relacionamento entre o agente e o ambiente.

Foi desenvolvido um experimento multiagente, que possibilitasse a inclusão de vários agentes. Cada agente possuia uma tarefa sobre o ambiente. Lembrando que o que fiz foi reproduzir os resultados do artigo original que foi desenvolvido em outro simulador o ITSUMO.

Segue o código fonte da reimplementação: http://code.google.com/p/learning-on-traffic-lights/

REFERÊNCIAS

BAZZAN. A.L.C., OLIVEIRA, D., SILVA, B. C. Learning in Groups of Traffic Signals. ScienceDirect. [2010]  http://www.sciencedirect.com/science/article/pii/S0952197609001699

SUMO: http://sumo.sourceforge.net/

PyBrain: http://pybrain.org/

Comentários

Postagens mais visitadas