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.


In reverse chronological order:


  • GOFAI Considered Harmful (And Mythical) (Submitted to a journal)
  • 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.)
  • Theorem: There are no ``extendible methods'' in David Chalmers's sense unless P=NP
  • 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 This may be useful in verifying the provenance of some of the software below.

    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:

            (preference p-fuel
    	   (at end (current-value (fuel truck1)
    				  (capacity truck1)))))
    and an objective function that states how important it is:
       (:metric (+ (* 10 (is-violated p-fuel))

    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.


    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/.)

    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/")
    to your Lisp initialization file (which is found in your home directory and has a name like .clinit.cl or .lispworks or .clisprc.lisp or something else). Replace sdyt with the name of the immediate superdirectory where you placed the ytools directory. Replace dytc with your home directory if you are the only user of the software, otherwise in some place that others can put in their search paths. (If you are the only user, you can put it anywhere you like, actually, but the home directory is the obvious thoice.)

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

         (setq custom:*merge-pathnames-ansi* t)
    to make sure that YTools logical pathnames work right.

    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.

    Old Software


  • PHP test
  • Yale Computer Science Department
  • !