summaryrefslogtreecommitdiff
path: root/modeling
diff options
context:
space:
mode:
Diffstat (limited to 'modeling')
-rw-r--r--modeling/model_init.py243
-rw-r--r--modeling/productions_math.py144
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)