cadCAD/tutorials/videos/robot-marbles-part-2/configBlank.py

71 lines
1.3 KiB
Python

# import libraries
from decimal import Decimal
import numpy as np
from datetime import timedelta
from cadCAD.configuration import append_configs
from cadCAD.configuration.utils import bound_norm_random, ep_time_step, config_sim
seeds = {
}
sim_config = config_sim({
'T': range(10),
'N': 1
})
# Behaviors
def robot_arm(_g, step, sL, s):
add_to_A = 0
if (s['box_A'] > s['box_B']):
add_to_A = -1
elif (s['box_A'] < s['box_B']):
add_to_A = 1
return({'add_to_A': add_to_A, 'add_to_B': -add_to_A})
# Mechanisms
def increment_A(_g, step, sL, s, _input):
y = 'box_A'
x = s['box_A'] + _input['add_to_A']
return (y, x)
def increment_B(_g, step, sL, s, _input):
y = 'box_B'
x = s['box_B'] + _input['add_to_B']
return (y, x)
# Initial States
genesis_states = {
'box_A': 10,
'box_B': 0
}
exogenous_states = {
}
env_processes = {
}
mechanisms = [
{
'policies': {
'robot_arm': robot_arm
},
'states': {
'box_A': increment_A,
'box_B': increment_B
}
}
]
append_configs(
sim_configs=sim_config,
initial_state=genesis_states,
seeds=seeds,
raw_exogenous_states=exogenous_states,
env_processes=env_processes,
partial_state_update_blocks=mechanisms
)