Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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