== name == Daydreamer == category == Artificial Intelligence -> Cognitive Architectures == author == href(Erik T. Mueller,http://www.signiform.com/erik/) == author-image == == short-description == Daydreamer may be AI's best kept secret. Daydreamer is thought provoking and fun! Daydreamer is a complete simulation of a human mind that thinks and acts in a virtual world. It models daydreaming, emotions, planning, and serendipity. == long-description == Daydreamer may be AI's best kept secret. Daydreamer is thought provoking and fun! Daydreamer is a complete simulation of a human mind that thinks and acts in a virtual world. Unlike many other AI programs, Daydreamer is flexible. Just give it some goals and some input events, and it will be off and running in a stream of thought and action, which are monologuized in English. Daydreamer does many things. Some of the most interesting are: Daydreamer reflects on its past experiences. If Daydreamer is upset about something, it thinks about something happy. Or, it may produce a rationalization. Daydreamer makes plans, forms intentions, and later acts on them. Daydreamer discovers creative solutions serendipitously, in response to internal or external triggers. Technically, Daydreamer is composed of the following components: emotion-driven control loop, personal goals and metagoals, analogical planner, hierarchical planner, episodic memory, and English generator. Here's a challenge to all you clever AI programmers out there: help Daydreamer do more! Here's how: * href(Download Daydreamer,http://www.signiform.com/erik/programs/daydreamer/daydreamer3.5.tar.gz) * Run the sample experiences and daydreams. Just type (load "dd"). * Delve into the href(tutorial on GATE,http://www.signiform.com/erik/programs/daydreamer/gate.htm), the underlying AI tools package. * href(Extend Daydreamer, http://www.signiform.com/erik/programs/daydreamer/ddextend.htm) with your own planning rules, inference rules, action effect rules, concern initiation rules, personal goals, emotional responses, generation templates, initial facts, input phrases, and episodes. (See the "tutorial" section.) Try it! == examples == Simply by typing (load "dd"), you can run the LOVERS1 experience from the book href(Daydreaming in Humans and Machines,http://www.amazon.com/exec/obidos/ASIN/0893915629/). Here is how this trace begins: > (load "dd") ... DAYDREAMER 3.5, Common Lisp version of 2004-12-20 Initialize DAYDREAMER Performing first-time initialization Creating primal reality... ... Creating initial reality context... State changes from SUSPENDED to DAYDREAMING Daydreamer first creates an initial reality context: the context designated as containing the state of the simulated "real world" as seen by Daydreamer. Various initial facts are asserted into this context: Daydreamer has a job, is not romantically involved, is currently at home, and so on. Daydreamer then starts out in daydreaming mode. Run inferences in #{CX.6: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) ... ****************** LOVERS-THEME LOVERS-THEME fired as inference in CX.6 ------------------------------------------------------- IF self not LOVERS with anyone THEN ACTIVE-GOAL for LOVERS with some person ------------------------------------------------------- ?SELF = #{ME: (FEMALE-PERSON first-name "Sarah"......)} ****************** Activate top-level goal #{OB.2212: (ACTIVE-GOAL obj (LOVERS actor ......)......)} in #{CX.6: (CX)} Assert #{OB.2212: (ACTIVE-GOAL obj (LOVERS actor ......)......)} in CX.6 ================================================== I want to be going out with someone. I feel really interested in going out with someone. ================================================== Personal goal concern OB.2212: LOVERS motiv 0.9 status HALTED Daydreamer activates a top-level LOVERS goal because it is not involved in a LOVERS relationship, and one or more of its need states subsumed by the relationship are unsatisfied. A new concern is created and a positive motivating emotion of bold(interest) is created and associated with the new concern. The intrinsic importance of the goal is 0.9. This becomes the magnitude of the motivating emotion, as well as the current value for the motivation of the concern. Whenever facts are asserted into a context, they are converted into English and produced as output. ****************** ENTERTAINMENT-THEME ENTERTAINMENT-THEME fired as inference in CX.6 ------------------------------------------------------- IF level of satisfaction of ENTERTAINMENT need below threshold THEN ACTIVE-GOAL for ENTERTAINMENT ------------------------------------------------------- ?SELF = #{ME: (FEMALE-PERSON first-name "Sarah"......)} ****************** Activate top-level goal #{OB.2217: (ACTIVE-GOAL obj (ENTERTAINMENT...)......)} in #{CX.6: (CX)} Assert #{OB.2217: (ACTIVE-GOAL obj (ENTERTAINMENT...)......)} in CX.6 ================================================== I want to be entertained. I feel interested in being entertained. ================================================== Personal goal concern OB.2217: ENTERTAINMENT motiv 0.6 status RUNABLE Personal goal concern OB.2212: LOVERS motiv 0.9 status HALTED Next Daydreamer activates an ENTERTAINMENT goal because its need for entertainment is unsatisfied. Another concern and associated motivating emotion are activated. Running emotion-driven control loop... :Switching to new top-level goal #{OB.2217: (ACTIVE-GOAL obj (ENTERTAINMENT...)......)} ... ****************** ENTERTAINMENT-PLAN1 fired as plan for #{OB.2217: (ACTIVE-GOAL obj (ENTERTAINMENT...)......)} in CX.6 sprouting CX.7 ------------------------------------------------------- IF ACTIVE-GOAL for ENTERTAINMENT THEN ACTIVE-GOAL for M-MOVIE with self ------------------------------------------------------- ?SELF = #{ME: (FEMALE-PERSON first-name "Sarah"......)} Assert #{OB.2227: (ORDERING)} in CX.7 Instantiate and activate subgoals Activate subgoal for #{OB.2217: (ACTIVE-GOAL obj (ENTERTAINMENT...)......)} obj #{OB.2228: (M-MOVIE actor ME)} in #{CX.7: (CX)} Assert #{OB.2230: (INTENDS linked-from (ACTIVE-GOAL...)......)} in CX.7 Assert #{OB.2229: (ACTIVE-GOAL obj (M-MOVIE actor ......)......)} in CX.7 ================================================== I have to go see a movie. ================================================== The top-level control loop is invoked once Daydreamer has gotten off the ground by applying inferences and, in this case, creating two concerns. The most highly motivated nonhalted concern is ENTERTAINMENT and therefore a unit of planning is performed for this concern. Daydreamer has a rule which states that a goal for ENTERTAINMENT may be achieved by achieving an M-MOVIE subgoal. Thus a new context is sprouted in which the top-level goal for ENTERTAINMENT is connected to a subgoal for M-MOVIE. This context becomes the new reality context. This trace continues for a long time. At the end of the experience, daydreams are produced. To see the full trace, download Daydreamer and type (load "dd"). == instructions == * Download daydreamer.tar.gz * bold(gunzip daydreamer.tar.gz) * bold(tar xvf daydreamer.tar) * bold(cd daydreamer) * Start Allego CL. * GATE and Daydreamer run best compiled. To compile GATE, do (load "gate_compile"). To compile Daydreamer, do (load "dd_compile"). * To run the LOVERS1 experience, a rationalization daydream, and a revenge daydream, type (load "dd"). * Alternatively, to run a GATE test suite, do (load "gate_test"). To load GATE, do (load "gate_get"). To load Daydreamer, first load GATE and then do (load "dd_get"). Then to run Daydreamer, type (daydreamer). == tutorial == Let's extend Daydreamer with the italic(need to hack), which is satisfied by FTPing the Daydreamer source code. Here is how we would do this. First, download Daydreamer and bold(cd) to the Daydreamer directory. Then enter the following into a file called italic(hello_world.cl): ; Load Gate and Daydreamer. (setq *gate-load-options* '(sample)) (load "gate_get.cl") (load "dd_get.cl") ; Define types. ; This says that a FILE is a kind of OBJECT with a name slot, ; HACK is a NEED with a strength slot, and ; FTP is an ACTION with slots actor and obj. (ty$fcreate 'FILE '(OBJECT) '(name)) (ty$fcreate 'HACK '(NEED) '(strength)) (ty$fcreate 'FTP '(ACTION) '(actor obj)) ; Define objects. ; This says that File1 is the Daydreamer source code, which is ; a FILE. (ob$fcreate '(FILE name "the Daydreamer source code" obname File1)) ; Define needs. ; This says that Daydreamer has only two needs: to HACK and to ; be ENTERTAINED. (setq *needs* (list (ob$fcreate '(HACK)) (ob$fcreate '(ENTERTAINMENT)))) ; Define concern initiation, planning, and action effect rules. (define-rule Hack-Theme (sample) (RULE subgoal (UAND (HACK) (UPROC 'Less-Need-Thresh?)) goal (ACTIVE-GOAL (HACK strength (UPROC 'Need-Satisfied?))) is 'inference-only emotion (POS-EMOTION strength 0.6) inf-comments '(if "level of satisfaction of HACK need below" "threshold" then "ACTIVE-GOAL to HACK") plausibility 1.0)) ; This says that one plan for hacking is to FTP File1, which is ; the Daydreamer source code. (define-rule Hack-Plan (sample) (RULE subgoal (FTP actor ?Self obj File1) goal (HACK) plan-comments '(if "ACTIVE-GOAL to HACK" then "ACTIVE-GOAL to FTP Daydreamer source code") is 'plan-only plausibility 1.0)) ; This says that the FTP action has no preconditions. (define-rule Ftp-Plan (sample) (RULE subgoal (RTRUE) goal (FTP actor ?Self obj ?File) plan-comments '(if "ACTIVE-GOAL to FTP" then "ACTIVE-GOAL for RTRUE") is 'action-plan plausibility 1.0)) ; Define English generation rules. (define-gen HACK nil (gen-need-obj con stream switches context bp 'hack " some code")) (define-gen FTP nil (let ((subject (ob$gets con 'actor))) (gen-subject subject stream switches context bp) (gen-verb 'download subject stream switches (neg? con)) (gen (ob$get con 'obj) stream switches context bp) subject)) (For more information on defining rules, take a look at href(Extending Daydreamer,http://www.signiform.com/erik/programs/daydreamer/ddextend.htm) and the href(GATE tutorial,http://www.signiform.com/erik/programs/daydreamer/gate.htm).) Now start up Allegro CL, and type the following: > (load "hello_world.cl") Adding rule HACK-THEME Adding rule HACK-PLAN Adding rule FTP-PLAN ... > (daydreamer) Daydreamer will produce the following output: DAYDREAMER 3.5, Common Lisp version of 2004-12-20 Initialize DAYDREAMER Performing first-time initialization Creating primal reality... Assert #{OB.285: (ROMANTIC-INTEREST obj MOVIE-STAR1......)} in CX.3 Creating initial reality context... #{CX.3: (CX)} --> #{CX.4: (CX)} Assert #{OB.1575: (HACK strength 0.1)} in CX.4 Assert #{OB.1576: (ENTERTAINMENT strength 0.1......)} in CX.4 State changes from SUSPENDED to DAYDREAMING Run inferences in #{CX.4: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) ****************** HACK-THEME HACK-THEME fired as inference in CX.4 ------------------------------------------------------- IF level of satisfaction of HACK need below threshold THEN ACTIVE-GOAL to HACK ------------------------------------------------------- ?SELF = #{ME: (FEMALE-PERSON first-name "Sarah"......)} ****************** Activate top-level goal #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in #{CX.4: (CX)} Assert #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in CX.4 ================================================== I want to hack some code. ================================================== Add dependency from #{OB.1601: (POS-EMOTION strength 0.6)} to #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in #{CX.4: (CX)} Assert #{OB.1602: (DEPENDENCY linked-from (POS-EMOTION...)......)} in CX.4 Assert #{OB.1601: (POS-EMOTION strength 0.6)} in CX.4 ================================================== I feel interested in hacking some code. ================================================== Personal goal concern OB.1599: HACK motiv 0.6 status RUNABLE Running emotion-driven control loop... :Switching to new top-level goal #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} ----------------------CX.4-------------------- Running rules for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} setting last sprout concept = #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in #{CX.3: (CX)} Run inferences in #{CX.4: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Running p-goals in #{CX.4: (CX)} Running plans in #{CX.4: (CX)} for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} bp (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Run plan for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in #{CX.4: (CX)} Try fact plans Try rules and episodes Find candidate rules for obj #{OB.1600: (HACK strength (UPROC proc ......))} in #{CX.4: (CX)} Order candidates ((#{HACK-PLAN: (RULE subgoal (FTP actor ?Self......)......)} (T (SELF #{ME: (FEMALE-PERSON first-name "Sarah"......)})))) Run generic plan #{HACK-PLAN: (RULE subgoal (FTP actor ?Self......)......)} for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in #{CX.4: (CX)} #{CX.4: (CX)} --> #{CX.5: (CX)} HACK-PLAN Debugging resumed. Pruning possibilities from (#{CX.5: (CX)}) :----------------------CX.5-------------------- Running rules for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} setting last sprout concept = #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} in #{CX.4: (CX)} ****************** HACK-PLAN fired as plan for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} in CX.4 sprouting CX.5 ------------------------------------------------------- IF ACTIVE-GOAL to HACK THEN ACTIVE-GOAL to FTP Daydreamer source code ------------------------------------------------------- ?SELF = #{ME: (FEMALE-PERSON first-name "Sarah"......)} Assert #{OB.1609: (ORDERING)} in CX.5 Instantiate and activate subgoals Activate subgoal for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} obj #{OB.1610: (FTP actor ME obj FILE1)} in #{CX.5: (CX)} Assert #{OB.1612: (INTENDS linked-from (ACTIVE-GOAL...)......)} in CX.5 Assert #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} in CX.5 ================================================== I have to download the Daydreamer source code. ================================================== Run inferences in #{CX.5: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Running p-goals in #{CX.5: (CX)} Running plans in #{CX.5: (CX)} for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} bp (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Run plan for #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} in #{CX.5: (CX)} Try rules and episodes Find candidate rules for obj #{OB.1610: (FTP actor ME obj FILE1)} in #{CX.5: (CX)} Order candidates ((#{FTP-PLAN: (RULE subgoal (RTRUE) goal ......)} (T (FILE #{FILE1: (FILE name "the Daydreamer source code"......)}) (SELF #{ME: (FEMALE-PERSON first-name "Sarah"......)})))) Run generic plan #{FTP-PLAN: (RULE subgoal (RTRUE) goal ......)} for #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} in #{CX.5: (CX)} #{CX.5: (CX)} --> #{CX.6: (CX)} FTP-PLAN Debugging resumed. Pruning possibilities from (#{CX.6: (CX)}) :----------------------CX.6-------------------- Running rules for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} setting last sprout concept = NIL in #{CX.5: (CX)} ****************** FTP-PLAN fired as plan for #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} in CX.5 sprouting CX.6 ------------------------------------------------------- IF ACTIVE-GOAL to FTP THEN ACTIVE-GOAL for RTRUE ------------------------------------------------------- ?FILE = #{FILE1: (FILE name "the Daydreamer source code"......)} ?SELF = #{ME: (FEMALE-PERSON first-name "Sarah"......)} Retract OB.1609 in CX.6 Assert #{OB.1616: (ORDERING)} in CX.6 Instantiate and activate subgoals Activate subgoal for #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} obj #{OB.1617: (RTRUE)} in #{CX.6: (CX)} Assert #{OB.1619: (INTENDS linked-from (ACTIVE-GOAL...)......)} in CX.6 Assert #{OB.1618: (ACTIVE-GOAL obj (RTRUE) top-level-goal ......)} in CX.6 ****************** Goal #{OB.1618: (ACTIVE-GOAL obj (RTRUE) top-level-goal ......)} succeeds in #{CX.6: (CX)} Retract OB.1618 in CX.6 Assert #{OB.1620: (ACTIVE-GOAL obj (RTRUE))} in CX.6 Retract OB.1619 in CX.6 Assert #{OB.1622: (INTENDS linked-from (ACTIVE-GOAL...)......)} in CX.6 Retract OB.1620 in CX.6 Assert #{OB.1620: (SUCCEEDED-GOAL obj (RTRUE...)......)} in CX.6 Subgoals of #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} completed About to perform real action but not in performance mode Change status of OB.1599: HACK to WAITINGRun inferences in #{CX.6: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) :Taking optional object or concept input Enter concepts in #{CX.4: (CX)} Parser> At this point, Daydreamer is asking for input. Just type ``end'' and hit Enter. end End of parser input No more goals to run; switching to performance mode Change status of OB.1599: HACK to RUNABLEState changes from DAYDREAMING to PERFORMANCE :----------------------CX.6-------------------- Running rules for #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} setting last sprout concept = NIL in #{CX.5: (CX)} Subgoals of #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} completed Perform external action Perform action goal #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} in #{CX.6: (CX)} ****************** Goal #{OB.1611: (ACTIVE-GOAL obj (FTP actor ......)......)} succeeds in #{CX.6: (CX)} Retract OB.1611 in CX.6 Assert #{OB.1625: (ACTIVE-GOAL obj (FTP actor ......)......)} in CX.6 Retract OB.1622 in CX.6 Assert #{OB.1627: (INTENDS linked-from (ACTIVE-GOAL...)......)} in CX.6 Retract OB.1612 in CX.6 Assert #{OB.1628: (INTENDS linked-from (ACTIVE-GOAL...)......)} in CX.6 Retract OB.1625 in CX.6 Assert #{OB.1625: (SUCCEEDED-GOAL obj (FTP actor ......)......)} in CX.6 Assert #{OB.1626: (FTP actor ME obj FILE1)} in CX.6 ================================================== I download the Daydreamer source code. ================================================== Run inferences in #{CX.6: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Taking optional concept input Enter concepts in #{CX.6: (CX)} Parser> end End of parser input Subgoals of #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} completed ****************** Goal #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} succeeds in #{CX.6: (CX)} Replace obj of #{OB.1599: (ACTIVE-GOAL obj (HACK strength ......)......)} with (T) Retract OB.1599 in CX.6 Assert #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} in CX.6 ================================================== I succeed at hacking some code. ================================================== Assert #{OB.1631: (HACK strength 1.0)} in CX.6 ================================================== I hack some code. ================================================== Run inferences in #{CX.6: (CX)}, bp = (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Running p-goals in #{CX.6: (CX)} Running plans in #{CX.6: (CX)} for #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} bp (#{ME: (FEMALE-PERSON first-name "Sarah"......)}) Terminating planning for top-level goal #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} Leaf context #{CX.6: (CX)} [OB.1599: (SG. (HACK strength 1.0))] [OB.1625: (SG. (FTP actor ME obj FILE1))] [OB.1620: (SG. (RTRUE))] Removing motivating emotions of #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} in #{CX.6: (CX)} Retract OB.1602 in CX.6 Retract OB.1601 in CX.6 Emotional responses for #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} in #{CX.6: (CX)} Add dependency from #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} to #{OB.1634: (POS-EMOTION)} in #{CX.6: (CX)} Assert #{OB.1635: (DEPENDENCY linked-from (SUCCEEDED-GOAL...)......)} in CX.6 Assert #{OB.1634: (POS-EMOTION strength 0.6)} in CX.6 ================================================== I feel pleased about hacking some code. ================================================== Store episode #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} in #{CX.6: (CX)} Assess scenario desirability in #{CX.6: (CX)} #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} (0.6) Scenario desirability = 0.6 Store goal of episode #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)}, realism 1.0 Store goal of episode #{OB.1625: (SUCCEEDED-GOAL obj (FTP actor ......)......)}, realism 1.0 Store goal of episode #{OB.1620: (SUCCEEDED-GOAL obj (RTRUE...)......)}, realism 1.0 Make episode for goal #{OB.1625: (SUCCEEDED-GOAL obj (FTP actor ......)......)} Storing #{EPISODE.1: (EPISODE rule FTP-PLAN goal ......)} under #{FTP-PLAN: (RULE subgoal (RTRUE) goal ......)} Make episode for goal #{OB.1599: (SUCCEEDED-GOAL obj (HACK strength ......)......)} Storing #{EPISODE.2: (EPISODE rule HACK-PLAN goal ......)} under #{HACK-PLAN: (RULE subgoal (FTP actor ?Self......)......)} Storing #{EPISODE.2: (EPISODE rule HACK-PLAN goal ......)} under #{OB.1634: (POS-EMOTION strength 0.6)} Assert #{OB.1634: (POS-EMOTION strength 0.6)} in EPISODIC-MEMORY Storing #{EPISODE.2: (EPISODE rule HACK-PLAN goal ......)} under #{FILE1: (FILE name "the Daydreamer source code"......)} Assert #{FILE1: (FILE name "the Daydreamer source code"......)} in EPISODIC-MEMORY Activate index #{HACK-PLAN: (RULE subgoal (FTP actor ?Self......)......)} Activate index #{FILE1: (FILE name "the Daydreamer source code"......)} ... Congratulations! You have just extended Daydreamer. == home-url == http://www.signiform.com/erik/programs/daydreamer/ == doc-url == http://www.signiform.com/erik/programs/daydreamer/ddextend.htm http://www.signiform.com/erik/programs/daydreamer/gate.htm == license == href(GPL Version 2, http://www.signiform.com/erik/programs/daydreamer/license.txt) == book == href(Daydreaming in Humans and Machines,http://www.amazon.com/exec/obidos/ASIN/0893915629/) by Erik T. Mueller. Essential reading for anyone who wants to understand, use, or extend Daydreamer. You can also download a href(scanned PDF file,http://www.signiform.com/erik/pubs/ucla/870017.pdf) of an earlier version of this book. == references == == source-fooball == You can get it from href(the author's website,http://www.signiform.com/erik/programs/daydreamer/daydreamer3.5.tar.gz) or from href(this site,/source/daydreamer3.5.tar.gz). == release-date == December 20, 2004 == release-version == 3.5 == status == Alpha == history == Previous releases: * May 7, 1999: Daydreamer 3.4 == acl-dependencies == Runs in any Allegro CL 6.2 or later. == other-dependencies == None. == platform == Any Allegro CL supported platform. == ad == daydreamer