Example #1
0
We abstract away from syntactic parsing, among other things.
"""

import pyactr as actr

actr.chunktype("word", "meaning, category, number, synfunction")
actr.chunktype("goal_lexeme", "task, category, number")

carLexeme = actr.makechunk(nameofchunk="car",
                           typename="word",
                           meaning="[[car]]",
                           category="noun",
                           number="sg",
                           synfunction="subject")

agreement = actr.ACTRModel()

dm = agreement.decmem
dm.add(carLexeme)

agreement.goal.add(
    actr.chunkstring(string="""
    isa goal_lexeme
    task agree
    category verb"""))

agreement.productionstring(name="retrieve",
                           string="""
    =g>
    isa goal_lexeme
    category verb
Example #2
0
"""
A simple top-down parser.
"""

import pyactr as actr

environment = actr.Environment(focus_position=(320, 180))

actr.chunktype("read", "state word goal_cat")
actr.chunktype("parsing", "top bottom")
actr.chunktype("word", "form cat")

parser = actr.ACTRModel(environment)

parser.decmem.add(
    actr.chunkstring(string="isa word form 'Mary' cat 'ProperN'"))
parser.decmem.add(
    actr.chunkstring(string="isa word form 'Bill' cat 'ProperN'"))
parser.decmem.add(actr.chunkstring(string="isa word form 'likes' cat 'V'"))

parser.goal.add(
    actr.chunkstring(string="""
        isa     read
        state   start
        goal_cat 'S'"""))
parser.goal = "g2"
parser.goals["g2"].add(
    actr.chunkstring(string="""
        isa     parsing
        top     'S'"""))
parser.goals["g2"].delay = 0.2
        return np.arange(start=-time_interval, stop=-(time_interval*word_freq)-1, step=-time_interval)
    else:
        return np.array([0])

def calculate_activation(parser, freq_array):
    """
    Calculate activation using parser and freq_array.
    """
    return np.log(np.sum(freq_array ** (-parser.model_parameters["decay"])))

sentences_csv = load_file(SENTENCES, sep=",") #sentences with frequencies

environment = actr.Environment(focus_position=(320, 180))

parser = actr.ACTRModel(environment, subsymbolic=True, retrieval_threshold=-20,
                        decay = 0.5, latency_factor=0.04, latency_exponent=0.08,
                        eye_mvt_angle_parameter=2000, emma_noise=False,
                        rule_firing=0.05, motor_prepared=True, automatic_visual_search=False)
temp_dm = {}

temp_activations = {}

words = sentences_csv.groupby('word', sort=False)

actr.chunktype("word", "form cat")

actr.chunktype("parsing_goal", "task")

actr.chunktype("reading", "state position word reanalysis retrieve_wh what_retrieve tag")


actr.chunktype("action_chunk", "ACTION ACTION_RESULT_LABEL ACTION_PREV WORD_NEXT0_LEX WORD_NEXT0_POS TREE0_LABEL TREE1_LABEL TREE2_LABEL TREE3_LABEL TREE0_HEAD TREE0_HEADPOS TREE0_LEFTCHILD TREE0_RIGHTCHILD TREE1_HEAD TREE1_HEADPOS TREE1_LEFTCHILD TREE1_RIGHTCHILD TREE2_HEAD TREE2_HEADPOS TREE3_HEAD ANTECEDENT_CARRIED")
"""
A basic model of grammar.
"""

import pyactr as actr

regular_grammar = actr.ACTRModel()

actr.chunktype("goal_chunk", "mother daughter1 daughter2 state")

dm = regular_grammar.decmem

regular_grammar.goal.add(
    actr.chunkstring(string="""
    isa         goal_chunk
    mother      NP
    state       rule
"""))

regular_grammar.productionstring(name="NP ==> N NP",
                                 string="""
    =g>
    isa         goal_chunk
    mother      NP
    daughter1   None
    daughter2   None
    state       rule
    ==>
    =g>
    isa         goal_chunk
    daughter1   N
Example #5
0
    def __init__(self, env, **kwargs):
        self.m = actr.ACTRModel(environment=env, **kwargs)

        actr.chunktype("pair", "probe answer")
        
        actr.chunktype("goal", "state, arg1, arg2, sum, end")

        self.dm = self.m.decmem

        self.start = actr.makechunk(nameofchunk="start", typename="chunk", value="start")
        actr.makechunk(nameofchunk="done", typename="chunk", value="done")
        self.m.set_goal("g2")
        self.m.goals["g2"].delay=0.2

        self.m.productionstring(name="find_probe", string="""
        =g>
        isa     goal
        state   start
        ?visual_location>
        buffer  empty
        ==>
        =g>
        isa     goal
        state   attending
        ?visual_location>
        attended False
        +visual_location>
        isa _visuallocation
        value B
        screen_x lowest
        screen_y closest""") #this rule is used if automatic visual search does not put anything in the buffer
        
        self.m.productionstring(name="move_in_line", string="""
        =g>
        isa     goal
        state   attending
        ?visual_location>
        state   error
        ==>
        =g>
        isa     goal
        state   attending
        ?visual_location>
        attended False
        +visual_location>
        isa _visuallocation
        value B
        screen_x lowest
        screen_y closest""", utility=20) #this rule is used if automatic visual search does not put anything in the buffer

        self.m.productionstring(name="check_probe", string="""
        =g>
        isa     goal
        state   start
        ?visual_location>
        buffer  full
        ==>
        =g>
        isa     goal
        state   attending""")  #this rule is used if automatic visual search is enabled and it puts something in the buffer

        self.m.productionstring(name="attend_probe", string="""
        =g>
        isa     goal
        state   attending
        =visual_location>
        isa    _visuallocation
        screen_x    ~None
        ?visual>
        state   free
        ==>
        =g>
        isa     goal
        state   reading
        +visual>
        isa     _visual
        cmd     move_attention
        screen_pos =visual_location""")

        self.m.productionstring(name="encode_probe", string="""
        =g>
        isa     goal
        state   reading
        =visual>
        isa     _visual
        value   =val
        ==>
        =g>
        isa     goal
        sum     None
        state   None""")

        self.m.productionstring(name="retrieve_addition", string="""
        =g>
        isa     add
        state   None
        arg1    =num1
        arg2    =num2
        arg2    ~None
        sum     None
        ?retrieval>
        state   free
        buffer  empty
        ==>
        =g>
        isa     add
        state   None
        +retrieval>
        isa     add
        arg1     =num1
        arg2     =num2""", utility=7)

        self.m.productionstring(name="terminate_addition", string="""
        =g>
        isa     add
        =retrieval>
        isa     add
        arg1    ~None
        sum     =v7
        ==>
        ~retrieval>
        =g>
        isa     add
        state   move
        sum     =v7""", utility=7)

        for i, nums in enumerate([(2, 2), (4, 4), (4, 2), (2, 4)]):
            self.m.productionstring(name="retrieve_addition_terminate_addition" + str(i), string="""
        =g>
        isa     add
        state   None
        arg1    """+str(nums[0])+"""
        arg2    """+str(nums[1])+"""
        sum     None
        ?retrieval>
        state   free
        buffer  empty
        ==>
        =g>
        isa     add
        state   move
        sum     """+str(nums[0]+nums[1]), utility=7)


        self.m.productionstring(name="retrieve failure", string="""
        =g>
        isa     goal
        state   None
        arg2    ~None
        ?retrieval>
        state   error
        ==>
        =g>
        isa     goal
        state   None
        arg2    None""")


        for i in range(10):
            self.m.productionstring(name="fast_increment" + str(i), string="""
        =g>
        isa     goal
        state   None
        arg1   """+str(i)+"""
        sum     None
        ?retrieval>
        state   free
        buffer  empty
        ==>
        =g>
        isa     goal
        state   move
        sum   """+str(i+1), utility=6)

        self.m.productionstring(name="retrieve count", string="""
        =g>
        isa     goal
        state   None
        arg1    =x
        sum     None
        ?retrieval>
        state   free
        buffer  empty
        ==>
        +retrieval>
        isa     add
        arg1   =x
        arg2    1""", utility=4)
        
        self.m.productionstring(name="increment", string="""
        =g>
        isa     goal
        state   None
        =retrieval>
        isa     add
        arg2    1
        sum     =y
        sum     ~None
        ==>
        ~retrieval>
        =g>
        isa     goal
        state   move
        sum     =y""")

        self.m.productionstring(name="move_vis_loc", string="""
    =g>
    isa     goal
    state   move
    sum     =csum
    sum     ~None
    =visual_location>
    isa     _visuallocation
    screen_y    =sy
    ==>
    =g>
    isa     goal
    state   attending
    arg2    None
    arg1    =csum
    ~visual>
    ?visual_location>
    attended False
    +visual_location>
    isa _visuallocation
    value B
    screen_x closest
    screen_y    =sy""")

        self.m.productionstring(name="can_find", string="""
    =g>
    isa     goal
    sum         =x
    end         =x
    ?manual>
    state   free
    ==>
    ~retrieval>
    ~g>
    +manual>
    isa     _manual
    cmd     press_key
    key     'J'""", utility=5)

        self.m.productionstring(name="cannot_find", string="""
    =g>
    isa     goal
    state   attending
    ?visual_location>
    state   error
    ?manual>
    state   free
    ==>
    ~retrieval>
    ~g>
    +manual>
    isa     _manual
    cmd     press_key
    key     'F'""", utility=-5)

        self.productions = self.m._ACTRModel__productions
Example #6
0
import pyactr.utilities as utilities
import string
import warnings

DECAY = 0.5

#MP = 1.3
#RT = 2.8

SIMULATIONNUMBER = int(sys.argv[1])
MP = 2.0
RT = 4

ADDITION = str(SIMULATIONNUMBER) + str(MP) + str(RT)

addition = actr.ACTRModel(subsymbolic=True, retrieval_threshold=-2.25, latency_factor=0.1, latency_exponent=0.5, instantaneous_noise = 0.25, decay=DECAY, buffer_spreading_activation={"g": 1}, strength_of_association=3.3, association_only_from_chunks=False)

actr.chunktype("countOrder", ("first", "second"))

actr.chunktype("number", "value")

actr.chunktype("add", ("state", "arg1", "arg2", "sum"))

dm = addition.decmem

numbers = []

for i in range(0, 20):
    #numbers.append(actr.makechunk("number"+str(i), "number", value=i))
    numbers.append(str(i))