한 가지 방법이 당신이 순서 사전의 길이를 알고 가정 1 0 대 발생의 가능성에 대한 logistic function을 사용하는 것입니다,하지만 ramp-의 비율 당신에게 많은 유연성을 제공 최대, 최소 및 최대 확률은 1입니다.(확률 적)
00000000011000001000001100001101001010000011001011001111000111011111101011111011
10100000000000000000010000010111000000110110111011111000111011111111111110111111
결과는 무작위입니다,하지만 당신은 할 수 있습니다 : 두 번 실행
# Creates an array of desired length whose values are symmetric
# about the mid-point of the array, are bounded below and above
# by min & max, and have a ramp up rate determined by steepness.
def logistic_function(length, min, max, steepness)
mid = 0.5 * (length - 1)
range = max - min
# create, initialize elements via logistic fn, and return resulting array
Array.new(length) { |x| min + range/(1 + Math.exp(-steepness * (x - mid))) }
end
length = 80
# 80 probabilities will vary from 0.1 to 0.9, with a relatively slow ramp-up
probability = logistic_function(length, 0.1, 0.9, 0.1)
# Create an array of bits where each entry's probability of being 1
# is determined by the logistic function we generated
bits = Array.new(length) { |i| rand <= probability[i] ? 1 : 0 }
puts bits.join
샘플 출력 : 당신은 언어를 지정하지 않았기 때문에
, 나는 루비에서이 프로토 타입 min
, max
및 steepness
을 통해 1의 밀도와 전환율을 제어하십시오.
로지스틱 함수의 대칭에 의해, 1 비트의 전체 비율은 예상 값 (min + max)/2
임을 유의하십시오. 필자가 사용한 매개 변수화를 사용하면 0.5입니다. 이것을 설명하기 위해 나는 80 비트 세트에서 1의 수를 세었고, 10,000 번의 시도를 위해 생성/계산을 반복했다.
출처
2017-03-16 15:00:46
pjs
더 = 결정적 structued : 재미에 대한
, 여기에 (1000)의 간격으로 실행입니까? – maraca
예. 죄송합니다, 그것이 제가 의미했던 것입니다. 감사합니다 @maraca – janizer
그래서 "결정 론적"이 의사 난수를 얻지 못하게할까요? – pjs