Monkey Banana Problem in Prolog
Last Updated on June 18, 2024 by Editorial Team
Author(s): Ashani Sansala Kodithuwakku
Originally published on Towards AI.
In my previous Prolog article, we explored fundamental concepts in Prolog and how Prolog stands out as the most popular language for writing symbolic AI programs. Building on that foundation, this article delves into a classic AI challenge: The Monkey Banana Problem, and how it can be elegantly solved using Prolog.
First letβs see what the Monkey Banana Problem isβ¦
Imagine a monkey in a room, eyeing a bunch of bananas hanging from the middle of the ceiling. The monkey wants to get those bananas, but it needs to figure out the exact sequence of moves to reach them efficiently. Shall we help the monkey to grasp the bananas?
This seemingly simple scenario is a classic puzzle in the field of artificial intelligence that illustrates the power of logical problem-solving.
Background of the Problem
There is a monkey in a room with a bunch of bananas hanging from the middle of the ceiling. The room contains a box. The monkeyβs task is to figure out how to use the box to reach the bananas.
However, the monkey is allowed to perform specific actions to get the bananas.
- Monkeys can walk on the floor
- Monkey can push the box
- Monkey can climb on the box
- Monkey can grasp the bananas
But the monkey cannot jump or do any other action. For example, if the monkey is on the box which is at the door, a monkey cannot get the banana since it is not allowed to jump.
To grasp the bananas:
- The monkey must push the box to the middle of the room.
- Then, the monkey must climb onto the box.
- While standing on the box, the monkey can grasp the bananas.
The challenge is to determine the correct sequence of actions that will enable the monkey to achieve the goal.
Approach to Solve the Problem
Normally, any real-world problem can be modeled as a set of states and actions like this:
We can model the problem in terms of states and actions. Normally, first, we model actions and then states.
Letβs model the actions by using the predicate:
move(State1, Action, State2).
Also, we can represent the state of the monkey-like this. It includes the monkeyβs horizontal position, vertical position, and box position, and has/has not grasp the banana.
state(HPos, VPos, BPos, Has/Hasnot).
So, if the monkey performs an action, we can represent it in the below format.
move(state(HPos1, VPos1, BPos1, Has/Hasnot1),
Action,
state(HPos2, VPos2, BPos2, Has/Hasnot2)
).
In order to solve the problem, first, we need to identify the initial state. It is very important to see whether the monkey can reach the bananas.
All possible horizontal positions for the monkey:
- middle
- at door
- at window
All possible vertical positions for the monkey:
- on floor
- on box
All box positions:
- middle
- at door
- at window
Modeling Monkey Banana Problem using Prolog
Letβs write a predicate move for the four actions: Grasp, Climb, Push, and Walk.
Grasp
When the box is at the middle, and the monkey is on the box, and the monkey does not have the banana (has not state), then by doing the grasp action, the state will change from has not state to has state.
move(state(middle, onbox, middle, hasnot),
grasp,
state(middle, onbox, middle, has)).
Climb
When the monkey and the box are at the same horizontal position, by performing the climb action, a monkey can move on to the box.
move(state(P, onfloor, P, H),
climb,
state(P, onbox, P, H)).
Push
When the box and the monkey are in the same vertical position, a monkey can push the box.
move(state(P1, onfloor, P1, H),
push(P1, P2),
state(P2, onfloor, P2, H)).
Walk
Monkey can move one position to another position, by performing the walk action.
move(state(P1, onfloor, B, H),
walk(P1, P2),
state(P2, onfloor, B, H)).
Also, we need to define rules to reach the goal which is the monkey grasp the banana.
R1: canget(state(_, _, _, has)).
R2: canget(State1) :- move(State1, _, State2), canget(State2).
Here, we use another predicate canget(), which will perform the move predicate from state1 to state2 using previously defined four actions. Then, it performs canget() on state2. When the βhasnotβ state becomes βhasβ state, we will stop the execution.
Okay⦠we have modeled the problem in Prolog.
Now, letβs see an example.
Example
? – canget(state (atdoor, onfloor, atwindow, hasnot)).
In this example, the monkey is at the door, the box is at the window, and the monkey does not have the banana. So, our goal state is:
state (middle, onbox, middle, has)
To print the sequence of actions to grasp the banana from a given state, we can slightly modify the code like this.
move(state(middle, onbox, middle, hasnot), grasp, state(middle, onbox, middle, has), [grasp]).
move(state(P, onfloor, P, H), climb, state(P, onbox, P, H), [climb]).
move(state(P1, onfloor, P1, H), push(P1, P2), state(P2, onfloor, P2, H), [push(P1,P2)]).
move(state(P1, onfloor, B, H), walk(P1, P2), state(P2, onfloor, B, H), [walk(P1,P2)]).
canget(state(_, _, _, has), []).
canget(State1, Sequence) :-
move(State1, Move, State2, Action),
canget(State2, SubGoal),
append(Action, SubGoal, Sequence).
We can get the output like this.
Letβs see how the Prolog reaches the goal in each step using a graphical tracer.
Conclusion
The Monkey Banana Problem, while seemingly simple, serves as an excellent example of logical problem-solving in artificial intelligence. By using Prolog, we have illustrated how to model this problem using states and actions, demonstrating Prologβs powerful capabilities in symbolic AI.
If you enjoyed this exploration of the Monkey Banana Problem and want to deepen your understanding of Prolog, check out my previous article, where I covered the fundamental concepts of Prolog programming:
Prolog β Programming in Logic
Declarative Programming Language in Artificial Intelligence
pub.towardsai.net
Join thousands of data leaders on the AI newsletter. Join over 80,000 subscribers and keep up to date with the latest developments in AI. From research to projects and ideas. If you are building an AI startup, an AI-related product, or a service, we invite you to consider becoming aΒ sponsor.
Published via Towards AI