Esempio n. 1
0
size_t
karmed_choose_best(struct karmed *p)
{
	size_t head, i, j, best;
	double mean, max;

	if (p->k == 1)
		return 0;

	/*
	 * Bootstrap: choose the first lever that has not yet
	 * been tested.
	 */
	for (i = 0; i < p->k; i++) {
		if (p->arms[i].effort == 0)
			return i;
	}

	/*
	 * Exploration: choose a random lever.
	 */
	best = randinterval(0, p->k - 1);

	/*
	 * Exploitation: choose the lever with the greatest
	 * expectation of reward.
	 */
 	if (rand01() >= BANDIT_E_GREEDY) {
		head = best;
		max = 0;
		for (j = 0; j < p->k; j++) {
			i = (head + j) % p->k;
			mean = p->arms[i].reward / p->arms[i].effort;
			if (max < mean) {
				best = i;
				max = mean;
			}
		}
	}
	return best;
}
Esempio n. 2
0
int main()
{
    srand(1234);

    val_t* xs = malloc(n * sizeof(val_t));
    if (xs == NULL) {
        fprintf(stderr, "Cannot allocate %zu bytes", n * sizeof(val_t));
        return 1;
    }

    size_t i;
    for (i = 0; i < n; ++i) {
        xs[i] = randval();
    }

    vector_t* vec = vector_create(xs, n);
    if (vec == NULL) {
        fprintf(stderr, "Failed to create vector.");
        return 1;
    }

    idx_t u, v;
    for (i = 0; i < m; ++i) {
        randinterval(n, &u, &v);
        val_t true_sum   = dense_sum(xs, u, v);
        val_t sparse_sum = vector_sum(vec, u, v);

        if (true_sum != sparse_sum) {
            fprintf(stderr, "Incorrect sum.\n");
            return 1;
        }
    }

    vector_free(vec);
    free(xs);

    return 0;
}