[erlang-questions] General Questions

Benjamin Tolputt bjt@REDACTED
Fri Apr 20 03:35:23 CEST 2007

Good Day All,

I am currently experimenting with Erlang for the purposes of managing a 
"virtual world" (not another MUD, actually an AI agent experiment I am 
interested in). I am hoping this leads to the "killer app" ideal 
everyone seems to think languages need, but I am not actually setting my 
sights there.

A brief overview is as follows:

The agents exist in an evironment simulated by a number of "world 
processes" (i.e. a stepped physics process, a weather process, etc). 
These will (in general) be implemented as drivers (i.e. linked in DLL's) 
for purposes of speed (I don't think Erlang is up to or designed for 
physics simulation!). The idea is to give each dynamic object in the 
world (not just agents) their own process. So there is going to be alot 
of processes in the system (with the intent of using the mdisp package 
to lighten the runtime load by saving to disk processes with long idle 

I am hoping to simulate a small "community" of agents each with their 
own goals ("Get Rich", "Marry Mayor's Daughter", etc) and have them plan 
based on these goals (using a predefined set of actions - think of a cut 
down STRIPS engine). One of the ways they can accomplish goals is by 
obtaining/passing information onto other agents. In order to control the 
simulation in a somewhat more "user-friendly" manner - I am hoping to 
use an Alice-clone interface to retrieve & send commands to agents (i.e. 
implement a "chat-bot" interface to the agent's talk functionality for 
user to application discussion).

My thoughts on this are currently to implement/adapt code for the 
chat-bot interface as a C-code driver, passing relevant information 
state information along with the "parse" command. The driver will need 
to load alot of "chat data" from disk and process this into a use-able 
runtime format (AIML is XML which is usually processed into tree 
structures internally). This runtime structure is both large & static, 
implying that it should simply be shared across instances of the port 
driver (say two people try to talk to different agents at the same time 
- I would like for both processes to use the same runtime data 
structure). Is this normal / advisable for an Erlang driver? As the 
runtime data is static, the only "concurrent shared state" issue is the 
initial loading, which I am assuming can simply be bottlenecked at the 
driver instantiation function.


More information about the erlang-questions mailing list