def gen_conf_to_optimize(save_path="experimentation/optimize/multiconf/", main_act="KT6kc", ref_stud="0", hierarUtile=0): if ref_stud in ["2"]: hierarUtile = 1 filter1_vals, stepUp_vals, upZPD_vals, deact_vals, prom_coef_vals, thresHDeact_vals = all_values_zpdes( hierarUtile) print filter1_vals print stepUp_vals print upZPD_vals print deact_vals print prom_coef_vals print thresHDeact_vals multi_confs = { "ZpdesSsbg": { "ZpdesSsb": { "filter1": filter1_vals, "stepUpdate": stepUp_vals, "upZPDval": upZPD_vals, "deactZPDval": deact_vals, "promote_coeff": prom_coef_vals, "thresHDeact": thresHDeact_vals } } } base_conf = func.load_json("ZPDES_base", "params_files/ZPDES") base_conf["graph"]["file_name"] = "graph_{}_{}".format(main_act, ref_stud) base_conf["graph"]["main_act"] = main_act base_conf["graph"].update( func.load_json(base_conf["graph"]["file_name"], base_conf["graph"]["path"])) print base_conf zpdes_confs = mp.multi_conf(base_conf=base_conf, multi_params=multi_confs, combine=1) #conf_ids = mp.generate_diff_config_id(zpdes_confs) #zpdes_confs = {conf_ids[x] : zpdes_confs[x] for x in range(len(zpdes_confs))} uid = str(uuid.uuid1()) jstr = json.dumps(zpdes_confs) k_lib.config.datafile.create_directories([save_path]) save_path = "{}{}_{}_all_confs.json".format(save_path, main_act, ref_stud) k_lib.functions.write_in_file(save_path, jstr) return zpdes_confs
def perturbated_population(zpdes_confs, ref_xp="perturbation", nb_step=100, base_path_to_save="experimentation/data/"): population_conf = func.load_json(params_file="perturbation_KT6kc", directory="params_files/studModel") population = k_lib.student.Population(params=population_conf) nb_stud = population.nb_students wkgs = {} for ref, conf in zpdes_confs.items(): zpdes = k_lib.seq_manager.ZpdesHssbg(params=conf) wss = [] for k in range(nb_stud): wss.append(k_lib.experimentation.WorkingSession( student=copy.deepcopy(population.students[k])), seq_manager=copy.deepcopy(zpdes)) wkgs["zpdes_{}".format(ref)] = [ k_lib.experimentation.WorkingGroup(WorkingSessions=wss) ] xp = k_lib.experimentation.Experiment(WorkingGroups=wkgs, ref_expe=ref_xp, path_to_save=base_path_to_save, seq_manager_list=wkgs.keys(), nb_step=nb_step, population={ "nb_students": nb_stud, "model": "KT_student" }) return xp
def gen_stud_confs(nb_students=1000, perturbated=0, params_file="stud_KT6kc_0"): studconf = func.load_json(params_file, "params_files/studModel") if perturbated == 1: pass else: stud_confs = [copy.deepcopy(studconf) for x in range(nb_students)] return stud_confs
def multi_kt_xp(ref_xp="KT6kc", path_to_save="experimentation/data/", nb_step=100, nb_stud=100, files_to_load=None, ref_bis="", disruption_pop_file="perturbation_KT6kc", disruption=0, refs_opti=["0", "1", "2", "3"], refs_stud=["0", "1", "2", "3"], save_xp_data=0, mixed_pop=1): if type(refs_stud) != list: refs_stud = [refs_stud] ref_bis = "{}opti{}_stud{}".format(ref_bis, "".join(refs_opti), "".join(refs_stud)) if files_to_load is None: files_to_load = {} def_files_to_load = {} def_files_to_load["pomdp"] = [] def_files_to_load["stud"] = [] for ref in refs_opti: def_files_to_load["pomdp"].append({ "file_name": "POMDP_{}_{}".format(ref_xp, ref), "path": "data/pomdp" }) for ref in refs_stud: def_files_to_load["stud"].append("stud_{}_{}".format(ref_xp, ref)) def_files_to_load["zpdes"] = "ZPDES_base" #def_files_to_load["riarit"] = "RIARIT_{}".format(ref_xp) def_files_to_load["random"] = "RANDOM_base" for key, val in def_files_to_load.items(): if key not in files_to_load.keys(): files_to_load[key] = val #pomdP = k_lib.config.datafile.load_file("KT_expe_2","data/pomdp") zpdes_conf_opti = {} zpdes_params_opti = { "0": [0.2, 0.05, 4, 0.6, 0.7, 0.8, 0.5, 0.5], "1": [0.1, 0.05, 4, 0.7, 0.6, 0.8, 0.5, 0.5], "2": [0.5, 0.05, 4, 0.8, 0.7, 1.5, 0.5, 0.5], "3": [0.4, 0.05, 4, 0.8, 0.6, 1.2, 0.5, 0.5], "4": [0.4, 0.05, 4, 0.8, 0.6, 1.2, 0.5, 0.5], } for ref in refs_opti: zpdes_conf_opti[ref] = { "algo_name": "ZpdesHssbg", "graph": { "file_name": "graph_{}_{}".format(ref_xp, ref), "path": "graph/", "main_act": "{}".format(ref_xp) }, "ZpdesSsbg": { "ZpdesSsb": { "filter1": zpdes_params_opti[ref][0], # 0.4,# 0.30, "uniformval": zpdes_params_opti[ref][1], # 0.05, "stepUpdate": zpdes_params_opti[ref][2], # 4,# 6, "upZPDval": zpdes_params_opti[ref][3], # 0.6, "deactZPDval": zpdes_params_opti[ref][4], # 0.4,# 0.5, "promote_coeff": zpdes_params_opti[ref][5], # 1.7, "thresHProm": zpdes_params_opti[ref][6], # 0.5, "thresHDeact": zpdes_params_opti[ref][7] } } } params_pop = [] for ref in refs_stud: p_pop = func.load_json("{}_{}".format(disruption_pop_file, ref), "params_files/studModel") p_pop["nb_students"] = nb_stud params_pop.append(p_pop) if disruption == 1: population = k_lib.student.Population(params=params_pop) elif mixed_pop: stud_list = [] for ii in range(len(refs_stud)): for i in range(nb_stud): stud_list.append( k_lib.student.KTstudent( params_file=files_to_load["stud"][ii], directory="params_files/studModel")) population = k_lib.student.Population(stud_list=stud_list) else: stud_list = {} for ii in range(len(refs_stud)): stud_list[refs_stud[ii]] = [] for i in range(nb_stud): stud_list[refs_stud[ii]].append( k_lib.student.KTstudent( params_file=files_to_load["stud"][ii], directory="params_files/studModel")) population = k_lib.student.Population(stud_list=stud_list) #stud = k_lib.student.KTstudent(params=population.base_model) # nb_stud = nb_stud # population.nb_students pomdPs = [] zpdesOpts = [] zpdesHs = [] zpdes_params = func.load_json(file_name=files_to_load["zpdes"], dir_path="params_files/ZPDES") # zpdesH = k_lib.seq_manager.ZpdesHssbg(zpdes_params) # params=zpdes_params) for i in range(len(refs_opti)): pomdPs.append( k_lib.seq_manager.POMDP(load_p=files_to_load["pomdp"][i])) zpdesOpts.append( k_lib.seq_manager.ZpdesHssbg( zpdes_conf_opti[refs_opti[i]])) # params=zpdes_params) zpdes_params = change_graph_params( zpdes_params, "graph_{}_{}".format(ref_xp, refs_opti[i]), ref_xp) zpdesHs.append(k_lib.seq_manager.ZpdesHssbg(zpdes_params)) #riarit = k_lib.seq_manager.RiaritHssbg(params_file=files_to_load["riarit"],directory="params_files/RIARIT") random_params = func.load_json(file_name=files_to_load["random"], dir_path="params_files/RANDOM") random_params = change_graph_params(random_params, "{}_graph".format(ref_xp), ref_xp) #random = k_lib.seq_manager.RandomSequence(random_params) ws_tab_zpdes = [[] for i in range(len(refs_opti))] ws_tab_zpdesOpt = [[] for i in range(len(refs_opti))] ws_tab_pomdp = [[] for i in range(len(refs_opti))] #ws_tab_riarit = [] #ws_tab_random = [] for i in range(len(population.students)): stud = population.students[i] for ii in range(len(refs_opti)): ws_tab_zpdes[ii].append( k_lib.experimentation.WorkingSession( student=cPickle.loads(cPickle.dumps(stud, -1)), seq_manager=cPickle.loads(cPickle.dumps(zpdesHs[ii], -1)))) ws_tab_zpdesOpt[ii].append( k_lib.experimentation.WorkingSession( student=cPickle.loads(cPickle.dumps(stud, -1)), seq_manager=cPickle.loads(cPickle.dumps(zpdesOpts[ii], -1)))) ws_tab_pomdp[ii].append( k_lib.experimentation.WorkingSession( student=cPickle.loads(cPickle.dumps(stud, -1)), seq_manager=cPickle.loads(cPickle.dumps(pomdPs[ii], -1)))) #ws_tab_riarit.append(k_lib.experimentation.WorkingSession(student=copy.deepcopy(stud), seq_manager = copy.deepcopy(riarit))) #ws_tab_random.append(k_lib.experimentation.WorkingSession(student=copy.deepcopy(stud), seq_manager=copy.deepcopy(random))) wG_zpdes = [ k_lib.experimentation.WorkingGroup(WorkingSessions=x) for x in ws_tab_zpdes ] wG_zpdes2 = [ k_lib.experimentation.WorkingGroup(WorkingSessions=x) for x in ws_tab_zpdesOpt ] wG_pomdp = [ k_lib.experimentation.WorkingGroup(WorkingSessions=x) for x in ws_tab_pomdp ] #wG_riarit = k_lib.experimentation.WorkingGroup(WorkingSessions = ws_tab_riarit) #wG_random = k_lib.experimentation.WorkingGroup(WorkingSessions=ws_tab_random) wkgs = { "POMDP": wG_pomdp, "ZpdesH": wG_zpdes, "Zpdes*": wG_zpdes2 #"Random": [wG_random] } # , "RIARIT": [wG_riarit]} # {"ZPDES": [wG_zpdes]} # ref_xp_bis = "{}{}".format(ref_xp, ref_bis) params = { "ref_expe": ref_xp_bis, "path_to_save": path_to_save, "seq_manager_list": wkgs.keys(), # "RIARIT" "nb_step": nb_step, "population": { "nb_students": nb_stud * len(refs_stud), "model": "KT_student", "ref_stud": "stud_{}_{}".format(ref_xp, "".join(refs_stud)) } } xp = k_lib.experimentation.Experiment(WorkingGroups=wkgs, params=params) xp.run(nb_step) ref_sub_group = [copy.deepcopy(refs_opti)] #draw_xp_kc_curve(xp, ref_sub_group=ref_sub_group, subgroup_treat=True) #draw_xp_kc_curve(xp) # values_vect = ["V{}".format(i + 1) for i in range(len(xp.KC))] # draw_xp_graph(xp, type_ex=values_vect, nb_ex_type=[1] * len(xp.KC), ref_sub_group=ref_sub_group) # draw_xp_histo(xp, type_ex=values_vect, nb_ex_type=[1] * len(xp.KC),) #pvals = calcul_pvals(xp) #draw_pvals(xp, pvals) #all_mean_data = draw_xp_graph(xp,ref_xp) #cost = calcul_xp_cost(xp) if save_xp_data: xp.save() return xp
def kt_expe(ref_xp="KT6kc", path_to_save="experimentation/data/", nb_step=100, nb_stud=100, files_to_load=None, ref_bis="", disruption_pop_file="perturbation_KT6kc", disruption=0, ref_pomdp="_2", ref_stud="_2", save_xp_data=0): if files_to_load is None: files_to_load = {} def_files_to_load = {} def_files_to_load["pomdp"] = { "file_name": "POMDP_{}{}".format(ref_xp, ref_pomdp), "path": "data/pomdp" } def_files_to_load["stud"] = "stud_{}{}".format(ref_xp, ref_stud) def_files_to_load["zpdes"] = "ZPDES_base" #def_files_to_load["riarit"] = "RIARIT_{}".format(ref_xp) def_files_to_load["random"] = "RANDOM_base" for key, val in def_files_to_load.items(): if key not in files_to_load.keys(): files_to_load[key] = val pomdP = k_lib.seq_manager.POMDP(load_p=files_to_load["pomdp"]) #pomdP = k_lib.config.datafile.load_file("KT_expe_2","data/pomdp") zpdes_conf_opti = {} zpdes_params_0opti = { "algo_name": "ZpdesHssbg", "graph": { "file_name": "{}_graph".format(ref_xp), "path": "graph/", "main_act": "{}".format(ref_xp) }, "ZpdesSsbg": { "ZpdesSsb": { "filter1": 0.2, # 0.4,# 0.30, "uniformval": 0.05, # 0.05, "stepUpdate": 4, # 6,# 6, "upZPDval": 0.6, # 0.6, "deactZPDval": 0.7, # 0.4,# 0.5, "promote_coeff": 0.8, # 1.7, "thresHProm": 0.5, # 0.5, "h_promote_coeff": 0.25, # 0.25, "size_window": 3, # 3, "spe_promo": 0 # 0 } } } zpdes_params_1opti = { "algo_name": "ZpdesHssbg", "graph": { "file_name": "{}_graph".format(ref_xp), "path": "graph/", "main_act": "{}".format(ref_xp) }, "ZpdesSsbg": { "ZpdesSsb": { "filter1": 0.5, # 0.4,# 0.30, "uniformval": 0.05, # 0.05, "stepUpdate": 4, # 6,# 6, "upZPDval": 0.7, # 0.6, "deactZPDval": 0.6, # 0.4,# 0.5, "promote_coeff": 0.6, # 1.7, "thresHProm": 0.5, # 0.5, "h_promote_coeff": 0.25, # 0.25, "size_window": 3, # 3, "spe_promo": 0 # 0 } } } zpdes_params_2opti = { "algo_name": "ZpdesHssbg", "graph": { "file_name": "{}_graph".format(ref_xp), "path": "graph/", "main_act": "{}".format(ref_xp) }, "ZpdesSsbg": { "ZpdesSsb": { "filter1": 0.1, # 0.4,# 0.30, "uniformval": 0.05, # 0.05, "stepUpdate": 4, # 6,# 6, "upZPDval": 0.6, # 0.6, "deactZPDval": 0.7, # 0.4,# 0.5, "promote_coeff": 1.6, # 1.7, "thresHProm": 0.5, # 0.5, "h_promote_coeff": 0.25, # 0.25, "size_window": 3, # 3, "spe_promo": 0 # 0 } } } zpdes_conf_opti["_0"] = zpdes_params_0opti zpdes_conf_opti["_1"] = zpdes_params_1opti zpdes_conf_opti["_2"] = zpdes_params_2opti #population_conf = func.load_json() population = k_lib.student.Population(params_file=disruption_pop_file, directory="params_files/studModel") #stud = k_lib.student.KTstudent(params=population.base_model) stud = k_lib.student.KTstudent(params_file=files_to_load["stud"], directory="params_files/studModel") nb_stud = nb_stud # population.nb_students zpdes_params = func.load_json(file_name=files_to_load["zpdes"], dir_path="params_files/ZPDES") zpdes_params = change_graph_params(zpdes_params, "{}_graph".format(ref_xp), ref_xp) zpdes = k_lib.seq_manager.ZpdesHssbg(zpdes_params) # params=zpdes_params) zpdesOpt = k_lib.seq_manager.ZpdesHssbg( zpdes_conf_opti[ref_pomdp]) # params=zpdes_params) #riarit = k_lib.seq_manager.RiaritHssbg(params_file=files_to_load["riarit"],directory="params_files/RIARIT") random_params = func.load_json(file_name=files_to_load["random"], dir_path="params_files/RANDOM") random_params = change_graph_params(random_params, "{}_graph".format(ref_xp), ref_xp) random = k_lib.seq_manager.RandomSequence(random_params) ws_tab_zpdes = [] ws_tab_zpdesOpt = [] #ws_tab_riarit = [] ws_tab_random = [] ws_tab_pomdp = [] for i in range(nb_stud): if disruption == 1: stud = population.students[i] ws_tab_zpdes.append( k_lib.experimentation.WorkingSession( student=copy.deepcopy(stud), seq_manager=copy.deepcopy(zpdes))) ws_tab_zpdesOpt.append( k_lib.experimentation.WorkingSession( student=copy.deepcopy(stud), seq_manager=copy.deepcopy(zpdesOpt))) ws_tab_pomdp.append( k_lib.experimentation.WorkingSession( student=copy.deepcopy(stud), seq_manager=copy.deepcopy(pomdP))) #ws_tab_riarit.append(k_lib.experimentation.WorkingSession(student=copy.deepcopy(stud), seq_manager = copy.deepcopy(riarit))) ws_tab_random.append( k_lib.experimentation.WorkingSession( student=copy.deepcopy(stud), seq_manager=copy.deepcopy(random))) wG_zpdes = k_lib.experimentation.WorkingGroup(WorkingSessions=ws_tab_zpdes) wG_zpdesOpt = k_lib.experimentation.WorkingGroup( WorkingSessions=ws_tab_zpdesOpt) wG_pomdp = k_lib.experimentation.WorkingGroup(WorkingSessions=ws_tab_pomdp) #wG_riarit = k_lib.experimentation.WorkingGroup(WorkingSessions = ws_tab_riarit) #wG_random = k_lib.experimentation.WorkingGroup(WorkingSessions=ws_tab_random) wkgs = { "POMDP": [wG_pomdp], "ZPDES": [wG_zpdes], #"Random": [wG_random], "ZPDES2": [wG_zpdesOpt] } # , "RIARIT": [wG_riarit]} # {"ZPDES": [wG_zpdes]} # ref_xp_bis = "{}{}".format(ref_xp, ref_bis) params = { "ref_expe": ref_xp_bis, "path_to_save": path_to_save, "seq_manager_list": wkgs.keys(), # "RIARIT" "nb_step": nb_step, "population": { "nb_students": nb_stud, "model": "KT_student", } } xp = k_lib.experimentation.Experiment(WorkingGroups=wkgs, params=params) xp.run(nb_step) values_vect = ["V{}".format(i + 1) for i in range(len(xp.KC))] draw_xp_graph(xp, type_ex=values_vect, nb_ex_type=[1] * len(xp.KC)) #all_mean_data = draw_xp_graph(xp,ref_xp) #cost = calcul_xp_cost(xp) if save_xp_data: xp.save() return xp