summaryrefslogtreecommitdiff
path: root/modeling/model_init.py
diff options
context:
space:
mode:
authorNiclas Dobbertin <niclas.dobbertin@mailbox.org>2024-07-05 10:47:43 +0200
committerNiclas Dobbertin <niclas.dobbertin@mailbox.org>2024-07-05 10:47:43 +0200
commite3d3c3343031a7aaba0f9c687928df11107d956f (patch)
treebccfbdcc46cdc8142d192bfa7a7fd9bae15a54a2 /modeling/model_init.py
parent3af823401ef8151dd298c73b10f7c03886c27e3d (diff)
model init in own file
Diffstat (limited to 'modeling/model_init.py')
-rw-r--r--modeling/model_init.py243
1 files changed, 243 insertions, 0 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