diff options
Diffstat (limited to 'modeling')
-rw-r--r-- | modeling/model_init.py | 243 | ||||
-rw-r--r-- | modeling/productions_math.py | 144 |
2 files changed, 247 insertions, 140 deletions
diff --git a/modeling/model_init.py b/modeling/model_init.py new file mode 100644 index 0000000..a61fc9b --- /dev/null +++ b/modeling/model_init.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 + +import pyactr as actr + +# https://stackoverflow.com/a/39644726 +def get_digit(number, n): + return number // 10**n % 10 + + +def init(): + env = actr.Environment() + Model = actr.ACTRModel(environment=env) + + DM = Model.decmem + Model.visualBuffer("visual", "visual_location", DM, finst=4) + goal = Model.goal + imaginal = Model.set_goal(name="imaginal", delay=0.2) + + actr.chunktype("number", ("number", "next", "ones", "tens", "hundreds")) + actr.chunktype( + "procedure", + ( + "proc", + "op1", + "arg1_1", + "arg1_1_idx" + "arg1_2", + "arg1_2_idx" + "op2", + "arg2_1", + "arg2_1_idx" + "arg2_2", + "arg2_2_idx" + ), + ) + actr.chunktype( + "math_goal", + ( + "task", + "result1", + "result2", + "op", + "nextop", + "arg1", + "arg1_idx" + "arg2", + "arg2_idx" + "result", + "expand_slot", + "hundreds1", + "tens1", + "ones1", + "hundreds2", + "tens2", + "ones2", + "hundreds_ans", + "tens_ans", + "ones_ans", + "mul_counter", + "mem_arg1", + "mem_arg2", + "ones_carry", + "tens_carry", + "vis_counter", + ), + ) + actr.chunktype( + "math_op", + ( + "op", + "arg1", + "arg2", + "result", + ), + ) + + # Add procedures + DM.add( + actr.makechunk( + "procedure1", + "procedure", + proc="proc1", + op1="sub", + arg1_1="Sandstein", + arg1_1_idx=4, + arg1_2="Sandstein", + arg1_2_idx=2, + op2="mul", + arg2_1="result1", + arg2_1_idx=0, + arg2_2="Mineralien", + arg2_2_idx=1, + ) + ) + + DM.add( + actr.makechunk( + "procedure2", + "procedure", + proc="proc2", + op1="mul", + arg1_1=2, + arg1_1_idx=0, + arg1_2="Algen", + arg1_2_idx=1, + op2="add", + arg2_1="result1", + arg2_1_idx=0, + arg2_2="Sandstein", + arg2_2_idx="min", + ) + ) + DM.add( + actr.makechunk( + "procedure3", + "procedure", + proc="proc3", + op1="add", + arg1_1="Gifte", + arg1_1_idx="max", + arg1_2="Gifte", + arg1_2_idx="min", + op2="add", + arg2_1="result1", + arg2_1_idx=0, + arg2_2=0, + arg2_2_idx=0, + ) + ) + DM.add( + actr.makechunk( + "procedure4", + "procedure", + proc="proc4", + op1="mul", + arg1_1="Mineralien", + arg1_1_idx=1, + arg1_2=2, + arg1_2_idx=0, + op2="sub", + arg2_1="result1", + arg2_1_idx=0, + arg2_2="Gifte", + arg2_2_idx="4", + ) + ) + DM.add( + actr.makechunk( + "procedure5", + "procedure", + proc="proc5", + op1="sub", + arg1_1="Gifte", + arg1_1_idx=3, + arg1_2="Gifte", + arg1_2_idx=2, + op2="greater", + arg2_1="result1", + arg2_1_idx=0, + arg2_2="Sandstein", + arg2_2_idx=3, + ) + ) + DM.add( + actr.makechunk( + "procedure6", + "procedure", + proc="proc6", + op1="add", + arg1_1="Sandstein", + arg1_1_idx=1, + arg1_2="Gifte", + arg1_2_idx=1, + op2="lesser", + arg2_1="result1", + arg2_1_idx=0, + arg2_2="Algen", + arg2_2_idx=1, + ) + ) + DM.add( + actr.makechunk( + "procedure_overall", + "procedure", + proc="proc_overall", + op1="sub", + arg1_1=100, + arg1_1_idx=0, + arg1_2="results", + arg1_2_idx="max", + op2="add", + arg2_1="result1", + arg2_1_idx=0, + arg2_2=0, + arg2_2_idx=0, + ) + ) + + # Add numbers 0-999 to decmem + for i in range(0, 1000): + DM.add( + actr.makechunk( + f"number{str(i)}", + "number", + number=i, + next=i + 1, + ones=get_digit(i, 0), + tens=get_digit(i, 1), + hundreds=get_digit(i, 2), + ) + ) + + # Add comparison relations to single digit numbers + for i in range(0, 11): + for j in range(0, 11): + DM.add( + actr.makechunk( + f"greater{i}{j}", + "math_op", + op="greater", + arg1=i, + arg2=j, + result=max(i, j), + ) + ) + # DM.add( + # actr.makechunk( + # f"lesser{i}{j}", + # "math_op", + # op="lesser", + # arg1=i, + # arg2=j, + # result=min(i, j), + # ) + # ) + for i in range(0, 21): + for j in range(0, 21): + DM.add( + actr.makechunk( + f"plus{i}{j}", "math_op", op="add", arg1=i, arg2=j, result=i + j + ) + ) + return Model, DM, goal, imaginal, env diff --git a/modeling/productions_math.py b/modeling/productions_math.py index ca7d95a..42c08da 100644 --- a/modeling/productions_math.py +++ b/modeling/productions_math.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 import pyactr as actr + +from model_init import init import prod_addition import prod_comp import prod_multi @@ -11,144 +13,6 @@ import prod_vis import model_env -# https://stackoverflow.com/a/39644726 -def get_digit(number, n): - return number // 10**n % 10 - - -def init(): - env = actr.Environment() - Model = actr.ACTRModel(environment=env) - - DM = Model.decmem - Model.visualBuffer("visual", "visual_location", DM, finst=4) - goal = Model.goal - imaginal = Model.set_goal(name="imaginal", delay=0.2) - - actr.chunktype("number", ("number", "next", "ones", "tens", "hundreds")) - actr.chunktype( - "procedure", - ( - "proc", - "op1", - "arg1_1", - "arg1_1_idx" - "arg1_2", - "arg1_2_idx" - "op2", - "arg2_1", - "arg2_1_idx" - "arg2_2", - "arg2_2_idx" - ), - ) - actr.chunktype( - "math_goal", - ( - "task", - "result1", - "result2", - "op", - "nextop", - "arg1", - "arg1_idx" - "arg2", - "arg2_idx" - "result", - "expand_slot", - "hundreds1", - "tens1", - "ones1", - "hundreds2", - "tens2", - "ones2", - "hundreds_ans", - "tens_ans", - "ones_ans", - "mul_counter", - "mem_arg1", - "mem_arg2", - "ones_carry", - "tens_carry", - "vis_counter", - ), - ) - actr.chunktype( - "math_op", - ( - "op", - "arg1", - "arg2", - "result", - ), - ) - - # Add procedures - DM.add( - actr.makechunk( - "procedure1", - "procedure", - proc="proc1", - op1="add", - arg1_1="Gifte", - arg1_1_idx=4, - arg1_2="Sandstein", - arg1_2_idx=4, - op2="mul", - arg2_1="result1", - arg2_1_idx=0, - arg2_2="Gifte", - arg2_2_idx=3, - ) - ) - - # Add numbers 0-999 to decmem - for i in range(0, 1000): - DM.add( - actr.makechunk( - f"number{str(i)}", - "number", - number=i, - next=i + 1, - ones=get_digit(i, 0), - tens=get_digit(i, 1), - hundreds=get_digit(i, 2), - ) - ) - - # Add comparison relations to single digit numbers - for i in range(0, 11): - for j in range(0, 11): - DM.add( - actr.makechunk( - f"greater{i}{j}", - "math_op", - op="greater", - arg1=i, - arg2=j, - result=max(i, j), - ) - ) - # DM.add( - # actr.makechunk( - # f"lesser{i}{j}", - # "math_op", - # op="lesser", - # arg1=i, - # arg2=j, - # result=min(i, j), - # ) - # ) - for i in range(0, 21): - for j in range(0, 21): - DM.add( - actr.makechunk( - f"plus{i}{j}", "math_op", op="add", arg1=i, arg2=j, result=i + j - ) - ) - return Model, DM, goal, imaginal, env - - def add_goal(goal, op, arg1, arg2): goal.add(actr.makechunk("", "math_goal", op=op, task=op, arg1=arg1, arg2=arg2)) @@ -190,7 +54,7 @@ def start(): # op, arg1, arg2 = wait_input() Model, DM, goal, imaginal, env = init() # add_goal(goal, op, arg1, arg2) - add_proc(goal, "proc1") + add_proc(goal, "proc6") envs = model_env.get_env() general_prod(Model) @@ -198,7 +62,7 @@ def start(): number_prods = prod_numbers.number(Model) add_prods = prod_addition.addition(Model) greater_prods = prod_comp.greater_than(Model) - less_prods = prod_comp.less_than(Model) + less_prods = prod_comp.lesser_than(Model) multi_prods = prod_multi.multiplication(Model) motor_prods = prod_motor.procedures(Model) visual_prods = prod_vis.procedures(Model) |