diff --git a/bn_functions.py b/bn_functions.py index 5137463051def035e41458d3f5f7245c90dfa00c..4bcf5f307e1007392561bc70d615e55a5b7b96dc 100644 --- a/bn_functions.py +++ b/bn_functions.py @@ -1,6 +1,8 @@ import bnlearn import numpy as np import random +import os +import utils '''Father class in which the basic functionalities to call the bnlearn library are developed This class can be used to implement individual Persona simulator or just generative models starting from @@ -23,6 +25,7 @@ def get_cpdf(dag_cpds, variable): return index, (cpds_table[index].values) break index += 1 + return None, None def compute_prob(cpds_table): ''' @@ -127,7 +130,7 @@ def get_stochastic_action(actions_distr_prob): Return the index of the most closest value in values to target Args: target: the target value - values: a list of values from 0 to 1 + values: a list of values from 0 to 1a Return: return the index of the value closer to target ''' @@ -213,3 +216,53 @@ def interpret_action_output(action_id, col, row, targets): print("robot_feed ", robot_assistance, 'robot_ass ', robot_feedback) return robot_assistance, robot_feedback +def update_episodes_batch(bn_model_user_action, bn_model_user_react_time, + bn_model_agent_assistance, bn_model_agent_feedback, + folder_filename, with_caregiver=True, with_feedback=True): + bn_belief_user_action_file = "bn_belief_user_action.pkl" + bn_belief_user_react_time_file = "bn_belief_user_react_time.pkl" + bn_belief_agent_assistance_file = ""; bn_belief_agent_feedback_file = ""; + if with_caregiver and with_feedback: + bn_belief_agent_assistance_file = "bn_belief_caregiver_assistive_action.pkl" + bn_belief_agent_feedback_file = "bn_belief_caregiver_feedback_action.pkl" + elif with_caregiver and not with_feedback: + bn_belief_agent_assistance_file = "bn_belief_caregiver_assistive_action.pkl" + bn_belief_agent_feedback_file = "" + elif not with_caregiver and with_feedback: + bn_belief_agent_assistance_file = "bn_belief_robot_assistive_action.pkl" + bn_belief_agent_feedback_file = "" + else: + bn_belief_agent_assistance_file = "bn_belief_robot_assistive_action.pkl" + bn_belief_agent_feedback_file = "bn_belief_robot_feedback_action.pkl" + + #check if the folder is empty + dir = os.listdir(path=folder_filename) + if dir==[]: + assert "Folder is empty" + return + else: + dir_list = next(os.walk(folder_filename))[1] + for sub_folder in dir_list: + #read the files in it (we already know their name) + bn_belief_user_action = utils.read_user_statistics_from_pickle(folder_filename+"/"+sub_folder+"/"+bn_belief_user_action_file) + bn_belief_user_react_time = utils.read_user_statistics_from_pickle(folder_filename+"/"+sub_folder+"/"+bn_belief_user_react_time_file) + bn_belief_agent_assistance = utils.read_user_statistics_from_pickle(folder_filename+"/"+sub_folder+"/"+bn_belief_agent_assistance_file) + bn_belief_agent_feedback = utils.read_user_statistics_from_pickle(folder_filename+"/"+sub_folder+"/"+bn_belief_agent_feedback_file) + bn_model_user_action = update_cpds_tables(bn_model=bn_model_user_action, + variables_tables=bn_belief_user_action) + bn_model_user_react_time = update_cpds_tables(bn_model=bn_model_user_react_time, + variables_tables=bn_belief_user_react_time) + bn_model_agent_assistance = update_cpds_tables(bn_model=bn_model_agent_assistance, + variables_tables=bn_belief_agent_assistance) + bn_model_agent_feedback = update_cpds_tables(bn_model=bn_model_agent_feedback, + variables_tables=bn_belief_agent_feedback) + #return the 4 models + return bn_model_user_action, bn_model_user_react_time, bn_model_agent_assistance, bn_model_agent_feedback + +# bn_model_caregiver_assistance = bnlearn.import_DAG('bn_agent_model/agent_assistive_model.bif') +# bn_model_caregiver_feedback = bnlearn.import_DAG('bn_agent_model/agent_feedback_model.bif') +# bn_model_user_action = bnlearn.import_DAG('bn_persona_model/user_action_model.bif') +# bn_model_user_react_time = bnlearn.import_DAG('bn_persona_model/user_react_time_model.bif') +# update_episodes_batch(bn_model_user_action, bn_model_user_react_time, bn_model_caregiver_assistance, +# bn_model_caregiver_feedback, folder_filename="/home/pal/carf_ws/src/carf/caregiver_in_the_loop/log/0/") +