WPI Computer Science Department

Computer Science Department
------------------------------------------

Appendix C. Launch User's Guide
------------------------------------------

Launch provides an environment for the user that automates several common commands. It is not necessary to use SiFASyB, but is very helpful.

Launch was written in C on a DEC Alpha workstation. It is designed to provide an interface to the Single Function Agent System Builder (SiFASyB), as described in the MQP report entitled "Design and Implementation of a Single Function Agent Generator" by Mark Santesson. The project code is DCB9502.

This document explains how to configure and use the launch program. It is assumed that the reader has been exposed to such concepts as agents, agent systems, projects, and clipsifying.

Other User's Guides are available:

------------------------------------------

C.1 Configuring Launch

Launch's primary purpose to make it easier to use the SiFASyB. This is accomplished by allowing the user to enter one-key commands instead of longer and difficult to remember command shell instructions. However, in order to do this, launch needs to have access to the full commands. These commands are passed as command line parameters. Figure C.1 shows the command line parameters that launch expects. Figure C.1 is displayed on the screen whenever the program is invoked improperly. Starting the program without specifying any parameters will cause it to be displayed.

USAGE: launch <filename> <Clipsify command>
   Launch should be run in the same directory as the project data files.
   <filename> is the name of the project file.  It is assumed
that a file called "<filename>.bat" exists which was produced by the
clipsifier.

   <Clipsify command> is the name of the Clipsify executable file,
including the path to it.  This needs to be in absolute form.
For example, the address "../../clipsify" would not work,
but "/cs1/csugrads1/markts/clipsify" would.
Figure C.1: Launch Usage

It is recommended that a script file be created that will invoke the program. The following instructions explain how to do this:

The program is now set up. To run the program, change to the directory where the "launch" script file is located, which should also be the location of the project data files, and type the command "launch". The script file will be executed, which will cause the actual "launch" executable to be started with the appropriate command line arguments.

There must be a separate "launch" script file for every different SiFASyB project that is to be built. If both projects are in the same directory, all parameters will be the same except for the second, which gives the name of the SiFASyB files.

------------------------------------------

C.2 Using Launch

When the program is started, a list of commands is displayed. The available commands are also listed in Figure C.2. Each command starts with a unique letter, and that letter can be used alone to issue the command.

><Command>         Send Command to clips
!<Command>         Execute a shell command
Log <file>         Send all output to a file
Clipsify           Clipsify the project
Go                 Start Clips, and load the batch file
?                  Display this list
Quit               Exit the launcher
Figure C.2: Launch Commands

The "log" command opens a log file. Everything that appears on the screen will be written to the log file. This is useful when debugging. Often, important data will scroll off the screen before it can be read. The log file can be closed either by exiting launch or issuing another "log" command. The log file can be edited just like any other text program.

The "!" character is used to indicate that the rest of the line should be performed as if it was typed at the system shell. For instance, to obtain a list of files in the current directory, type "!ls". Unfortunately, the results will not be entered into the log file if you have opened one. You can edit a file by issuing the command "!edit filename", where "edit" is the name of the editor to use. When editing a file, it is a very good thing that the entire session is not saved in the log file. The log file will register the command to edit the file, but will not show the entire session.

The "clipsify" command is used to run the Clipsifier to translate the project with the name specified when the program was started. The output from the Clipsifier will be displayed on the screen, but if there are a lot of errors, many may scroll off of it before they can be read. In such cases, you should open a log file and then edit it after the Clipsifier is finished. (You may have to close the log file before it is actually written to disk.)

Once a working system has been translated into CLIPS code by the Clipsifier, it can be loaded into CLIPS by using the "go" command. This command starts up the CLIPS interpreter, loads the SiFA system files, and prepares the system for execution.

Once CLIPS has been loaded by using the "go" command, you can send commands to CLIPS by typing the "greater than" character (" > ") before the text to be sent to CLIPS. As a convenience, launch assumes that this command was intended when the first character of a line is the open parenthesis, or "(" character. Since virtually all CLIPS command starts with this character, you can type most CLIPS commands just as you would when directly using the CLIPS interpreter.

When you are done using launch, type "quit", or just "q".

Below is a sample session of someone using launch. The text in italics is entered by the user. For a more thorough explanation of launch as well as other aspects of the SiFASyB, see the MQP report mentioned at the beginning of this guide. % launch

><Command>         Send Command to clips
!<Command>         Execute a shell command
Log <file>         Send all output to a file
Make               Remake the Clipsifier
Clipsify           Clipsify the project
Go                 Start Clips, and load the batch file
?                  Display this list
Quit               Exit the launcher

: c
CLIPSIFIER> 
CLIPSIFIER> Project "Test Project" has 4 agents.
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> Processing "Width Selector" with target "WIDTH"
CLIPSIFIER> (id 20982, 2 rules, 9 selects, 2 conflict detection methods)
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> Processing "Depth Selector" with target "DEPTH"
CLIPSIFIER> (id 9238, 2 rules, 12 selects, 1 conflict detection methods)
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> Processing "Maximize area critic" with target "DEPTH"
CLIPSIFIER> (id 8948, 0 rules, 0 selects, 1 conflict detection methods)
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> Processing "Material Selector" with target "MAT"
CLIPSIFIER> (id 13100, 0 rules, 6 selects, 1 conflict detection methods)
CLIPSIFIER> 
CLIPSIFIER> 
CLIPSIFIER> 
Return state: 256
: go
#          CLIPS (V6.02 05/05/94)
# CLIPS> (batch "testproj.bat")

# TRUE
# CLIPS> ; Batch loading file for Test Project, by the SiFASyB Clipsifier
# 
# (clear)
# CLIPS> (load "testproj.globals")
# Defining defglobal: output
# TRUE
# CLIPS> (load "testproj.templates")
# Defining deftemplate: param
# Defining deftemplate: pref
# Defining deftemplate: accepted
# Defining deftemplate: conflict
# Defining deftemplate: holding_value
# Defining deftemplate: negotiation
# Defining deftemplate: negotiation-state
# Defining deftemplate: constraint
# Defining deftemplate: turn
# Defining deftemplate: detect
# TRUE
# CLIPS> (load "testproj.facts")
# Defining deffacts: params
# TRUE
# CLIPS> (load "testproj.functions")
# Defining deffunction: say
# Defining deffunction: first
# Defining deffunction: second
# Defining defrule: print-failure +j
# TRUE
# CLIPS> (load "width.sel.rules")
# Defining defrule: Width_Selector-Init-Target +j+j
# Defining defrule: Width_Selector-Init-Target-Cont =j+j
# Defining defrule: Width_Selector-SELECT_1 +j+j
# Defining defrule: Width_Selector-SELECT_2 =j+j
# Defining defrule: Width_Selector-CONFLICT_1 +j+j+j
# Defining defrule: Width_Selector-IGNORE_2 =j+j+j+j+j
# Defining defrule: Width_Selector-StartNegotiation +j+j+j
# Defining defrule: Width_Selector-SetupNegotiation =j+j
# Defining defrule: Width_Selector-DontGiveAlternative +j+j+j
# Defining defrule: Width_Selector-GiveAlternative =j=j+j+j+j
# Defining defrule: Width_Selector-GiveAlternative-Cont +j+j+j+j+j
# Defining defrule: Width_Selector-ValueIsGood =j+j+j+j+j+j
# Defining defrule: Width_Selector-ValueIsBad =j=j=j=j=j+j
# Defining defrule: Width_Selector-ReceiveReject =j+j
# Defining defrule: Width_Selector-RequestRelaxation =j+j+j
# Defining defrule: Width_Selector-RequestAlternative =j=j+j
# Defining defrule: Width_Selector-NoMoreItems =j+j+j+j
# Defining defrule: Width_Selector-BothListsEmpty =j+j+j+j
# Defining defrule: Width_Selector-ReceiveDontCare =j+j+j+j+j
# Defining defrule: Width_Selector-DontRelax =j+j+j
# Defining defrule: Width_Selector-GiveRelaxation =j=j+j+j
# TRUE
# CLIPS> (load "depth.sel.rules")
# Defining defrule: Depth_Selector-Init-Target +j+j
# Defining defrule: Depth_Selector-Init-Target-Cont =j+j
# Defining defrule: Depth_Selector-SELECT_1 +j
# Defining defrule: Depth_Selector-SELECT_2 +j
# Defining defrule: Depth_Selector-CONFLICT_1 +j+j+j+j
# Defining defrule: Depth_Selector-StartNegotiation =j+j+j
. . . . . . . . . .
# Defining defrule: Depth_Selector-GiveRelaxation =j=j+j+j
# TRUE
# CLIPS> (load "depth.cri.rules")
# Defining defrule: Maximize_area_critic-CONFLICT_1 +j+j+j+j
# Defining defrule: Maximize_area_critic-StartNegotiation =j+j+j
. . . . . . . . . .
# Defining defrule: Maximize_area_critic-GiveRelaxation =j=j+j+j
# TRUE
# CLIPS> (load "mat.sel.rules")
# Defining defrule: Material_Selector-Init-Target +j+j
# Defining defrule: Material_Selector-Init-Target-Cont =j+j
# Defining defrule: Material_Selector-Default-Selection +j
# Defining defrule: Material_Selector-CONFLICT_1 +j+j+j+j
# Defining defrule: Material_Selector-StartNegotiation =j+j+j
. . . . . . . . . .
# Defining defrule: Material_Selector-GiveRelaxation =j=j+j+j
# TRUE
# CLIPS> (reset)
# CLIPS> 
: (run)
# Depth Selector: Initialized DEPTH to 2.0.
# 
# Width Selector: Initialized WIDTH to 2.0.
# 
# Material Selector: Initialized MAT to titanium.
# 
# CLIPS> 
: (facts)
# f-0     (initial-fact)
# f-1     (turn (agent nil) (from nil))
# f-2     (pref (agent Width_Selector) (list 0.9 1.1 0.8 1.2 0.7 1.3 1.4 1.5))
# 
# f-3     (accepted (agent Width_Selector) (list 1.0))
# f-4     (constraint (agent Width_Selector) (value 0))
# f-5     (pref (agent Depth_Selector) (list 1.8 1.6 2.2 1.4 1.2 2.4 1.0 0.8 2
# .6 0.6 0.4))
# f-6     (accepted (agent Depth_Selector) (list 2.0))
# f-7     (constraint (agent Depth_Selector) (value 0))
# f-8     (pref (agent Material_Selector) (list steel iron oak pine plastic))
# f-9     (accepted (agent Material_Selector) (list titanium))
# f-10    (constraint (agent Material_Selector) (value 0))
# f-17    (param (name DEPTH) (owner Depth_Selector) (val 2.0))
# f-19    (param (name WIDTH) (owner Width_Selector) (val 2.0))
# f-22    (param (name MAT) (owner Material_Selector) (val titanium))
# For a total of 14 facts.
# CLIPS> 
: (exit) : (exit)
Clips process not started.  Use the "Go" command.
: q

------------------------------------------

For more information on the Launch program, consult the MQP report referenced at the beginning of this document.

------------------------------------------

User's Guides are available for the other two components of SiFASyB:

Written by: markts@wpi.wpi.edu

[Feedback] [Search Our Web] [Help & Index]

[Return to the WPI Homepage] [Return to CS Homepage]

dcb@cs.wpi.edu / Aug 6, 1996