User's Guide‎ > ‎

SimStudent Author's ToolKit

This article describes how to use SimStudent with a CTAT tutor you've created.

Table of Contents

1. Design your tutor
2. Prepare SimStudent
3. Save "Jess Facts"
4. Use SimStudent


  • CTAT 3.0+
  • Download and extract the SimSt Toolkit from the attachments (see below at the end) 
  • You should have your own tutor in a directory under $CTAT/Projects, where $CTAT is the folder where you have installed CTAT, and $CTAT ends with "Cognitive Tutor Authoring Tools". The folder where you have your tutor will be called $Tutor. This must be under $CTAT/Projects.
  • You may also want to go through a SimStudent tutorial to refresh your knowledge of SimStudent.

1. Design your tutor

Since we are restricted to a limited set of operators and feature-predicates, solving problems should only require the background knowledge that is made available by

Design the Java Student Interface for your tutor, following  the instruction on the Student Interface Tutorials. 

2. Prepare SimStudent

  1. Download
    • Unzip the file where ever you like
  2. Open the unzipped folder and copy the following files to your tutor folder, $Tutor:
    • operators.txt
    • constraints.txt
    • feature-predicates.txt
    • wmeStructure.txt
    • compileMyTutor.bat
    • runTutor.bat
  3. Copy ctat.jar from the unzipped folder to $CTAT/lib. Also download and copy anima.jar, mylib.jar, and unzipped cl directory to the $CTAT/lib.
  4. Download and copy the unzipped FOIL 6 folder into the $CTAT main directory. 
  5. Open and on line 10, replace your_tutor_folder  with $Tutor, i.e. the name of the directory containing your tutor java file. For example, if your tutor is located in a folder named MyTutor, you should replace your_tutor_folder with MyTutor, and line 10 would become package MyTutor;
  6. Run (on Mac or Linux) or compileMyTutor.bat (on Windows).

3. Save "Jess Facts"

Suppose $Tutor="MyTutor"—your tutor interface is in the directory "MyTutor"—and your tutor interface is called "MyTutorInterface".

  1. Delete the files and wmeTypes.clp, if they exist.
  2. Update your tutor's package name. To do so, open  (if you are using Mac or Linux) or runTutor.bat (if you are using Windows) and replace "YOUR_PACKAGE_NAME", with the folder in which your interface resides (i.e. MyTutor in this example).

    1. Start CTAT with your tutor interface:
      $ runTutor MyTutor/MyTutorInterface
    2. Switch the Tutor Type to Cognitive Tutor (Jess).
    3. Select Graph > Create Start State. You don't need to enter anything in the student interface before creating the start state since we are not actually creating a start state here.
    4. Name your start state as "init".
    5. Select File > Save Jess Facts. If a pop-up dialog appears, press OK.
    6. Confirm that the file will be saved as (overwrite previous version, if necessary) and make sure that the MAIN:problem fact in this file has the name 'init' assigned to it. 
    7. Select File > Save Jess Templates. Click OK in the pop up dialog.
    8. Close this instance of CTAT. Do not save the graph.
    9. Now, open the file wmeTypes.clp and add the line "(slot value)" to the deftemplate MAIN::button      
    10. Save the file. 
    11. Open the file “wmeStructure.txt” and modify it based on your interface design. This file has 3 sections:

    a.     Section one: Parent - child WMEs

    b.     Section two: terminal WMEs

    c.     Section three: ignored WMEs

    You should create a wmeStructure.txt file that corresponds to your interface. To identify the type of wme’s you have (e.g. parent-child or terminal), you have to open the file “wmeTypes.clp” and take a look at the Jess templates defined there. If a template contains a “multislot” value, then this template is a parent wme and the multislot is the child wme. For example if you on your wmeTypes.clp this template: 

                            (deftemplate MAIN:table  (slot name) (multislot columns))

    then, this means that you should add an entry " MAIN:table – columns "  in your wmeStructure.txt parent-child section.
    Similarly, if you have an entry that does not have a “multislot” value on your wmeTypes.clp, e.g. like this:

    (deftemplate MAIN:textfield (slot name) (slot value)), 

    this indicates a terminal wme and you should create an entry  " MAIN:textfield  ”   in your wmeStructure.txt terminal section.             

    Note: Whenever you modify your tutor's Student Interface, you need to perform steps 1-12 again, before using SimStudent with your tutor.

    4. Use SimStudent

    Once you've done the above steps, you are ready to use SimStudent. You should have a file called as well as MyTutorInterface.class in the directory $CTAT/Projects/MyTutor

    1. Close CTAT if it is running.
    2. Open a Terminal window and cd to $CTAT/Projects/MyTutor:
      $ cd CTAT/Project/MyTutor
    3. Run the shell script with the class name of your tutor:
      $ runTutor MyTutor/MyTutorInterface
    4. Switch the Tutor Type to Simulated Student.
    5. Create a start state with an actual problem (meaning, you enter some entries into the interface).
    6. Do a demonstration! You can find the way to demonstrate steps in the Equation Tutorial or the Long Division Tutorial.
    5. Writing domain dependent knowledge (Customizing SimStudent to your own domain)

    In this section, you will be adding an operator / constraint to the existing SimStudent. For this you need to go through the following tutorial: Write domain dependent knowledge.

    Roya Hosseini,
    May 21, 2015, 1:09 PM
    Nikolaos Barmpalios,
    Jul 9, 2015, 7:38 AM
    Roya Hosseini,
    May 21, 2015, 12:54 PM
    Roya Hosseini,
    May 21, 2015, 1:03 PM
    Roya Hosseini,
    May 21, 2015, 12:59 PM