AI Book
AI Book
AI Book
According to the father of Artificial Intelligence, John McCarthy, it is “The science and
engineering of making intelligent machines, especially intelligent computer programs”.
AI is accomplished by studying how human brain thinks, and how humans learn, decide, and
work while trying to solve a problem, and then using the outcomes of this study as a basis of
developing intelligent software and systems.
An AI system is composed of an agent and its environment. The agents act in their
environment. The environment may contain other agents.
An agent is anything that can perceive its environment through sensors and acts upon that
environment through effectors.
A human agent has sensory organs such as eyes, ears, nose, tongue and skin parallel
to the sensors, and other organs such as hands, legs, mouth, for effectors.
A robotic agent replaces cameras and infrared range finders for the sensors, and
various motors and actuators for effectors.
A software agent has encoded bit strings as its programs and actions.
Agent Terminology
Rationality
Rationality is concerned with expected actions and results depending upon what the agent has
perceived. Performing actions with the aim of obtaining useful information is an important
part of rationality.
An ideal rational agent is the one, which is capable of doing expected actions to maximize its
performance measure, on the basis of
A rational agent always performs right action, where the right action means the action that
causes the agent to be most successful in the given percept sequence. The problem the agent
solves is characterized by Performance Measure, Environment, Actuators, and Sensors
(PEAS).
They use a model of the world to choose their actions. They maintain an internal state.
They choose their actions in order to achieve goals. Goal-based approach is more flexible
than reflex agent since the knowledge supporting a decision is explicitly modeled, thereby
allowing for modifications.
There are conflicting goals, out of which only few can be achieved.
Goals have some uncertainty of being achieved and you need to weigh likelihood of
success against the importance of a goal.
Some programs operate in the entirely artificial environment confined to keyboard input,
database, computer file systems and character output on a screen.
In contrast, some software agents (software robots or softbots) exist in rich, unlimited
softbots domains. The simulator has a very detailed, complex environment. The software
agent needs to choose from a long array of actions in real time. A softbot designed to scan the
online preferences of the customer and show interesting items to the customer works in the
real as well as an artificial environment.
The most famous artificial environment is the Turing Test environment, in which one real
and other artificial agents are tested on equal ground. This is a very challenging environment
as it is highly difficult for a software agent to perform as well as a human.
Turing Test
The success of an intelligent behavior of a system can be measured with Turing Test.
Two persons and a machine to be evaluated participate in the test. Out of the two persons,
one plays the role of the tester. Each of them sits in different rooms. The tester is unaware of
who is machine and who is a human. He interrogates the questions by typing and sending
them to both intelligences, to which he receives typed responses.
This test aims at fooling the tester. If the tester fails to determine machine’s response from
the human response, then the machine is said to be intelligent.
Properties of Environment
Discrete / Continuous − If there are a limited number of distinct, clearly defined, states of
the environment, the environment is discrete (For example, chess); otherwise it is continuous
(For example, driving).
Static / Dynamic − If the environment does not change while an agent is acting, then it is
static; otherwise it is dynamic.
Single agent / Multiple agents − The environment may contain other agents which may be
of the same or different kind as that of the agent.
Accessible / Inaccessible − If the agent’s sensory apparatus can have access to the complete
state of the environment, then the environment is accessible to that agent.
Search Algorithms
Problem-solving agents:
Following are the four essential properties of search algorithms to compare the efficiency of
these algorithms:
Optimality: If a solution found for an algorithm is guaranteed to be the best solution (lowest
path cost) among all other solutions, then such a solution for is said to be an optimal solution.
Time Complexity: Time complexity is a measure of time for an algorithm to complete its
task.
Space Complexity: It is the maximum storage space required at any point during the search,
as the complexity of the problem.
Based on the search problems we can classify the search algorithms into uninformed (Blind
search) search and informed search (Heuristic search) algorithms.
Uninformed/Blind Search:
The uninformed search does not contain any domain knowledge such as closeness, the
location of the goal. It operates in a brute-force way as it only includes information about
how to traverse the tree and how to identify leaf and goal nodes. Uninformed search applies a
way in which search tree is searched without any information about the search space like
initial state operators and test for the goal, so it is also called blind search. It examines each
node of the tree until it achieves the goal node.
Breadth-first search
Uniform cost search
Depth-first search
Iterative deepening depth-first search
Bidirectional Search
Informed Search
A heuristic is a way which might not always be guaranteed for best solutions but guaranteed
to find a good solution in reasonable time.
Informed search can solve much complex problem which could not be solved in another way.
1. Greedy Search
2. A* Search
1. Breadth-first Search
2. Depth-first Search
3. Depth-limited Search
4. Iterative deepening depth-first search
5. Uniform cost search
6. Bidirectional Search
1. Breadth-first Search
Breadth-first search is the most common search strategy for traversing a tree or
graph. This algorithm searches breadthwise in a tree or graph, so it is called
breadth-first search.
BFS algorithm starts searching from the root node of the tree and expands all
successor node at the current level before moving to nodes of next level.
The breadth-first search algorithm is an example of a general-graph search
algorithm.
Breadth-first search implemented using FIFO queue data structure.
Advantages:
Disadvantages:
It requires lots of memory since each level of the tree must be saved into memory
to expand the next level.
BFS needs lots of time if the solution is far away from the root node.
Example:
In the below tree structure, we have shown the traversing of the tree using BFS algorithm
from the root node S to goal node K. BFS search algorithm traverse in layers, so it will follow
the path which is shown by the dotted arrow, and the traversed path will be:
S---> A--->B---->C--->D---->G--->H--->E---->F---->I---->K
Time Complexity: Time Complexity of BFS algorithm can be obtained by the
number of nodes traversed in BFS until the shallowest Node. Where the d= depth of
shallowest solution and b is a node at every state.
Space Complexity: Space complexity of BFS algorithm is given by the Memory size of
frontier which is O(bd).
Completeness: BFS is complete, which means if the shallowest goal node is at some finite
depth, then BFS will find a solution.
Optimality: BFS is optimal if path cost is a non-decreasing function of the depth of the node.
2. Depth-first Search
Depth-first search isa recursive algorithm for traversing a tree or graph data
structure.
It is called the depth-first search because it starts from the root node and follows
each path to its greatest depth node before moving to the next path.
DFS uses a stack data structure for its implementation.
The process of the DFS algorithm is similar to the BFS algorithm.
Advantage:
DFS requires very less memory as it only needs to store a stack of the nodes on
the path from root node to the current node.
It takes less time to reach to the goal node than BFS algorithm (if it traverses in
the right path).
Disadvantage:
There is the possibility that many states keep re-occurring, and there is no
guarantee of finding the solution.
DFS algorithm goes for deep down searching and sometime it may go to the
infinite loop.
Example:
In the below search tree, we have shown the flow of depth-first search, and it will follow the
order as:
Completeness: DFS search algorithm is complete within finite state space as it will expand
every node within a limited search tree.
Time Complexity: Time complexity of DFS will be equivalent to the node traversed by the
algorithm. It is given by:
Where, m= maximum depth of any node and this can be much larger than d (Shallowest
solution depth)
Space Complexity: DFS algorithm needs to store only single path from the root node, hence
space complexity of DFS is equivalent to the size of the fringe set, which is O(bm).
Optimal: DFS search algorithm is non-optimal, as it may generate a large number of steps or
high cost to reach to the goal node.
o Standard failure value: It indicates that problem does not have any solution.
o Cutoff failure value: It defines no solution for the problem within a given depth limit.
Advantages:
Disadvantages:
Example:
Completeness: DLS search algorithm is complete if the solution is above the depth-limit.
Optimal: Depth-limited search can be viewed as a special case of DFS, and it is also not
optimal even if ℓ>d.
Uniform-cost search is a searching algorithm used for traversing a weighted tree or graph.
This algorithm comes into play when a different cost is available for each edge. The primary
goal of the uniform-cost search is to find a path to the goal node which has the lowest
cumulative cost.
Uniform-cost search expands nodes according to their path costs form the root node. It can be
used to solve any graph/tree where the optimal cost is in demand. A uniform-cost search
algorithm is implemented by the priority queue. It gives maximum priority to the lowest
cumulative cost. Uniform cost search is equivalent to BFS algorithm if the path cost of all
edges is the same.
Advantages:
Uniform cost search is optimal because at every state the path with the least cost is
chosen.
Disadvantages:
It does not care about the number of steps involve in searching and only
concerned about path cost. Due to which this algorithm may be stuck in an infinite
loop.
Completeness:
Uniform-cost search is complete, such as if there is a solution, UCS will find it.
Time Complexity:
Let C* is Cost of the optimal solution, and ε is each step to get closer to the goal node. Then
the number of steps is = C*/ε+1. Here we have taken +1, as we start from state 0 and end to
C*/ε.
Space Complexity:
The same logic is for space complexity so, the worst-case space complexity of Uniform-cost
search is O(b1 + [C*/ε]).
Optimal:
Uniform-cost search is always optimal as it only selects a path with the lowest path cost.
The iterative deepening algorithm is a combination of DFS and BFS algorithms. This search
algorithm finds out the best depth limit and does it by gradually increasing the limit until a
goal is found.
This algorithm performs depth-first search up to a certain "depth limit", and it keeps
increasing the depth limit after each iteration until the goal node is found.
This Search algorithm combines the benefits of Breadth-first search's fast search and depth-
first search's memory efficiency.
The iterative search algorithm is useful uninformed search when search space is large, and
depth of goal node is unknown.
Advantages:
It combines the benefits of BFS and DFS search algorithm in terms of fast search
and memory efficiency.
Disadvantages:
The main drawback of IDDFS is that it repeats all the work of the previous phase.
Example
Following tree structure is showing the iterative deepening depth-first search. IDDFS
algorithm performs various iterations until it does not find the goal node. The iteration
performed by the algorithm is given as:
1'st Iteration-----> A
2'nd Iteration----> A, B, C
3'rd Iteration------>A, B, D, E, C, F, G
4'th Iteration------>A, B, D, H, I, E, C, F, K, G
In the fourth iteration, the algorithm will find the goal node.
Completeness:
Time Complexity:
Let's suppose b is the branching factor and depth is d then the worst-case time complexity
is O(bd).
Space Complexity:
Optimal:
IDDFS algorithm is optimal if path cost is a non- decreasing function of the depth of the
node.
Bidirectional search algorithm runs two simultaneous searches, one form initial state called as
forward-search and other from goal node called as backward-search, to find the goal node.
Bidirectional search replaces one single search graph with two small subgraphs in which one
starts the search from an initial vertex and other starts from goal vertex. The search stops
when these two graphs intersect each other.
Bidirectional search can use search techniques such as BFS, DFS, DLS, etc.
Advantages:
Disadvantages:
Example:
In the below search tree, bidirectional search algorithm is applied. This algorithm divides one
graph/tree into two sub-graphs. It starts traversing from node 1 in the forward direction and
starts from goal node 16 in the backward direction.
Unit II
Heuristic functions
Heuristic is a function which is used in Informed Search, and it finds the most
promising path. It takes the current state of the agent as its input and produces the
estimation of how close agent is from the goal. The heuristic method, however,
might not always give the best solution, but it guaranteed to find a good solution in
reasonable time. Heuristic function estimates how close a state is to the goal. It is
represented by h(n), and it calculates the cost of an optimal path between the pair of
states. The value of the heuristic function is always positive.
H(n)<=h*(n)
Here h(n) is heuristic cost, and h*(n) is the estimated cost. Hence heuristic cost should
be less than or equal to the estimated cost.
On each iteration, each node n with the lowest heuristic value is expanded and
generates all its successors and n is placed to the closed list. The algorithm continues
unit a goal state is found.
In the informed search we will discuss two main algorithms which are given below:
1. f(n)= g(n).
Advantages:
o Best first search can switch between BFS and DFS by gaining the advantages
of both the algorithms.
o This algorithm is more efficient than BFS and DFS algorithms.
Disadvantages:
Example:
Consider the below search problem, and we will traverse it using greedy best-first
search. At each iteration, each node is expanded using evaluation function f(n)=h(n) ,
which is given in the below table.
In this search example, we are using two lists which are OPEN and CLOSED Lists.
Following are the iteration for traversing the above example.
Expand the nodes of S and put in the CLOSED list
Time Complexity: The worst case time complexity of Greedy best first search is
O(bm).
Space Complexity: The worst case space complexity of Greedy best first search is
O(bm). Where, m is the maximum depth of the search space.
Complete: Greedy best-first search is also incomplete, even if the given state space
is finite.
A* Search Algorithm:
A* search is the most commonly known form of best-first search. It uses heuristic
function h(n), and cost to reach the node n from the start state g(n). It has combined
features of UCS and greedy best-first search, by which it solve the problem
efficiently. A* search algorithm finds the shortest path through the search space
using the heuristic function. This search algorithm expands less search tree and
provides optimal result faster. A* algorithm is similar to UCS except that it uses g(n)
+h(n) instead of g(n).
In A* search algorithm, we use search heuristic as well as the cost to reach the node.
Hence we can combine both costs as following, and this sum is called as a fitness
number.
Algorithm of A* search:
Step1: Place the starting node in the OPEN list.
Step 2: Check if the OPEN list is empty or not, if the list is empty then return failure
and stops.
Step 3: Select the node from the OPEN list which has the smallest value of evaluation
function (g+h), if node n is goal node then return success and stop, otherwise
Step 4: Expand node n and generate all of its successors, and put n into the closed
list. For each successor n', check whether n' is already in the OPEN or CLOSED list, if
not then compute evaluation function for n' and place into Open list.
Step 5: Else if node n' is already in OPEN and CLOSED, then it should be attached to
the back pointer which reflects the lowest g(n') value.
Advantages:
Disadvantages:
o It does not always produce the shortest path as it mostly based on heuristics
and approximation.
o A* search algorithm has some complexity issues.
o The main drawback of A* is memory requirement as it keeps all generated
nodes in the memory, so it is not practical for various large-scale problems.
Example:
In this example, we will traverse the given graph using the A* algorithm. The heuristic
value of all states is given in the below table so we will calculate the f(n) of each state
using the formula f(n)= g(n) + h(n), where g(n) is the cost to reach any node from
start state.
Here we will use OPEN and CLOSED list.
Solution:
Initialization: {(S, 5)}
Iteration3: {(S--> A-->C--->G, 6), (S--> A-->C--->D, 11), (S--> A-->B, 7), (S-->G,
10)}
Iteration 4 will give the final result, as S--->A--->C--->G it provides the optimal
path with cost 6.
Points to remember:
o A* algorithm returns the path which occurred first, and it does not search for
all remaining paths.
o The efficiency of A* algorithm depends on the quality of heuristic.
o A* algorithm expands all nodes which satisfy the condition f(n)<="" li="">
o Admissible: the first condition requires for optimality is that h(n) should be an
admissible heuristic for A* tree search. An admissible heuristic is optimistic in
nature.
o Consistency: Second required condition is consistency for only A* graph-
search.
If the heuristic function is admissible, then A* tree search will always find the least
cost path.
These algorithms are used to solve optimization problems in which an exact solution is either
impossible to find or computationally expensive.
Hill climbing, simulated annealing, tabu search, and genetic algorithms are a few
examples of different kinds of local search algorithms. Each of these algorithms operates a
little bit differently, but they all follow the same fundamental procedure of iteratively creating
new solutions and comparing them to the existing solution to determine whether they are
superior.
The local search algorithm in artificial intelligence is a crucial tool in the field of artificial
intelligence and is frequently employed to address a range of optimization issues.
Applications for local search algorithms include scheduling, routing, and resource
allocation. They are particularly helpful for issues where the search space is very large and
can be used to solve both discrete and continuous optimization problems.
Local Search
The nodes are expanded systematically by informed and uninformed searches in different
ways:
In contrast to multiple paths, a local search algorithm completes its task by traversing a single
current node and generally following that node's neighbors.
To solve challenging optimization issues, local search algorithms are frequently combined
with other optimization methods like constraint satisfaction or linear programming. Since
they can quickly converge on a solution that is close to the optimal solution, even if they do
not find the exact optimal solution, they are especially helpful for problems where the search
space is very large.
Local search algorithms are a type of optimization algorithm that iteratively improves the
solution to a problem by making small, local changes to it. Here are the general steps of a
local search algorithm:
Initialization:
The algorithm starts with an initial solution to the problem. This solution can be
generated randomly or using a heuristic.
Evaluation:
The quality of the initial solution is evaluated using an objective function. The
objective function measures how good the solution is, based on the problem
constraints and requirements.
Neighborhood search:
The algorithm generates neighboring solutions by making small modifications to the
current solution. These modifications can be random or guided by heuristics.
Selection:
The neighboring solutions are evaluated using the objective function, and the best
solution is selected as the new current solution.
Termination:
The algorithm terminates when a stopping criterion is met. This criterion can be a
maximum number of iterations, a threshold value for the objective function, or a time
limit.
Solution:
The final solution is the best solution found during the search process.
Hill Climbing
Hill climbing is a local search algorithm in artificial intelligence applied to optimization and
artificial intelligence issues. It is a heuristic search algorithm that starts with an initial
solution and iteratively enhances it by making small adjustments to it, one at a time, and
choosing the best adjustment that enhances the solution the most.
The term "hill climbing" refers to the analogous activity of ascending a hill to reach its
summit (the optimal solution). The algorithm operates by making incremental progress (or
"climbs") towards increasing values of the objective function up until it hits a local maximum
beyond which no additional gains are possible.
The simplicity and effectiveness of hill climbing, which does not require the creation and
upkeep of a search tree, is one of its main benefits. Its main drawback, however, is that it
might get stuck in local optima, where it is impossible to improve without first making a non-
improving move. Numerous modifications to the fundamental hill climbing algorithm,
including simulated annealing and tabu search, have been suggested to address this issue.
A heuristic search algorithm called local beam search is applied to optimization and
artificial intelligence issues. It is a modification of the standard hill climbing algorithm in
which the current states are the starting set (or "beam") of k solutions rather than a single
solution.
The algorithm creates a set of candidate solutions from the current states for each iteration,
evaluates those solutions, and chooses the k best ones to become the new current states.
The basic steps of the local beam search algorithm are as follows:
The ability to explore multiple search paths simultaneously gives local beam search an edge
over traditional hill climbing, which can increase the likelihood of discovering the global
optimum. Even so, it can still find itself in local optima, especially if the search space is big
or complicated.
Simulated Annealing
Starting with an initial solution, the algorithm iteratively generates new solutions by making
minor adjustments to the original solution. The algorithm assesses the objective function of
the new solution after each iteration and determines whether to accept or reject it using a
probability function that depends on the difference between the values of the objective
functions of the old and new solutions as well as a temperature parameter.
The main principle of the simulated annealing algorithm is to control the level of randomness
in the search process by altering the temperature parameter. High temperatures enable the
algorithm to explore new regions of the search space by increasing its propensity to accept
non-improving moves. The algorithm becomes more selective and concentrates on improving
the solution as the temperature drops.
Simulated annealing has been successfully applied to a wide range of optimization problems,
such as the traveling salesman problem, the vehicle routing problem, and the job shop
scheduling problem. However, it requires careful tuning of the temperature and cooling
schedule parameters to achieve good performance.
Due to their capacity to efficiently search sizable solution spaces, local search algorithms in
artificial intelligence are frequently used to solve the TSP. Local search algorithms for the
TSP work by starting with an initial solution and incrementally improving it by making small
changes to it one at a time until no more advancements are possible.
Local search in continuous space