HandsOn AI

From Simreal

Jump to: navigation, search


Data CD

In theory there was to be a CD attached to the book. After talking to my acquisitions editor, it turns out that somebody deep in production dropped the ball. Ah well; you can get it all from the Updates section of this page.

Table of Contents

1. Artficial Intelligence

  • Introduction
  • Categories of AI
  • Validation
  • And Beyond

2. Computing Framework

  • Architecture Overview
  • Software Agents
  • Distributed Computing
  • Communication Language

3. Control Systems

  • Introduction: Reflexes
  • Filtering
  • Proportional-Integral-Deriviative Control
  • Fuzzy-Logic
  • Neural Reflexes

4. Scripted Behavior

  • Data-Driven Intelligence
  • Finite State Machines
  • Markov Models
  • Frame-Based Intelligence and Chatbots

5. Discrete Searching

  • Introduction
  • Brute-Force Searching
  • A* Search
  • Two-Player Games

6. Searching State Space

  • What is State Space?
  • Reinforcement Learning
  • Representing State Space
  • Genetic Algorithms

7. Thinking Logically

  • Logic
  • Using Logic
  • Knowledge Representation

8. Supervised Neural Networks

  • Simulated Intelligence
  • Neural Models
  • Perceptron
  • Multi-Layer Perceptron
  • Normalization
  • Associative Memory
  • Advanced Concepts

9. Unsupervised Neural Networks

  • Neurons Revisited
  • Self-Organising Maps
  • Network Variations
  • Document Processing
  • Hierarchy and Time


Data Disk

Get the Data Disk here: AIJ_CD_GPL3.zip (7M)

Now released under the GNU Public License v3, because teaching material deserves to be used as widely as possible.

  • Francisco Bido noted that there were some compile problems in the code as shipped. I found one fix in aStar.java and I fixed all of the .jcp files to point to the correct root path. There may be other problems, perhaps platform specific, that will get fixes posted here as I receive them.
  • Note that if you are not using JCreator, you will find there are a few files that don't compile. Rod noticed that I left some old, unused source files in the distribution. Before you compile for a project, check the .jcp file to see if the .java is listed -- it's easy to tell and will save you some frustration.
  • With this GPL3 update, I tried to combine everything into one tidy ZIP, but then again, I didn't test anything -- so Write Me if you have problems.


Using JCreator is fine as far as it goes, but this packaged doesn't exist on the Mac or Linux, and the project files are not transportable. Sadly, my experience in Java is limited so this was the best I had... but thanks to Francisco, we now have the seed for of a simple cross-platform AIJ.Ant that may help. I know nothing of Ant, so offer no form of support.

Rod Burgett has taken this one step further, with his Ant script Build.xml. He's not entirely done yet, but here are his notes so far regarding its use:

If you have Ant and Java installed (ANT_HOME and JAVA_HOME defined), just put the build.xml into your AIJ/Java directory.

Then from that directory you can use 'ant -projecthelp' to get a list of available targets, and 'ant target' to hit any target.

For example, 'ant runCrisp' will run the Crisp driver.


  • Thomas Kibalo has created a JBuilder project, all packaged up with the source in AI.zip. Here are his notes on this:

I tried all the apps using both JBuilder 8 and JBuilder X and all they appear to work. Simply unzip the file and it will build a directory automatically called AI located at C:\AI.

The user can then open up the AI.jpx project file under JBuilder and then entire complement of code should come up. Users can then execute a particular app by selecting and opening the app under the project files window, locating the appropiate files with a Main() and right clicking for run.

Certain apps have data files: backprop, hopfield , and tsp. All data is contained and "hard-wired" as a location in the code in the top AI directory.

UML Conventions

Note that I don't follow the standard, and arguably correct, UML notations for aggregration.

In the standard, the diamond shape is on the master (containing) class and the naked little line end is on the slave (referenced) class. The diamond indicated how the slave was being held by the master.

Somehow, I originally learned to use the connections as if they were arrows; the diamond pointing to the slave class. The shape of the arrow's end (arrow, hollow-arrow, diamond, filled diamond, etc) indicating the type of relationship. You know, like all of the _other_ arrows used in UML. This bad habit carried over to the book and may have confused the heck out of you.

New Note: My UML book says one thing; my UML tool says another. I stand in the middle, befuddled by experts.


There is no errata at this time.

Personal tools