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
""" 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
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
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))