Python code for the book Artificial Intelligence: A Modern Approach.
When complete, this project will cover all the major topics in the book, for each topic, such as logic
, we will have the following Python 3.5 files:
logic.py
: Implementations of all the pseudocode algorithms in the book.logic_test.py
: A lightweight test suite, usingassert
statements, designed for use withpy.test
.logic.ipynb
: A Jupyter notebook, with examples of usage. Does afrom logic import *
to get the code.
There are a few style rules that are unique to this project:
- The first rule is that the code should correspond directly to the pseudocode in the book. When possible this will be almost one-to-one, just allowing for the syntactic differences between Python and pseudocode, and for different library functions.
- Don't make a function more complicated than the pseudocode in the book, even if the complication would add a nice feature, or give an efficiency gain. Instead, remain faithful to the pseudocode, and if you must, add a new function (not in the book) with the added feature.
- I use functional programming in many cases, but not exclusively; let the book's pseudocode be the guide. In general, pure functions (with no side effects) are prefered, but functions with side effects, and classes, can be used where appropriate.
Beyond the above rules, we default to Pep 8, with a few minor exceptions:
-
I'm not too worried about an occasional line longer than 79 characters.
-
You don't need two spaces after a sentence-ending period.
-
Strunk and White is not a good guide for English.
-
I prefer more concise docstrings; I don't follow Pep 257.
-
Not all constants have to be UPPERCASE.
-
Pep 484 type annotations are allowed but not required. If your parameter name is already suggestive of the name of a type, you don't need an annotation, e.g.:
def retry(url: Url) -> None: # This 'Url' annotation should be avoided; but '-> None' is useful
Are we right to concentrate on Java and Python versions of the code? What languages do students already know? The TIOBE Index says the top five are:
Java, C, C++, C#, Python
What languages are instructors recommending for their AI class?
To get an approximate
idea, I gave the query norvig russell "Modern Approach" along with
the names of various languages and looked at the estimated counts of results on
various dates. However, I don't have much confidence in these figures...
Language | 2004 | 2005 | 2007 | 2010 | 2016 |
---|---|---|---|---|---|
none | 8,080 | 20,100 | 75,200 | 150,000 | 132,000 |
java | 1,990 | 4,930 | 44,200 | 37,000 | 50,000 |
c++ | 875 | 1,820 | 35,300 | 105,000 | 35,000 |
lisp | 844 | 974 | 30,100 | 19,000 | 14,000 |
prolog | 789 | 2,010 | 23,200 | 17,000 | 16,000 |
python | 785 | 1,240 | 18,400 | 11,000 | 12,000 |