Re97-NOTES.pdf
DEC 28, 2022
Description Community
About

(The below text version of the notes is for search purposes and convenience. See the PDF version for proper formatting such as bold, italics, etc., and graphics where applicable. Copyright: 2022 Retraice, Inc.)


Re97: Recap of BFS
(Best-First-Search Part 15, AIMA4e pp. 73-74)

retraice.com

A summary of how the AIMA-Python implementation of BFS works and what it took to learn it.
Final version of verbose BFS in Re95 Notes; starting from AIMA4e p. 73 and the task of passing a problem and an evaluation function to an agent program; discovering the nature of formalizing a problem, state space, evaluation function, node and frontier; the ins and outs of making even a simple agent program work; learning Python and object-oriented programming along the way; getting from A to B. Highlights from the livestream: overview; Re82 formal problems, Re84 nodes, Re90 problem implementation, Re95 final execution; the len call, and straight-line distances vs. road distances; the program running, and source.

Air date: Tuesday, 27th Dec. 2022, 10:00 PM Eastern/US.

Re82: What is a problem? (Best-First-Search Part 1, AIMA4e pp. 73-74)^1

Using sets and functions to formalize problems.
Passing a problem to a function vs. passing a variable or number; English meaning and formal meaning of problem; problem as description of task environment; problem as object instantiating class, written in Python; state space, initial state, goal state(s), actions, transition model, action cost function, evaluation function.

Re83: A Problem Instantiated (Best-First-Search Part 2, AIMA4e pp. 73-74)^2

Writing a well-defined problem, in Python, as an object that's an instance of the class Problem.
Object-oriented programming; class Problem as subclass of object, implementing structure of well-defined problem; initial state and goal state as attributes in Problem; the four functions Actions(), Result(), Is-Goal() and Action-Cost(), and the informed search function h(), as methods in Problem.

Re84: A Node Instantiated (Best-First-Search Part 3, AIMA4e pp. 73-74)^3

Writing, as a class in Python, a data structure to represent a reached state in the environment's state space.
State space and search tree; nodes and edges; nodes as representing unique paths; parent nodes, applied actions and total path-from-initial-state cost; init, repr, len and lt magic methods in Python.

Re85: The Details (Best-First-Search Part 4, AIMA4e pp. 73-74)^4

Looking ahead at the code we'll need.
An attempt to build a toy problem reveals unsatisfied dependencies; the need for a problem implementation with state space, actions sets, transition model and action cost function; AIMA's RouteProblem class and best_first_search function implementations as guides; walking through the suites of each; the need for PriorityQueue and f to order our search tree's frontier of nodes.

Re86: Code Reading (Best-First-Search Part 5, AIMA4e pp. 73-74)^5

Getting used to the components of a search problem and algorithm implemented in Python.
The Problem class and its place-holder methods; the RouteProblem subclass and its more substantial methods; the Map class, and neighbors as actions; the links argument to Map as actions, the locations argument as states; the multimap function as the key to generating a list of neighbors (actions).

Re87: The multimap Function, Part A (Best-First-Search Part 6, AIMA4e pp. 73-74)^6

Unpacking the code that gets us the neighbors of our current state which are the actions available in the Romania problem.
The connections between Map and multimap; hasattr; 'items'; adding reverse actions to our state space; neighbors, actions and multimap; probing objects with dir() and __dict__; causing side effects by calling a function from inside a class; debugging.

Re88: The multimap Function, Part B (Best-First-Search Part 7, AIMA4e pp. 73-74)^7

Finishing what we started with multimap.
Using verbose printing to watch the behavior of multimap; demonstrating the side-effects behavior of executing Map, which calls multimap and passes a modified tlinks to it; but it's not clear why the Map-modified tlinks would be the same object as the global tlinks.

Re89: The multimap Function, Part C (Best-First-Search Part 8, AIMA4e pp. 73-74)^8

How multimap works.
Code and math vs. AI; Retraice code quality issues; Map passes a modified links to multimap; multimap creates a defaultdict, a dict with default values, from collections; multimap then strips the values from the links dictionary, and parses the keys, which should be pairs, into key-value pairs for the new dictionary of neighbors,
i.e. actions available at each state.

Re90: The Map Class (Best-First-Search Part 9, AIMA4e pp. 73-74)^9

How instantiations of Map work.
The attributes of Map are locations, neighbors and distances; multimap produces the neighbors dictionary; tlinks has the actions (in pairs of states) and cost values in miles of our state space tmap; tlocations has the states of tmap; Problem has our initial and goal states as attributes, and the is_goal method; RouteProblem has our actions, result and action_cost methods.

Re91: The PriorityQueue Class, Part A (Best-First-Search Part 10, AIMA4e pp. 73-74)^10

Trying to make PriorityQueue work by fiddling with evaluation functions.
Given the AIMA Python source code, we can now provide a test map with actions and locations (i.e. a state space), a test problem with initial state, goal state and state space, a test evaluation function to order our queue of nodes, and run best_first_search without throwing an error; the output, though, does not seem like a solution.

Re92: The PriorityQueue Class, Part B (Best-First-Search Part 11, AIMA4e pp. 73-74)^11

From best_first_search to Node to PriorityQueue to frontier.
Trying to understand the insides of PriorityQueue; executing lines manually, outside of the class; the first node as initial state; the items of the frontier instantiation of PriorityQueue.

Re93: The PriorityQueue Class, Part C (Best-First-Search Part 12, AIMA4e pp. 73-74)^12

Examining Nodes and their handling by PriorityQueue.
The first node in BFS is our problem initial state, and is returned as specified by the Node class repr method; nodes passed to PriorityQueue must be iterable so plain nodes and tuple nodes don't work, but dictionary nodes and string nodes do.

Re94: The PriorityQueue Class, Part D (Best-First-Search Part 13, AIMA4e pp. 73-74)^13

Making BFS and PriorityQueue chatty to increase our confidence in their output.
Printing messages throughout the execution of best_first_search and PriorityQueue; the states of node, frontier and reached as they change during execution; the attributes of a solution node.

Re95: The PriorityQueue Class, Part E (Best-First-Search Part 14, AIMA4e pp. 73-74)^14

frontier is a PriorityQueue which is built on heapq and uses f to create (score, item) pairs to be queued.
Printing verbose updates as BFS proceeds, using PriorityQueue, from A to B, including calculating straight-line distances as a heuristic (f1); the frontier list (PriorityQueue) and reached dictionary can be seen growing; the selection of nodes from children is based on the ordering of the frontier PriorityQueue using f1, the evaluation function.

_

References

Retraice (2022/12/14). Re82: What is a problem? (BEST-FIRST-SEARCH Part 1, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re82Retrieved 15th Dec. 2022.

Retraice (2022/12/15). Re83: A Problem Instantiated (BEST-FIRST-SEARCH Part 2, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re83Retrieved 16th Dec. 2022.

Retraice (2022/12/16). Re84: A Node Instantiated (BEST-FIRST-SEARCH Part 3, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re84Retrieved 17th Dec. 2022.

Retraice (2022/12/17). Re85: The Details (BEST-FIRST-SEARCH Part 4, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re85Retrieved 18th Dec. 2022.

Retraice (2022/12/18). Re86: Code Reading (BEST-FIRST-SEARCH Part 5, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re86Retrieved 19th Dec. 2022.

Retraice (2022/12/19). Re87: The multimap Function, Part A (BEST-FIRST-SEARCH Part 6, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re87Retrieved 20th Dec. 2022.

Retraice (2022/12/20). Re88: The multimap Function, Part B (BEST-FIRST-SEARCH Part 7, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re88Retrieved 21st Dec. 2022.

Retraice (2022/12/21). Re89: The multimap Function, Part C (BEST-FIRST-SEARCH Part 8, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re89Retrieved 22nd Dec. 2022.

Retraice (2022/12/22a). Re90: The Map Class (BEST-FIRST-SEARCH Part 9, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re90Retrieved 23rd Dec. 2022.

Retraice (2022/12/22b). Re91: The PriorityQueue Class, Part A (BEST-FIRST-SEARCH Part 10, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re91Retrieved 24th Dec. 2022.

Retraice (2022/12/23). Re92: The PriorityQueue Class, Part B (BEST-FIRST-SEARCH Part 11, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re92Retrieved 24th Dec. 2022.

Retraice (2022/12/24). Re93: The PriorityQueue Class, Part C (BEST-FIRST-SEARCH Part 12, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re93Retrieved 25th Dec. 2022.

Retraice (2022/12/25). Re94: The PriorityQueue Class, Part D (BEST-FIRST-SEARCH Part 13, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re94Retrieved 26th Dec. 2022.

Retraice (2022/12/26a). Re95: The PriorityQueue Class, Part E (BEST-FIRST-SEARCH Part 14, AIMA4e pp. 73-74). retraice.com.
https://www.retraice.com/segments/re95Retrieved 27th Dec. 2022.

Retraice (2022/12/26b). Re96: News of ChatGPT, Part 1. retraice.com.
https://www.retraice.com/segments/re96Retrieved 27th Dec. 2022.

Footnotes

^1 Retraice (2022/12/14). ^2 Retraice (2022/12/15). ^3 Retraice (2022/12/16). ^4 Retraice (2022/12/17). ^5 Retraice (2022/12/18). ^6 Retraice (2022/12/19). ^7 Retraice (2022/12/20). ^8 Retraice (2022/12/21). ^9 Retraice (2022/12/22a). ^10 Retraice (2022/12/22b). ^11 Retraice (2022/12/23). ^12 Retraice (2022/12/24). ^13 Retraice (2022/12/25). ^14 Retraice (2022/12/26a).

 

Comments