summaryrefslogtreecommitdiff
path: root/modeling/productions_math.py
blob: 42c08da6cab2e9102b916e017f91ce7f7bbbbb04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env python3

import pyactr as actr

from model_init import init
import prod_addition
import prod_comp
import prod_multi
import prod_numbers
import prod_procedure
import prod_motor
import prod_vis
import model_env


def add_goal(goal, op, arg1, arg2):

    goal.add(actr.makechunk("", "math_goal", op=op, task=op, arg1=arg1, arg2=arg2))


def general_prod(Model):

    Model.productionstring(
        name="continue_with_next_op",
        string="""
            =g>
            isa     math_goal
            op      done
            nextop  ~None
            nextop  =nextop
            ==>
            =g>
            isa     math_goal
            op      =nextop
            nextop  None
        """,
    )


def wait_input():
    op = input("op\n")
    arg1 = input("arg1\n")
    arg2 = input("arg2\n")
    return op, int(arg1), int(arg2)


def add_proc(goal, proc):
    input()
    goal.add(actr.makechunk("", "math_goal", proc=proc, ones_carry="hello"))


def start():
    while True:
        # op, arg1, arg2 = wait_input()
        Model, DM, goal, imaginal, env = init()
        # add_goal(goal, op, arg1, arg2)
        add_proc(goal, "proc6")
        envs = model_env.get_env()

        general_prod(Model)
        prod_procedure.procedures(Model)
        number_prods = prod_numbers.number(Model)
        add_prods = prod_addition.addition(Model)
        greater_prods = prod_comp.greater_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)

        # for prod in multi_prods:
        #     print(prod)
        #     print("\n")

        print("goal: ", goal)
        # print("imaginal: ", imaginal)
        sim = Model.simulation(
            gui=False,
            environment_process=env.environment_process,
            stimuli=envs,
            triggers="space",
        )
        # while True:
        #     sim.step()
        #     if sim.current_event.action == "KEY PRESSED: SPACE":
        #         break
        sim.run(max_time=25)
        print("Simulation time: ", sim.show_time())
        print("goal: ", goal)
        # print(list(env))
        # print("imaginal: ", imaginal)
        # imaginal.show("hundreds_ans")
        # imaginal.show("tens_ans")
        # imaginal.show("ones_ans")
        # result_ones = str(getattr(imaginal._data.copy().pop(), "ones_ans"))
        # result_tens = str(getattr(imaginal._data.copy().pop(), "tens_ans"))
        # result_huns = str(getattr(imaginal._data.copy().pop(), "hundreds_ans"))

        # result_num = result_huns + result_tens + result_ones
        # print(result_num)
        # print(list(DM))
        # numbers = [
        #     x for x in list(DM) if x.typename != "number" and x.typename != "math_op"
        # ]
        # numbers = [
        #     x for x in list(DM) if x.typename != "number" and x.typename == "math_op"
        # ]
        # print(numbers)
        math_goals = [sim for sim in list(DM) if sim.typename == "procedure"]
        print(math_goals)


if __name__ == "__main__":
    start()