Esempio n. 1
0
def start_survey(username):

    # get the resulting jobs
    user_status = utils_users.get_user_status(username)

    win_idx_pair = user_status['dataset pairwise'].comparisons[-1, 0]
    win_pair = user_status['dataset pairwise'].datapoints[win_idx_pair]
    win_pair = utils_jobs.job_array_to_job_dict(win_pair)
    win_pair['ID'] = 'pairwise'

    win_idx_clust = user_status['logs clustering'][-1][0][0]
    win_clust = user_status['dataset clustering'].datapoints[win_idx_clust]
    win_clust = utils_jobs.job_array_to_job_dict(win_clust)
    win_clust['ID'] = 'clustering'

    win_idx_rank = user_status['logs ranking'][-1][0]
    win_rank = user_status['dataset ranking'].datapoints[win_idx_rank]
    win_rank = utils_jobs.job_array_to_job_dict(win_rank)
    win_rank['ID'] = 'ranking'

    # shuffle the results
    winners = [win_pair, win_clust, win_rank]
    winners = np.random.permutation(winners)

    return render_template('survey.html', username=username, winners=winners)
def continue_pairwise(username, side_clicked):

    # get the dataset for this user
    dataset_user = utils_users.get_gp_dataset(
        username, 'pairwise', num_objectives=specs_jobs.NUM_OBJECTIVES)

    # initialise the acquirer which picks new datapoints
    acquirer = DiscreteAcquirer(input_domain=utils_jobs.get_jobs(),
                                query_type='pairwise',
                                seed=specs_jobs.SEED)

    # intialise the GP
    gp = GPPairwise(num_objectives=specs_jobs.NUM_OBJECTIVES,
                    seed=specs_jobs.SEED)

    # add collected datapoints to acquirer
    acquirer.history = dataset_user.datapoints
    # add collected datapoints to GP
    gp.update(dataset_user)

    # get the best job so far
    job_best_idx = dataset_user.comparisons[-1, 0]
    job_best = dataset_user.datapoints[job_best_idx]

    # let acquirer pick new point
    job_new = acquirer.get_next_point(gp, dataset_user)

    # sort according to what user did last round
    if side_clicked == "1":
        job1 = job_best
        job2 = job_new
    else:
        job1 = job_new
        job2 = job_best

    # transform the two jobs into dictionaries
    job1 = utils_jobs.job_array_to_job_dict(job1)
    job2 = utils_jobs.job_array_to_job_dict(job2)

    # get the start time for this user
    start_time = utils_users.get_experiment_start_time(username, 'pairwise')

    if time.time() - start_time < specs_jobs.TIME_EXPERIMENT_SEC:
        return render_template("query_pairwise_jobs.html",
                               username=username,
                               job1=job1,
                               job2=job2,
                               side_clicked=side_clicked)
    else:
        utils_users.update_experiment_status(username=username,
                                             query_type='pairwise')
        return redirect('start_experiment/{}'.format(username))
Esempio n. 3
0
def start(username):

    # register start time for this user
    utils_users.get_experiment_start_time(username, 'pairwise')

    # get the starting points from the acquirer
    job1, job2 = utils_jobs.get_next_start_jobs(username)

    # transform the two jobs into dictionaries
    job1 = utils_jobs.job_array_to_job_dict(job1)
    job2 = utils_jobs.job_array_to_job_dict(job2)

    return render_template("query_pairwise_jobs.html", username=username, job1=job1, job2=job2, side_clicked=-1)
Esempio n. 4
0
def start(username):

    # get the start time for this user
    utils_users.get_experiment_start_time(username, 'ranking')

    # get the dataset for this user
    user_dataset = utils_users.get_gp_dataset(
        username, 'ranking', num_objectives=specs_jobs.NUM_OBJECTIVES)

    # if no data has been collected yet, we only display two starting jobs
    if user_dataset.comparisons.shape[0] == 0:

        # delete any datapoint in the user's dataset (in case experiment was aborted)
        user_dataset.datapoints = np.empty((0, specs_jobs.NUM_OBJECTIVES))

        # get the starting points from the acquirer
        job1, job2 = utils_jobs.get_next_start_jobs(username)

        # add jobs to dataset of user
        job1_idx = user_dataset._add_single_datapoint(job1)
        job2_idx = user_dataset._add_single_datapoint(job2)

        # save dataset
        utils_users.update_gp_dataset(username, user_dataset, 'ranking')

        # convert into displayable format
        job1 = utils_jobs.job_array_to_job_dict(job1)
        job2 = utils_jobs.job_array_to_job_dict(job2)

        # add ID to the above dictionaries (equals the index in the dataset
        job1['ID'] = job1_idx
        job2['ID'] = job2_idx

        # put jobs we want to display in the respective lists
        jobs_unranked = [job1, job2]
        jobs_ranked = []

    # otherwise, we show the previous ranking and pick a new point according to that
    else:

        # intialise the GP
        gp = GPPairwise(num_objectives=specs_jobs.NUM_OBJECTIVES,
                        seed=specs_jobs.SEED)

        # initialise acquirer
        acquirer = DiscreteAcquirer(input_domain=utils_jobs.get_jobs(),
                                    query_type='clustering',
                                    seed=specs_jobs.SEED)

        # add collected datapoints to acquirer
        acquirer.history = user_dataset.datapoints
        # add collected datapoints to GP
        gp.update(user_dataset)

        # let acquirer pick new point
        job_new = acquirer.get_next_point(gp, user_dataset)

        # add that point to the dataset and save
        job_new_idx = user_dataset._add_single_datapoint(job_new)
        utils_users.update_gp_dataset(username, user_dataset, 'ranking')

        # convert job to dictionary
        job_new = utils_jobs.job_array_to_job_dict(job_new)

        # add the ID
        job_new['ID'] = job_new_idx

        # put into list of jobs that need to be ranked
        jobs_unranked = [job_new]

        # get ranking so far
        ranking = utils_users.get_ranking(username)
        # get the job information from that ranking and convert to dictionaries
        jobs_ranked = user_dataset.datapoints[ranking]
        jobs_ranked = [
            utils_jobs.job_array_to_job_dict(job) for job in jobs_ranked
        ]
        # add the IDs
        for i in range(len(ranking)):
            jobs_ranked[i]['ID'] = ranking[i]

    return render_template("query_ranking_jobs.html",
                           username=username,
                           jobs_unranked=jobs_unranked,
                           jobs_ranked=jobs_ranked)