| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Python code for the book Artificial Intelligence: A Modern Approach. We're loooking for one student sponsored by Google Summer of Code (GSoC) to work on this project; if you want to be that student, make some good contributions here (by looking throush the "Issues" and resolving some), and submit an application. (And we're always looking for solid contributors who are not affiliated with GSoC.)
When complete, this project will have Python 3.5 code for all the pseudocode algorithms in the book. For each major topic, such as logic, we will have the following files in the main branch:
Until we get there, we will support a legacy branch, aima3python2 (for the third edition of the textbook and for Python 2 code). To prepare code for the new master branch, the following two steps should be taken:
Implement functions that were in the third edition of the book but were not yet implemented in the code. Check the list of pseudocode algorithms (pdf) to see what's missing.
As we finish chapters for the new fourth edition, we will share the new pseudocode, and describe what changes are necessary.
Create a .ipynb notebook, and give examples of how to use the code.
There are a few style rules that are unique to this project:
Beyond the above rules, we use 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, such as url below, then i don't think the type annotation is useful. Return type annotations, such as -> None below, can be very useful.
def retry(url: Url) -> None:
Are we right to concentrate on Java and Python versions of the code? I think so; both languages are popular; Java is fast enough for our purposes, and has reasonable type declarations (but can be verbose); Python is popular and has a very direct mapping to the pseudocode in the book (but lacks type declarations and can be slow). The TIOBE Index says the top five most popular languages are:
Java, C, C++, C#, Python
So it might be reasonable to also support C++/C# at some point in the future. It might also be reasonable to support a language that combines the terse readability of Python with the type safety and speed of Java; perhaps Go or Julia. And finally, Javascript is the language of the browser; it would be nice to have code that runs in the browser, in Javascript or a variant such as Typescript.
There is also a aima-lisp project; in 1995 when we wrote the first edition of the book, Lisp was the right choice, but today it is less popular.
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 |
| Back | FazBrowse Home | New Git URL |