Re: [IDEA] Artificial Intelligence/ALife (long)

From: Daniel A. Koepke (dkoepke@california.com)
Date: 06/23/99


On Wed, 23 Jun 1999, JoeR wrote:

> Thanks for that info!  I checked it out and the code is written in Perl
> (could be ported to C I suppose fairly easily if I knew Perl).  It's really
> an interesting idea though.. beyond the mobile special functions.. since
> this would be a program outside of Circle that actually logs in and
> interacts with the MUD as an "artificial" player.

TinyMUDs are rife with this sort of thing.  It's probably an outcropping
of Eliza and IRC bots, and, in fact, TinyMUDs are probably the only of
the four families of MUDs [1] that have ever used bots to any effect.

Speaking of other sorts of MUDs, I recommend everyone take some time out
and either play a TinyMUD/MUSH/MUX or download one, put it up yourself,
and look at it.  Admittedly, you're not going to find many in the vein of
GoP type games [2].  However, that's probably secondary.  The idea is to
view the sort of programmability, flexibility, and whatnot employed in
these sort of games.  Although TinyMUDs have an ugly built-in language
(it looks like FORTH to me, but I don't know the origins), I vastly prefer
them over LPs.  (The design philosophy behind LP is laughable to me: LPC
is too much like C [e.g., too bloated and generic] to be of much use to
nonprogrammers, thus it may as well be written in C/C++ with reloadability
incorperated via dlopen() [3]).

> I was wondering if anyone has implemented 'bots on their system.
> There's got to be at least someone who has put in the famous Eliza
> code...

Eliza's code isn't famous, although the experiment in itself has been
talked about quite a lot.  Eliza, BTW, was only impressive for a very
short amount of time (to me, anyway).  As soon as I noticed the pattern to
the answers, its simplicity became blatantly obvious.  All Eliza does is
observe your questions for certain keywords that indicate the topic of the
question.  It's good at this, but it's not doing any real NLP [4] -- once
it figures out what part of the question is topical, Eliza simply responds
with another question incorperating the exact phrase you used.  Eliza
always answers in questions to avoid contradicting herself (a, "If you
never make any statements,..." sort of thing).

This approach isn't the best, and would probably be mostly annoying to
your players.  Barring investigating and implementing any sort of NLP,
primitive or not, there are two approaches that I would recommend.  The
first is simply an Ultima sort of affair.  The scenario would be,

    A guard is standing here.
    > talk guard
    You walk up to the guard intent on talking to him.  He looks at you
    and before you can say anything asks in a clipped tone, "What'dya
    want from me?"

        1. I just want to talk...
        2. What's the best place to go for a good drink in this city?
        3. How do I report crimes?
        4. What should I watch out for in the city?
        5. Nothing, nevermind.

    choice> 1
    "Oh, do you now?  What a sissy!  I have a job to do, and it's got
     nothing to do with talking.  Now go on before I start thinking
     you're trying to distract me or some such."

Each response would give a different path through a discussion script.
The other way, and least sophisticated method, is simply a keyword scan.
This is essentially what Toei Rei does, but it takes advantage of Perl's
regular expressions to make the matches much better than just a stupid,
strstr(buf, "heal me"); sort of thing.

-dak

[1] DIKU, LP, Tiny, and Aber.  Aber is oft neglected, and it certainly
    isn't as popular now as it once was.  However, they are making
    something of a comeback, and DIKU, if not LP as well, was meant to
    be a better Aber.  IMHO, it was successful in that regard, which
    is why you haven't heard much from the Aber camp.  OTOH, I've seen
    a surpising number of new MUDs on TMC belonging to the Aber family
    (derivatives include iDirt, cDirt, and Dyrt).

[2] GOP meaning Game Oriented Play.  Also known as, hack-n-slash, ROLL
    (as opposed to "role") playing, etc.  Basically, DIKU and, despite
    the claims of the LP camp about the flexibility and generality of
    their drivers, LPs.  (BTW, I've always found that somewhat pitiful.
    Those in the LP camp that make a big deal about LP's flexibility
    while casting down DIKU as hard-coded seem to be running the same
    sort of MUD.)

[3] dlopen() is surprisingly easy to use and powerful, and it's quite
    advantageous.  I made every command a shared library in and of
    itself (in my src/commands directory there is a .c file for every
    command in the game which gets compiled to a shared library and
    loaded into the game via dlopen()).  I currently have the command
    table in a file called commands.c that is also dynamically loaded.
    However, I will probably redo the interface today, as this makes
    reloading one command impossible (for reasons I won't go into).  I
    will probably have each command export a symbol that contains its
    command table information, and that will be automatically inserted
    into the command table by way of an insertion sort based upon
    precedence.

[4] Natural Language Processing.  I don't have any references for you.
    USENET is mostly useless for research these days (a far cry from how
    things used to be even a few years ago).  And I fear that most of
    academia concentrate on the mathematics and theory behind the idea
    rather than the implementation nuances and the concrete.  Both of
    these facts are unfortunate, since NLP has great potential in both
    description generation (BTW, someone asked me for an example of my
    description generators output a long time ago, and I accidentally
    deleted the message -- please request again in private), in improved
    command parsing, and AI.  I'm anxious to see a MUD that employs NLP
    and personal knowledge bases (maybe neural networks for learning, as
    well?).  I doubt I'll be the first, since I'm notoriously bad at
    picking up AI concepts (well, maybe not "notoriously", but bad
    nonetheless).

[5] Damn that was a lot of footnoti. [6]

[6] I've decided to randomly pluralise things with the "i" ending for no
    good reason.  Thus, "beds" become "bedi" (pronounced like "Jedi",
    which, BTW, becomes "Jedi-i"), "trees" become "tree-i", and "Jesuses"
    becomes "Jesi" (because "Jesus-i" has too many syllables for me :).

[7] I have nothing more to say, thank-you-very-much.


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     |  http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html  |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST