Games, AI & Reflection

Tom Novelli
Mon, 5 Apr 1999 13:57:36 -0400

	I'm itching to play with AI again.. yeah, I've been reading
Hofstadter, amongst other things. :)  Reflection is really the heart of
Tunes, and game AI is the way to explore it.

	A long time ago, I wrote an adaptive tic-tac-toe game... in BASIC!
It had a datafile that controlled it, which started out empty.  After
playing about 100 games, it was practically unbeatable.
	Last year, I downloaded a genetic algorithm program (in C) for
evolving Corewar warriors.  I ran it and went to sleep.  A few hours later,
it crashed, but it left behind some good warriors, second only by the top 5
or 10 human-made warriors.  By the way, the assembly code for these warriors
was *weird* -- they didn't employ many familiar techniques.
	Both programs utilized very crude means of reflection, being written
in BASIC and C.  Imagine what could be done if the programs were represented
as abstract syntax trees (i.e., the internal representation of a Scheme or
ML program).  This reflective system could guarantee that no "mutation"
results in illegal code (although it might result in an infinite loop, which
would eventually be terminated by the supervisor program, and spell death
for that particular mutation).
	Now, we can't just run these programs in reality... reality is too
overwhelming for a mere computer program.  When/if programs become capable
of dealing with reality, they could become a threat to reality.  "What
reality," you ask?  I'm not just talking about intelligent robots (in
physical reality); that's still a long way off.  I'm talking about computer
systems used for real life (computer reality)... where we do our email, word
processing, accounting, etc... too complex, too risky.  We'll start with
games (fictional realities).
	In games, we can create simpler realities, like the realities of
tic-tac-toe, chess, corewar, MUD's and interactive fiction.  We'll need a
cordoned-off computing environment in which to build these games and their
AI's.  They'll be written in high-level languages like Scheme, and
reflection will occur at the HLL level.  They can't modify machine code. 
Sure, they can call machine-code routines, especially for high-performance
video games... but they can't "touch" anything that's not "theirs".
	At its simplest, reflection is mutation, as in the tic-tac-toe and
corewars GA's.  We need better, more intelligent reflective techniques;
strategic changes instead of random changes.  For example, programs should
"know" how to avoid infinite loops.  They should have an "idea" of how to
make themselves more efficient, more deadly, or whatever.  Programs could
even improve the ways they improve themselves!  Meta-reflection!
	Now the tough part will be for us to go in and examine the
computer-generated code, to figure out how and why it does what it does. 
We need to understand these things in order to improve our methods.
	Oh, one more thing.. if these methods lead to game-characters who
are at all psychotic, we'll know they're not safe for the real world.  And
if some methods consistently produce characters with good morals,
principles, etc, we may be able to figure out how to avoid AI disasters 100%
of the time.  Also, it depends what kind of capabilities the AI has in the
real world.  I would feel perfectly safe having a robot arm and camera
play with blocks or chess pieces.. but not with a gun :)

"In the human brain, there is gullibility.  How gullible are you?  Is your
gullibility located in some "gullibility center" in your brain?  Could a
neurosurgeon reach in and perform some delicate operation to lower your
gullibility, otherwise leaving you alone?  If you believe this, you are
pretty gullible, and should perhaps consider such an operation."

					-- Douglas Hofstadter

Tom Novelli <>