Note that the variable lineAssignments in the quoted code below is always empty
when it is displayed in the field and is empty each time the function randomLog
is entered. You can make lineAssignment global to both handlers and it will
work.
For a uniformly randomly shuffling function all outcomes should be equal. In
other words all the possible outcomes:
a,b,c
a,c,b
b,a,c
c,b,a
b,c,a
c,a,b
should all have equal chances of occurring.
We can test our functions my letting them pick ten thousands item lists and
then see if the occurrence of each list is equal. This is easy to test. Change
the number of trail to 10000 and add these lines to the mouseUp handler
put myVar into line cnt of fld 1
--new stuff start
if myVar is "a,b,c" then add 1 to item 1 of my_sum
if myVar is "a,c,b" then add 1 to item 2 of my_sum
if myVar is "b,a,c" then add 1 to item 3 of my_sum
if myVar is "c,a,b" then add 1 to item 4 of my_sum
if myVar is "b,c,a" then add 1 to item 5 of my_sum
if myVar is "c,b,a" then add 1 to item 6 of my_sum
--new stuff end
and these lines
end repeat
--new stuff start
put return & my_sum into line cnt + 1 of fld 1
put return&sum(my_sum) after fld 1
end mouseUp
--new stuff end
This shows a really skewed non-uniform outcome for the sort by.
3783,1438,1467,1474,1459,379
10000
Whereas my shuffling is pretty uniform.
1671,1673,1728,1657,1612,1659
10000
What you want to be able to make is a random assortment of
1,2,3
1,3,2
2,1,3
3,1,2
3,2,1
2,3,1
to sort your items against. But you aren't. You are generating potentially 27
different sets:
1,1,1 ; 1,1,2 ; 1,1,3 ; 1,2,2 ; 1,2,3 ; 1,3,3 ; 1,3,2 ; 1,3,1 ; 1,2,1
{a,b,c ; a,b,c ; a,b,c ; a,b,c ; a,b,c ; a,b,c ; a,c,b ; a,c,b ; a,c,b}
2,2,2 ; 2,2,1 ; 2,2,3 ; 2,1,1 ; 2,1,3 ; 2,3,3 ; 2,3,1 ; 2,3,2 ; 2,1,2
{a,b,c ; c,a,b ; a,b,c ; b,c,a ; b,a,c ; a,b,c ; c,a,b ; a,c,b ; b,a,c}
3,3,3 ; 3,3,1 ; 3,3,1 ; 3,2,2 ; 3,2,1 ; 3,1,1 ; 3,1,2 ; 3,1,3; 3,2,3
{a,b,c ; c,a,b ; c,a,b ; b,c,a ; c,b,a ; b,c,a ; b,c,a ; b,a,c ; b,c,a}
which counts out as
a,b,c 10 [3700]
a,c,b 4 [1480]
b,a,c 3 [1100]
c,b,a 1 [370]
b,c,a 5 [1850]
c,a,b 4 [1480]
which looks similar to your results but is really different no less not a
uniformly random distribution.
I really don't understand why when the random function is in line with the sort
command the same distribution is always returned but when the random function
is called in a function in line with the sort command it is different.
Michael
On May 23, 2013, at 2:08 PM, Dar Scott <[email protected]> wrote:
> This script demonstrates what is going on with random sorts of short lists
> using this:
>
> sort items of myVar by random( the number of items of myVar)
>
> This is a button script on a stack with a wide field with a scrollbar.
<clipped due to 15K limit>
_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode