Esempio n. 1
0
/*
 * calc_kmeans
 * The main body of kmean calculation.
 * inputs	: all of elements to be clustered by kmeans
 * dim		: dimension of element, namely myvector has dim floats in each.
 * N		: the number of input vectors
 * k		: the number to cluster
 * mean		: initial mean vectors (centroids)
 * r		: (out) an array to put answer cluster ids
 */
static int *
calc_kmeans(myvector inputs, int dim, int N, int k, myvector mean, int *r)
{
	float8	target, new_target;

	/*
	 * initialize purpose value. At this time, r doesn't mean anything
	 * but it's ok; just fill target by some value.
	 */
	target = J(inputs, dim, N, k, mean, r);
	for (;;)
	{

		/* it's good to check here, for avoid infinite loop */
		CHECK_FOR_INTERRUPTS();
		update_r(inputs, dim, N, k, mean, r);
		update_mean(inputs, dim, N, k, mean, r);
		new_target = J(inputs, dim, N, k, mean, r);
		kmeans_debug(mean, dim, k);
		/*
		 * if all the classification stay, diff must be 0.0,
		 * which means we can go out!
		 */
		if (target == new_target)
			break;
		target = new_target;
	}

	return  r;
}
Esempio n. 2
0
void update(struct mlogit *m)
{
	if (uintset_count(&m->ind)) {
		update_dx(m);
		update_dist(m);
		update_mean(m);
		update_cov(m);
		uintset_clear(&m->ind);
	}
}
Esempio n. 3
0
void GROUP::push(Node n , int curFE)
{
    Node tmp(length);
    LastModifiedFE = curFE;
    tmp.allele = n.allele;
    tmp.fitness = n.fitness;
    tmp.isEvaluated = true;
    nodes.push_back(tmp);

    sum += n.fitness;
    sum2+= n.fitness * n.fitness;

    AllUsedNumber ++ ;
    update_mean();
    max = getmax();
    return ;
}
void add_interarrival(interarrival_window_t* window, long interarrival) {
	window_el_t *window_el;
	window_el = calloc(1, sizeof(*window_el));
	window_el->interarrival = interarrival;

	if (!window->head) {
		window->head = window_el;
		window->tail = window_el;
	} else {
		window->tail->next = window_el;
	}
	window->size++;

	window_el_t *removed = NULL;
	if (window->size > MAX_SIZE) {
		removed = window->head;
		window->head = removed->next;
		window->size--;
	}

	update_mean(window, window_el, removed);

	free(removed);
}
Esempio n. 5
0
static void measure(int fd, struct flow *fw)
{
	long delay;

	fw->written_blocks++;
	fw->total_written += fw->block_size;

	if (fw->written_blocks < fw->blocks_per_delay)
		return;

	assert(!fdatasync(fd));
	assert(!gettimeofday(&fw->t2, NULL));
	/* Help the kernel to help us. */
	assert(!posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED));
	delay = delay_ms(&fw->t1, &fw->t2);

	switch (fw->state) {
	case FW_INC:
		if (delay > fw->delay_ms) {
			move_to_search(fw,
				fw->blocks_per_delay - fw->step / 2,
				fw->blocks_per_delay);
		} else if (delay < fw->delay_ms) {
			inc_step(fw);
		} else
			move_to_steady(fw);
		break;

	case FW_DEC:
		if (delay > fw->delay_ms) {
			dec_step(fw);
		} else if (delay < fw->delay_ms) {
			move_to_search(fw, fw->blocks_per_delay,
				fw->blocks_per_delay + fw->step / 2);
		} else
			move_to_steady(fw);
		break;

	case FW_SEARCH:
		if (fw->bpd2 - fw->bpd1 <= 3) {
			move_to_steady(fw);
			break;
		}

		if (delay > fw->delay_ms) {
			fw->bpd2 = fw->blocks_per_delay;
			fw->blocks_per_delay = (fw->bpd1 + fw->bpd2) / 2;
		} else if (delay < fw->delay_ms) {
			fw->bpd1 = fw->blocks_per_delay;
			fw->blocks_per_delay = (fw->bpd1 + fw->bpd2) / 2;
		} else
			move_to_steady(fw);
		break;

	case FW_STEADY:
		update_mean(fw);

		if (delay <= fw->delay_ms) {
			move_to_inc(fw);
		}
		else if (fw->blocks_per_delay > 1) {
			move_to_dec(fw);
		}
		break;

	default:
		assert(0);
	}

	if (fw->progress) {
		/* Instantaneous speed. */
		double inst_speed =
			(double)fw->blocks_per_delay * fw->block_size * 1000 /
			fw->delay_ms;
		const char *unit = adjust_unit(&inst_speed);
		double percent;
		/* The following shouldn't be necessary, but sometimes
		 * the initial free space isn't exactly reported
		 * by the kernel; this issue has been seen on Macs.
		 */
		if (fw->total_size < fw->total_written)
			fw->total_size = fw->total_written;
		percent = (double)fw->total_written * 100 / fw->total_size;
		erase(fw->erase);
		fw->erase = printf("%.2f%% -- %.2f %s/s",
			percent, inst_speed, unit);
		assert(fw->erase > 0);
		if (fw->measurements > 0)
			fw->erase += pr_time(
				(fw->total_size - fw->total_written) /
				get_avg_speed(fw));
		fflush(stdout);
	}

	start_measurement(fw);
}
Esempio n. 6
0
static inline void move_to_steady(struct flow *fw)
{
	update_mean(fw);
	fw->state = FW_STEADY;
}