Я решил провести математически программный анализ рулетки героев войны и денег.
Используя данные истории рулетки я проверяю насколько она случайна. Идеалом служит
равномерное дискретное распределение- то есть каждое число выпадает с одинаковой вероятностью.
Однако порой рулетка крутится не совсем случайно- часто повторяются
сходные числа, например красные, нечетные, большие 18.
Соответственно проанализируем что лучше стратегия на "дожидание
признака" по сравнению с дожидание.(то есть что ставить после черного-
красное или черное). Как показывает программа скопления сходных
элементов случаются чаще чем при простых случайных числах.
А теперь о программе:
На вход она берет историю рулетки в том формате, в котором она представлена в гвд
и вычленяет число на каждом рандоме рулетки, которое позже анализируется.
Выделение последнего числа из строки
function roul_number(var s:string):integer;
begin
if s='00' then result:=-1
else result:=StrToInt(s);
end;
интерпретация числа(функция в данном случае для исследования четности)
function checktip(num:integer):integer;
begin
if num<=0 then result:=2
else if num mod 2=1 then result:=1
else result:=0;
end;
Шаг процедуры. Если "ВАЖНАЯ СТРОКА" раскомментирована
выдает случайные результат. Закоментирована- результат интерпретации файла.
procedure step;
var s:string;
i,num,tip:integer;
begin
repeat
readln(f,s);
for i:=length(s) downto 1 do
if (s[i]<'0')or(s[i]>'9') then break;
delete(s,1,i);
num:=roul_number(s);
tip:=checktip(num);
until tip<2;//зеры пропускаем
tip:=random(2);//ВАЖНАЯ СТРОКА
//povtor
if (prevtip<>-1)and(prevtip=tip) then
povtor:=povtor+1
else
begin
if povtor>7 then
povsum:=povsum+povtor;
povtor:=0;
end;
prevtip:=tip;
count:=count+1;
end;
Чтение и интерпретация файла
assignfile(f,'2011_12_roul.txt');
reset(f);
while not eof(f) do
step;
showmessage('count='+IntToStr(count));
showmessage('povsum='+IntToStr(povsum));
closefile(f);
prevtip:=-1;
povsum:=0;
readfile;
Не забудем randomize; на FormCreate
povsum при случайном наборе часто меньше чем в истории.
Можно проанализировать повторяемость красного-черного,
первую и вторую половину. Также взять другие данные
рулетки. По поводу полной случайности сказать сложно-
часто налицо повторяемость рулетки и наверное лучше
ставить на признак противоположный текущему или ставить тогда,
когда этот признак давно не появлялся.
Программу вместе с исходниками можно скачать здесь.
|