IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> псевдослучайныЕ последовательностИ, мечта о нескольких Randomize
сообщение
Сообщение #1


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Допустим, мне нужно несколько самостоятельных параллельных линий, использующих случайные числа. Как известно, для отладки желательно не отрабатывать процедуру Randomize - тогда мы имеем повторяемость последовательности случайных чисел, выдаваемых функцией Random. "Сбить" такую последовательность можно, например, пропуском нескольких чисел. Вопрос же состоит в следующем: могу ли я (в отладочных целях или еще по какой причине) получить в одном процессе повторяемую последовательность, а в другом - нет?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Можешь попробовать. Исходники функции Random найти проще простого - они лежат в \fpc-2.2.4.source\fpc-2.2.4\rtl\inc\system.inc (у меня исходники для предыдущей версии, лень перекачивать, не так уж много там и изменилось), подкорректируй эту функцию так, чтобы она использовала не одну и ту же переменную RandSeed, а несколько (для каждой необходимой тебе "линии" - своя "затравка").

Кстати, "линия" - это ты о чем? Если о потоках - то вот это: Embarcadero QC -> #4368 может быть тебе интересно. Тут фактически готовое решение.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 12.11.2010 2:06) *
подкорректируй эту функцию так, чтобы она использовала не одну и ту же переменную RandSeed, а несколько (для каждой необходимой тебе "линии" - своя "затравка").
Да, это выход. Спасибо.

Цитата
Кстати, "линия" - это ты о чем?
Я сознательно неясно выразился, потому что пока сам не знаю, как оно будет реализоываться. Постановка самой задачи только еще оформляется, код еще не начат. Более того, даже с платформой не определились.. )) И последний штрих: кодить буду не я.. )) Просто пытаюсь отследить возможные подводные камни.

Цитата
Если о потоках - то вот это: Embarcadero QC -> #4368 может быть тебе интересно. Тут фактически готовое решение.
о, ну это ваще блеск )). Сиб!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Допустим random действительно генерит дискретную последовательность по равномерному закону распределения, тогда у меня возникает другой вопрос: Как из этого равномерного распределения сделать другое распределение?

Или как в Delphi сгенерить дискретную последовательность с не стандартным распределениемне стандартную имею в виду, что даже в MATLAB таких распределений не делается автоматом.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Dypexia @ 13.02.2011 15:01) *
Допустим random действительно генерит дискретную последовательность по равномерному закону распределения, тогда у меня возникает другой вопрос: Как из этого равномерного распределения сделать другое распределение?
Дркгое - это какое? Можно налажить веса, если надо..

Цитата
Или как в Delphi сгенерить дискретную последовательность с не стандартным распределениемне стандартную имею в виду, что даже в MATLAB таких распределений не делается автоматом.
Выразись поточнее. Чего "не делает даже MATLAB автоматом" - это как-то не очень понятно..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Редко захожу на форум, поэтому своевременно не видел эту тему.

В Паскале есть внутренняя переменная randseed, которая доступна извне.
Достаточно в каждой "линии" завести по одной переменной для хранения текущего значения randseed, чтобы в каждой из них фактически оказывался независимый от других "линий" ГПСЧ.

1. Сохраняем значение randseed во временную переменную.
2. Помещаем в randseed значение из нашей дополнительной переменной для текущей линии.
3. Вызываем random.
4. Возвращаем в дополнительную переменную значение randseed.
5. Восстанавливаем значение randseed из временной переменной.

Все. Для других вызовов random этот вызов прошел незамеченным. И, кроме того, в нем самом последовательность не зависит от вызовов из других мест.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.04.2024 20:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name