def sensitivity_analysis(force=False):

    data_file = os.path.join(DATA_FOLDER, 'sensitivity_analysis.p')

    if os.path.exists(data_file) and not force:
        data = backup.load(data_file)
        return data

    n_good_cond = 3, 4

    data = {g: {} for g in n_good_cond}

    for n_good in n_good_cond:

        d = simulation.run.get_data(n_good=n_good)

        alpha = [i[0] for i in d.cognitive_parameters]
        beta = [i[1] for i in d.cognitive_parameters]
        gamma = [i[2] for i in d.cognitive_parameters]

        observation = analysis.metric.metric.get_economy_measure(
            in_hand=d.in_hand,
            desired=d.desired,
            prod=d.prod,
            cons=d.cons,
            m=0)
        data[n_good][r'$\alpha$'] = alpha
        data[n_good][r'$\beta$'] = beta
        data[n_good][r'$\gamma$'] = gamma
        data[n_good]['ind0'] = observation

    backup.save(data, data_file)

    return data
Example #2
0
def get_data(force=False):

    if force or not os.path.exists(DATA_FILE):

        data = _load__data_from_db()
        backup.save(obj=data, file_name=DATA_FILE)

    else:

        data = backup.load(DATA_FILE)

    return data
Example #3
0
    def load_if_not_existing(file_name, method, **kwargs):

        folder = os.path.join("data", "pickle")
        os.makedirs(folder, exist_ok=True)
        file_path = os.path.join(folder, file_name)

        if os.path.exists(file_path):
            data = load(file_path)

        else:
            data = method(**kwargs)
            save(obj=data, file_name=file_path)

        return data
Example #4
0
def get(xp_data_list=None, room_n_good=None, room_uniform=None, extension=''):

    if xp_data_list is None:
        xp_data_list, room_n_good, room_uniform = xp.get_data()

    file_path = f'{DATA_FOLDER}/fit{extension}.p'

    if not os.path.exists(file_path):
        alpha, beta, gamma, mean_p, lls, bic, eco = \
            produce_fit(xp_data_list, room_n_good, room_uniform)
        backup.save(obj=(alpha, beta, gamma, mean_p, lls, bic, eco),
                    file_name=file_path)

    else:
        alpha, beta, gamma, mean_p, lls, bic, eco = \
            backup.load(file_name=file_path)

    return alpha, beta, gamma, mean_p, lls, bic, eco
Example #5
0
def phase_diagram(m=0):

    data_file = f'{DATA_FOLDER}/formatted_phase_diagram.p'

    if os.path.exists(data_file):
        data, labels = backup.load(data_file)
        return data, labels

    data = {}

    for n_good in (4, 3):

        d = simulation.run.get_data(n_good=n_good)
        dist = d.distribution

        n = len(dist)  # Number of economies in this batch

        observation = metric.get_economy_measure(in_hand=d.in_hand,
                                                 desired=d.desired,
                                                 prod=d.prod,
                                                 cons=d.cons,
                                                 m=m)

        unq_repartition = np.unique(dist, axis=0)
        labels = np.unique([i[-1] for i in unq_repartition])

        n_side = len(labels)

        scores = np.array([
            np.mean([observation[i] for i in range(n) if np.all(dist[i] == r)])
            for r in unq_repartition
        ])

        d = scores.reshape(n_side, n_side).T

        data[n_good] = d

    backup.save((data, labels), data_file)

    return data, labels
Example #6
0
def phase_diagram(f_name='phase.pdf'):
    """
    plot phase diagrams
    with 3 and 4 goods
    """

    # Number of column
    # (Plot for each good considered as money if max_col == None)
    max_col = 1

    data_file = f'{DATA_FOLDER}/formatted_phase_diagram.p'

    if os.path.exists(data_file):
        data, labels = backup.load(data_file)

    else:

        data = []

        for n_good in 3, 4:
            d = simulation.run.get_data(phase=True, n_good=n_good)

            formatted_data, labels = metric.phase_diagram(
                in_hand=d.in_hand,
                desired=d.desired,
                prod=d.prod,
                cons=d.cons,
                distribution=d.distribution,
                n_good=len(d.distribution[0]))
            data.append(formatted_data)

        backup.save((data, labels), data_file)

    graph.phase_diagram.plot(data=data,
                             labels=labels,
                             f_name=f_name,
                             max_col=max_col)
Example #7
0
def run(file_name='data/exp.p'):

    if os.path.exists(file_name):
        return backup.load(file_name)

    rooms = Room.objects.all().order_by('id')

    data = {}

    for r in rooms:

        n_good = r.n_type
        print(r.id)

        monetary_behavior = np.zeros((n_good, r.n_user, r.t_max))
        medium = np.ones((n_good, r.n_user, r.t_max)) * -1

        ordered_goods = [
            n_good - 1,
        ] + list(range(n_good - 1))

        group_users = [
            User.objects.filter(room_id=r.id,
                                production_good=Converter.reverse_value(
                                    g, n_good)).order_by('id')
            for g in ordered_goods
        ]

        for m in range(n_good):

            for t in range(r.t_max):

                i = 0
                for users in group_users:

                    for u in users:

                        choices = Choice.objects.filter(room_id=r.id,
                                                        t=t,
                                                        user_id=u.id)

                        for c in choices:

                            desired = Converter.convert_value(c.desired_good,
                                                              n_good=n_good)
                            in_hand = Converter.convert_value(c.good_in_hand,
                                                              n_good=n_good)

                            prod = Converter.convert_value(u.production_good,
                                                           n_good=n_good)

                            cons = Converter.convert_value(u.consumption_good,
                                                           n_good=n_good)

                            if m in (prod, cons):
                                monetary_conform = (in_hand, desired) == (prod,
                                                                          cons)
                                medium[m, i, t] = -1

                            else:
                                monetary_conform = (in_hand,
                                                    desired) in [(prod, m),
                                                                 (m, cons)]
                                medium[m, i, t] = monetary_conform

                            monetary_behavior[m, i, t] = monetary_conform

                        i += 1

        distribution = economy.distributions.get(r.id)

        label = economy.labels.get(r.id)
        data[label] = {
            'monetary_bhv': monetary_behavior,
            'medium': medium,
            'distribution': distribution
        }

    backup.save(data, file_name=file_name)

    return data
Example #8
0
    def save(self, data_folder):

        os.makedirs(data_folder, exist_ok=True)

        for k, v in self._files_mapping(data_folder).items():
            backup.save(obj=getattr(self, v), file_name=k)