In the loop i is always zero.   I think your code is wrong.

You probably meant to loop over all the weights (or I should say on average
half the weights),  and this code is slow if there are a lot of weights.

2009/7/16 Peter Drake <dr...@lclark.edu>

> I must be missing something. Isn't the obvious trick:
> int r = random(<sum of weights>);
> int i = 0;
> while (r > weights[i]) {
> r -= weights[i];
> }
> return i;
>
> This way, you only have to generate one random number.
>
> Peter Drake
> http://www.lclark.edu/~drake/ <http://www.lclark.edu/%7Edrake/>
>
>
>
> On Jul 15, 2009, at 8:55 PM, Zach Wegner wrote:
>
> On Wed, Jul 15, 2009 at 10:37 PM, David Fotland<fotl...@smart-games.com>
> wrote:
>
> So many complex ideas :)  Why not just multiply the weight of each pattern
>
> by a random number and pick the biggest result?
>
>
> David
>
>
> That involves generating N random numbers and then doing N-1
> comparisons. The n-ary tree has only 1 random number and log N
> comparisons, but has to be
> incrementally updated (log N adds).
>
> Also, I don't think the distribution is the same. Imagine two moves a
> and b, with weights 2 and 1. The probabilities should be a=2/3 b=1/3,
> but if you select two random numbers in a finite range, there's only a
> 1/4 chance that the second number is more than twice the first, which
> is needed for b to be selected. I could be wrong here though.
>
> Zach
> _______________________________________________
> computer-go mailing list
> computer-go@computer-go.org
> http://www.computer-go.org/mailman/listinfo/computer-go/
>
>
>
> _______________________________________________
> computer-go mailing list
> computer-go@computer-go.org
> http://www.computer-go.org/mailman/listinfo/computer-go/
>
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to