Elo gamma: Split local, global moves
[pachi/ann.git] / probdist.c
blob261bbfd3ee2760068f89e057ac31ae4eb6db8c56
1 #include <assert.h>
2 #include <math.h>
3 #include <stdio.h>
4 #include <stdlib.h>
6 #include "move.h"
7 #include "probdist.h"
8 #include "random.h"
9 #include "board.h"
11 int
12 probdist_pick(struct probdist *pd, int *ignore)
14 double total = probdist_total(pd) - PROBDIST_EPSILON;
15 assert(total >= 0);
16 double stab = fast_frandom() * total;
17 //fprintf(stderr, "stab %f / %f\n", stab, total);
18 for (int i = 0; i < pd->n; i++) {
19 //struct board b = { .size = 11 };
20 //fprintf(stderr, "[%s] %f (%f)\n", coord2sstr(i, &b), pd->items[i], stab);
21 if (*ignore && i == *ignore) {
22 ignore++;
23 continue;
25 if (stab <= pd->items[i])
26 return i;
27 stab -= pd->items[i];
29 fprintf(stderr, "overstab %f (total %f)\n", stab, total);
30 assert(0);
31 return -1;