Exploring Multiple Solutions and Backtracking in Prolog Programming

21 Oct 2023 Balmiki Mandal 0 Prolog Programming language

Multiple solutions and backtracking in Prolog programming

Multiple solutions

Prolog can find multiple solutions to a query by backtracking. Backtracking is a search algorithm that tries all possible solutions to a problem until it finds one that works. When Prolog reaches a point where a goal cannot be proved, it backtracks to the previous goal and tries another solution.

To find multiple solutions to a query, we simply type the query and press semicolon (;) after each solution. For example, consider the following Prolog database:

Prolog
eats(fred, pears).
eats(fred, t_bone_steak).
eats(fred, apples).

If we ask the following query:

Prolog
?- eats(fred, FoodItem).

Prolog will return the following solutions:

FoodItem = pears
FoodItem = t_bone_steak
FoodItem = apples

To find more solutions, we can simply press semicolon after each solution. Prolog will then backtrack and try the next possible solution.

Backtracking

Backtracking is a powerful feature of Prolog that allows it to solve a wide range of problems. However, it can also be a source of inefficiency. For example, if we ask Prolog to find all solutions to the following query:

Prolog
?- solve_puzzle(Puzzle).

and the puzzle has 10 possible solutions, Prolog will have to try all 10 solutions before it can find the correct one. This can be time-consuming, especially for large and complex problems.

To improve the efficiency of backtracking, we can use a number of techniques, such as:

  • Heuristics: Heuristics are rules of thumb that can be used to guide the search process. For example, we could use a heuristic to tell Prolog to try the most promising solutions first.
  • Cutting: Cutting is a Prolog predicate that prevents Prolog from backtracking past a certain point. This can be useful to avoid unnecessary backtracking.
  • Tabling: Tabling is a Prolog feature that allows Prolog to store the results of previous computations. This can help to avoid recomputing the same results multiple times.

Example

The following Prolog program solves the eight queens puzzle:

Prolog
eight_queens(Puzzle) :-
  place_queen(Puzzle, 1).

place_queen(Puzzle, Row) :-
  Row < 9,
  place_queen(Puzzle, Row, 1),
  Row = 9.

place_queen(Puzzle, Row, Col) :-
  Col < 9,
  not(attacking(Puzzle, Row, Col)),
  place_queen(Puzzle, Row, Col + 1),
  Col = 9.

attacking(Puzzle, Row, Col) :-
  member(Queen, Puzzle),
  Queen = Row,
  Queen \= Col ;
  member(Queen, Puzzle),
  Queen = Row - Col,
  Queen \= 0 ;
  member(Queen, Puzzle),
  Queen = Row + Col,
  Queen \= 0.

This program works by recursively placing queens on the chessboard, starting with the first row and column. At each step, the program checks to make sure that the queen is not attacking any other queens on the board. If the queen is not attacking any other queens, the program places the queen on the board and proceeds to the next row and column.

To find all solutions to the eight queens puzzle, we can simply type the following query:

Prolog
?- eight_queens(Puzzle).

Prolog will then backtrack and find all possible solutions to the puzzle.

Conclusion

 

Multiple solutions and backtracking are two powerful features of Prolog that allow it to solve a wide range of problems. However, it is important to be aware of the potential for inefficiency when using backtracking. There are a number of techniques that can be used to improve the efficiency of backtracking, such as heuristics, cutting, and tabling.

Enroll Now: 

Prolog Programming language Scratch to advance 2023 - 2024] "Start Supercharging Your Productivity!"

Contact Us:

  • For any inquiries, please email us at [[email protected]].
  • Follow us on insta  [ electro4u_offical_ ] for updates and tips.
Note: If you encounter any issues or specific errors when running this program, please let me know and I'll be happy to help debug them

 

BY: Balmiki Mandal

Related Blogs

Post Comments.

Login to Post a Comment

No comments yet, Be the first to comment.