One form of abstraction that is very useful is to disregard particulars of a problem.
For instance, when designing an agent to find a route from one town to another, you ignore most of the details you may know about each town (population, weather, food, etc).
Other tasks can be achieved without searching whatsoever e.g., multiplying two large numbers together - you wouldn't dream of searching through the number line until you came across the answer!
There are three initial considerations in problem solving (as described in Russell and Norvig): An operator is a function taking one state to another via an action undertaken by the agent.
If you can think of the task you want your agent to perform in these terms, then you will need to write a problem solving agent which uses search.
It is important to identify the scope of your task in terms of the problems which will need to be solved.Suppose the problem we had set our agent was to find a name for a newborn baby, with some properties.In this case, there are lists of "accepted" names for babies, and any solution must appear in that list, so goal-checking amounts to simply testing whether the name appears in the list.In chess, on the other hand, the goal is to reach a checkmate.While there are only a finite number of ways in which the pieces on a board can represent a checkmate, the number of these is huge, so checking a position against them is a bad idea.As your search agent becomes more sophisticated, you may give it more information to produce better routes.For example, the population of a town may affect the volume of traffic, which will affect the time taken to drive through the town.The series of actions that the agent actually performs is its search path, and the final state is a solution if it has the required property.There may be many solutions to a particular problem.Rather, the point of the search is to find a path, so the agent must remember where it has been.The answer is, of course: (FILL IN THIS GAP AS AN EXERCISE).