Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > идеальный random


Автор: szz 3.12.2005, 02:29
У меня такая загвоздка.
Сделал я такой тренажер интуиции (можно его тут попробовать http://xkiosk.net/pea/game.php )
Зайдите туда, посмотрите чтоб дальше понять о чем я говорю.
Так вот, загвоздка в том, чтобы сделать идеальный генератор случайных чисел, точнее такой генератор, который бы выводил всего два рандомальных числа : 0 и 1.

Чтоб идиализировать этот генератор, я делаю в той программе следующее: перед началом тренировки заставляю пользователя двигать мышью по экрану, а сам собираю координаты его движения в массив. Каждая точка, по которой бегал хаотично человек по экрану, собирается в массив длиной в тыщу элементов.

А потом для сброса черных и белых горошин использую следующую функцию (простите за привидение кода, напишу я ее на нескольких языках, чтоб как мжно большему количеству людей понятно было):
generated_impulse - в нашем случае - массив из тех самых 1000 элементов:
Код

function random2(){
    return (rand(998) + generated_impulse[rand(1000)] ) % 2;    
}
function rand(n){   return int(Math.random()*(n-1));}

Код

srand(time(0));
function random2(){
   global $generated_impulse;
    return (rand()%998 + $generated_impulse[rand()%1000] ) % 2;    
}

Код

sub random2{
    return (rand(998) + $generated_impulse[rand(1000)] ) % 2;    
}

Код

srand(time(0));
int random2(){
    return (rand()%998 + generated_impulse[rand()%1000] ) % 2;    
}


То есть как можно сильнее запутываю: генерирую случайное число, прибавляю к нему случайный элемент из пользоватеьского импульса и возвращаю остаток на два.
Только вот почему в большинстве случаев выпадает черная горошина (0) ?
Единственное, чего я пытаюсь добиться - это убиение закономерности стандартной псевдорандомальности, а у меня почему-то к нулю больше тянет...

Автор: cardinal 3.12.2005, 03:01
Посмотри тут:
http://vingrad.ru/VB-VB-002236
и тут
http://forum.vingrad.ru/index.php?showtopic=40164&view=findpost&p=308153
если дисскусию почитать хочешь...

Автор: esperant0 3.12.2005, 12:38
определи вначале понятие идеальный рандом формално, и быть может тебе смогут помочь

как правило правильный вопрос это половина ответа

Автор: nworm 3.12.2005, 16:58
szz, Вы где-то ошибаетесь. По датчикам случайных чисел много всего написано. Например, можно посмотреть начало 2-го тома книге Д. Кнута "Искусство программирования".

Автор: maxim1000 3.12.2005, 17:17
усложнение генератора случайных чисел далеко не всегда ведет к улучшению его характеристик, зато почти всегда ведет к тому, что исследовать его и целенаправлено модифицировать становится все труднее...
есть движения мышки, в их числах может быть некоторая закономерность (мало ли, с какой точностью драйвер меряет положение мышки?)
есть стандартный генератор случайных чисел, который тоже имеет свои закономерности (какие именно, зависит от реализации)
эти две системы объединяются в одну, где их закономерности переплетаются самым причудливым образом, и в конце вылазит большой перекос в сторону черных горошин

поому я бы посоветовал просто взять один из изученных генераторов (на форуме обсуждалось) или придумать свой и исследовать его характеристики (ну это, если нравится сам процесс smile), но не идти по пути "запутать, как можно больше"...

Автор: Helicopterr 16.2.2006, 03:33
szz
Вот уж не знаю кто первый придумал заставлять пользователя двигать по экрану мышей и тыкать по клавиатуре для генерации случайных значений, но сейчас это делает, например, клиентская прога Web Money. Как ещё не заставили пользователя болтать ногами, ерзать на стуле, бится головой в разные участки монитора, этим, ведь похоже, можно повысить рандомальность... smile

Ты писал о "разработке" идеального рандома?
Вообще я иногда думаю, что наш бог/природа и тот на генерирование по-настоящему случайных чисел не способен. Так что ты без всяких угрызений совести можешь заняться заботами более мирскими и насущными smile

Автор: szz 16.2.2006, 12:47
Цитата

Так что ты без всяких угрызений совести можешь заняться заботами более мирскими и насущными


Судя по тому, что ты написал ответ через 2 месяца после того, как к этой тебе все потеряли интерес, я уже как раз все это время и занимаюсь более мирскими и насущными заботами.

В любом случае, большое спасибо за мораль.

Автор: DENNN 16.2.2006, 13:02
Цитата(Helicopterr @ 16.2.2006, 03:33 Найти цитируемый пост)
кто первый придумал заставлять пользователя двигать по экрану мышей и тыкать по клавиатуре для генерации случайных значений, но сейчас это делает, например, клиентская прога Web Money.

В последних версиях FReeBSD при первом запуске SSH генерится ключ. В этот момент пользователя просят "постучать" по клавиатуре и нажать Enter, навроде как добавить случайности при генерации. smile

Автор: teplotaya 14.3.2006, 18:41
szz

чувак спасибо крутая маза а дай мне исходники пажалусто ?

Автор: teplotaya 16.3.2006, 08:09
Код


procedure TForm1.click(x,y,pause:integer);
var rect : TRect;
p1, p2 : TPoint;
PT:TPoint;
begin
Application.ProcessMessages;
Pt.x:=x;
Pt.y:=y;
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,Pt.x,Pt.y,0,0);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
i2:integer;
a: array of array of Integer;
xx1,yy1:integer;
begin
SetLength(a, 5,2);
a[0,1]:=361;
a[0,2]:=561;
a[1,1]:=413;
a[1,2]:=558;
a[2,1]:=465;
a[2,2]:=560;
a[3,1]:=410;
a[3,2]:=512;
for i:=0 to 10000 do begin
randomize;
sleep(1000);
click(630,287,0);
sleep(4000);
for i2:=0 to 230 do begin
sleep(250);
count:=random(4);
xx1:=a[count,1];
yy1:=a[count,2];
click(xx1,yy1,0);
end;
sleep(10000);
click(649,457,0);
sleep(2000);
end;
end;





машина на машину ;)

Автор: szz 16.3.2006, 08:15
Ой, не напоминай - я исходники случайно все стер при переустановке винды нескоко месяцев назад...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)