저는 작은 ASCII 게임에서 절차 적 생성을 사용하고 있는데 haskell에서 난수로이 문제가 발생했습니다. 기본 아이디어는 게임 세계 일부의 (x, y)로 시드 된 임의의 숫자를 제공하여 예를 들어 나무가 있는지 여부를 결정하는 것입니다 ( 이 사람은 잘 설명합니다 ).
이것은 세대마다 다른 씨앗을 시도 할 때 얻는 것입니다.
randomFromSeed :: Int -> Int -> Int
randomFromSeed max seed = fst (randomR (0, max - 1) (mkStdGen seed))
Prelude> map (randomFromSeed 10) [1..20]
[5,9,3,7,1,5,9,3,7,1,5,9,3,7,1,5,9,3,7,1]
확실히 기간은 5이지만 mkStdGen 문서 에서는 다음과 같이 말합니다.
mkStdGen 함수는 Int를 생성기에 매핑하여 초기 생성기를 생성하는 대체 방법을 제공합니다. 다시 말하지만, 별개의 인수는 별개의 생성자를 생성 할 가능성이 있어야합니다.
그렇다면 어떻게 5 개의 고유 한 발전기 만 오는 것 같습니까?
다른 시드가 주어 졌을 때 그것들이 정말로 무작위가되도록 어떻게 할 수 있습니까?
편집 더 큰 숫자를 사용하는 이상한 이유 때문에 더 좋습니다.
Prelude> let mult = 1000000 in map (randomFromSeed 10) [0,mult .. 20*mult]
[3,7,0,6,9,2,8,1,4,0,3,9,2,5,1,4,7,3,6,9,5]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다