Você está na página 1de 3

PROBLEMA 1: Missionários e Canibais.

Em uma margem do rio Mordas estão três missionários e três canibais. Há um barco

disponível que pode acomodar até duas pessoas e que eles gostariam de usar para

atravessar o rio. Se o número dos canibais superar o dos missionários em qualquer uma das

margens do rio, os missionários serão comidos. Assim que, como pode o barco ser usado

para transportar com segurança todos os missionários e canibais para a outra margem do

rio?

Descrição do Problema:

O problema dos missionários e canibais é um quebra-cabeça clássico que envolve três missionários e
três canibais em uma margem de um rio, com um barco disponível que pode acomodar até duas
pessoas. O objetivo do problema é transportar todos os missionários e canibais para a outra margem do
rio com segurança, sem deixar que o número de canibais em qualquer margem supere o número de
missionários.

Estado Inicial e Estado Final:

O estado inicial é quando os três missionários e três canibais estão todos em uma margem do rio, e o
estado final é quando todos eles conseguem atravessar para a outra margem em segurança.

Abordagem do trabalho:

Para resolver o problema dos missionários e canibais, pode-se utilizar a abordagem de algoritmos de
busca, como a busca em profundidade limitada ou a busca em largura. O agente utilizado pode ser um
agente de busca simples que recebe o estado inicial do problema e busca em uma árvore de
possibilidades até encontrar o estado final.

Antes de começar a implementação do algoritmo IDA *, precisamos definir o estado inicial e final do
problema. O estado inicial é quando os três missionários e três canibais estão todos em uma margem do
rio, e o estado final é quando todos eles conseguem atravessar para a outra margem em segurança.

Para resolver este problema, precisamos definir as seguintes ações possíveis:


Um missionário sozinho pode atravessar o rio

Um canibal sozinho pode atravessar o rio

Dois missionários podem atravessar o rio juntos

Dois canibais podem atravessar o rio juntos

Um missionário e um canibal podem atravessar o rio juntos

Podemos criar uma representação do estado atual do problema usando um vetor ou matriz para indicar
a quantidade de missionários e canibais em cada margem do rio, bem como a posição do barco. A partir
desse estado inicial, podemos usar o algoritmo IDA * para encontrar a sequência de ações que leva a
solução do problema.

O algoritmo IDA * é uma versão otimizada do algoritmo de busca em profundidade limitada, que utiliza
uma heurística para determinar a próxima ação mais promissora. Ele funciona mantendo uma pilha de
estados a serem explorados, e expande cada estado para verificar se ele leva à solução. Se a solução não
for encontrada, o algoritmo aumenta o limite de profundidade e continua a busca até que a solução seja
encontrada.

Para implementar o algoritmo IDA * em Java, você pode seguir o seguinte pseudocódigo:

// Define o estado inicial e final do problema

Estado inicial = {3, 3, 1}; // três missionários e três canibais em uma margem

Estado final = {0, 0, 0}; // todos atravessaram para a outra margem

// Define as ações possíveis

Ação[] ações = {new Ação(1, 0), new Ação(0, 1), new Ação(2, 0), new Ação(0, 2), new Ação(1, 1)};

// Define a função de heurística

int heurística(Estado estado) {

// retorna o número de missionários e canibais na margem oposta ao barco


return estado[2] * (estado[0] + estado[1]);

// Define a função de busca IDA *

Estado buscaIDA(Estado estadoAtual, int profundidade, int limiteProfundidade) {

if (estadoAtual.equals(final)) {

// Solução encontrada, retorna o estado final

return estadoAtual;

} else if (profundidade >

Bibliografia:

Russell, S., & Norvig, P. (2010). Artificial Intelligence: A Modern Approach. Prentice Hall.

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms. MIT Press.

Você também pode gostar