Drew V. McDermott

I am interested in cognitive science, specifically artificial intelligence and philosophy. But I spend most of my time lately writing fiction, a whole new world.

Publications:

In reverse chronological order:

Why Ethics is a High Hurdle for AI. Presented at the 2008 North American Conference on Computers and Philosophy, Bloomington, Indiana. (Superseded by McDermott 2011, above.)

Software Documentation

If you want to check out the documentation of the software packages described below, various manuals are available. In some cases the manual is more fully developed than the software; in other cases, the software is ahead. Read the fine print

My public key

Planning Domain Definition Language

PDDL is the language originally developed by the AIPS-98 Competition Committee for use in defining problem domains.

The original version, PDDL 1.7, is still available.

The 2002 version is called PDDL2.1, and contains many new features, mainly connected with adding time and objective functions to the language. Unfortunately, certain features of the original language have been removed for "retuning." Hopefully in the future we'll see a reconvergence as hierarchical-planning features are integrated back into PDDL.

The 2004 version is called PDDL2.2. It is adds derived predicates and timed initial literals. The former are just backward-chaining axioms that allow a planner to achieve a goal by making the antecedent of one of the them true. The latter are literals that will become true at a predictable time independent of what the planning agent does.

PDDL3.0 is the language for the 2006 competition. A BNF syntax can be found here. It adds constraints and preferences, expressed in a restricted temporal logic. For instance, one can have a preference at the end of execution one's gas tank is full:

(:constraints (preference p-fuel (at end (current-value (fuel truck1) (capacity truck1)))))

(:metric (+ (* 10 (is-violated p-fuel)) (fuel-used)))

Opt is a successor to PDDL, including durative actions, autonomous processes, a completely revised hierarchical planning notation, and a more robust type system. It incorporates all the features of PDDL2.2 and (soon) PDDL3.0.

The International Planning Competition

My, how this competition has thrived! We now have several tracks, of which the "deterministic" is closest to my heart: The 2012 competition (deterministic track).

The competition was begun in 1998, by a committee I had the privilege to chair. For the full story, see Drew McDermott 2000 The 1998 AI Planning Systems Competition. AI Magazine 21(2),} pp. 35–55.

Software

To use the following packages, download them, untar them, then follow the installation instructions that follows the package list. Untarring will create one or two subdirectories, usually one of which has the same name as the one shown here. (E.g., untarring nity.tar.gz in directory d will create d /nity/ and d /langutils/ .)

YTools (version 2.1.47, 2009-10-20) is a set of enhancements to Lisp, including improved macros for iteration, formatted I/O, file management, and even backquoting! Documentation includes detailed manual with over 50 pages; see Software Documentation, above. YTools version 2.1 includes a complete rewrite of the YTools File Manager based on the concept of "chunk" described in McDermott 2005.

Lexiparse (version 0.91, 2004-11-26) is a parser based on precedence grammar. It includes a lexer and a framework for expressing translations from syntax trees to useful internal data structures. It requires YTools.

Nisp (version 2.93.22, 2006-12-01) is a strongly typed dialect of Lisp, implemented as a collection of macros. Older versions of Nisp (see below) were based on a tool set called "NILS," but recent versions are based on YTools. (Hence it is referred to in some places as YNisp.) The tar file contains a single directory called ydecl which contains all the type-checking stuff. Y oh Y all these names? Just remember that Nisp = YNisp = YTools + ydecl.

which contains all the type-checking stuff. Y oh Y all these names? Just remember that Nisp = YNisp = YTools + ydecl. Nity (version 1.5.5, 2006-12-01): is a polymorphic type system used by Opt (and hopefully by Nisp sometime in the future). Includes a parallel directory langutils. Depends on YTools.

Opt (version 1.6.26, 2006-12-01) [Ontology with Polymorphic Types] is a KR language based on type theory. Comes with detailed manual for the language, not so detailed documentation on how to use it. Includes parallel directory lisplang. It's fully compatible with recent versions of PDDL. (That is, it has that as a goal. Version 1.6.11 doesn't have absolutely the latest features.) Depends on Nity.

Optop (version 1.7.21, 2006-12-01) is an estimated-regression planner that can reason about autonomous processes. Acronym must mean something; it seems to connote Opt, optimality, Ordered Plans, being on top, .... Depends on Opt and Nisp.

Litlisp, a "literate programming" system. The "Lisp" in the name refers to the fact that the directives to the literate-programming system are Lisp commands. The system itself can be used for literate programming based on any programming language at all. The documents it produces look similar to those produced by the "noweb" system. (Warning: This system is highly experimental, and on the whole the experiment was a failure. I am posting this system because some people have expressed interest in looking at the code. Caveat emptor.) Depends on Nisp and YTools.

To install any of the above, copy the following code template

(load "sdyt/ytools/ytload/ytload") (setq ytools::config-directory* "dytc/") (setq ytools::ytload-directory* "sdyt/ytools/ytload/")

.clinit.cl

.lispworks

.clisprc.lisp

ytools

Important note for CLISP users: Your .clisprc file must include the following code

(setq custom:*merge-pathnames-ansi* t)

Now start Lisp and type (yt-install :sysname) to install one of the systems listed above. (Here the names are all lower-case, which matters only in a case-sensitive Lisp.) If you want Optop, you can just type (yt-install :optop) and all the systems it depends on will be installed as well. But it might be clearer to install them in order. The installation process consists of a series of questions about directories, case-sensitivity, various modes, etc., followed by a bunch of compilations. Some Lisps generate an unbelievable number of warnings about unimportant conditions. When I figure out how to turn them off, I'll include that code in future releases. For now, just ignore them. If something blows up, let me know.

OH NO!!! All these programs seem to be written in Lisp, which is bad because it looks funny and there's no free standard implementation. But wait ... There is a free standard implemention: CLISP. It's written in C, is compliant with the ANSI standard, and produces byte code as output, so it runs anywhere. It's also easy to install. If you like to think of Python as the last word in high-level scripting languages, you're almost right. One step beyond is Lisp: Python with macros (and without that annoying indentation-dependent syntax). Lisp is defined by an ANSI standard, not a single implementation. Most implementations compile to efficient machine code, so once you outgrow CLISP you can make an easy transition to a full-featured state-of-the-art language.

Emacs Packages

Lightmark (version 1.01) implements a system of "lightweight bookmarks," for people who just can't stand that there's only "point" and "mark." If you want to keep several fingers in various pies, this package allows you to create bookmarks and flip around them with a few keystrokes. For instance, ^C^Bp creates a bookmark whose default name is the symbol under the cursor --- but you can edit the name to whatever you want, and change it-- --later. ^C^Bj prompts (with completion) for the name of a bookmark and jumps to it. Many utilities are included for viewing and managing the current bookmarks, including a 'Marks' menu.

Unpop is a planner that uses regression-match graphs to control search.

PDDL is the Planning Domain Definition Language.

Nisp is a macro package that adds strong typing to Common Lisp. (Version 2.8)

Deduc, a deductive system built on top of (pieces of) PDDL.

Miscellany