2016-10-07 3 views
0

나는 정오까지 매 시간마다 증가하는 확률로 실행하고 자정까지 확률을 줄이는 기능이 있습니다. 정오에 맞춰진 정규 분포가 그렇게 할 것이라고 상상할 수 있습니다. 따라서 함수를 실행할 확률은 정오에 100 %이지만 자정에는 매우 낮습니다. 그러나 파이썬 코드로 변환 할 수는 없습니다.시간에 따라 확률 적으로 실행됩니다.

예를 들어 코드가 오전 1시에 실행되면 실행 가능성이 매우 낮습니다. 그러나 정오에 코드를 실행하면 실행 가능성이 100 %입니다.

currentHour = 12 

if currentHour == 1: 
    print('probability = 0') 
elif currentHour == 2: 
    print('probability = 0') 
elif currentHour == 3: 
    print('probability = .1') 
elif currentHour == 4: 
    print('probability = .2') 
elif currentHour == 5: 
    print('probability = .3') 
elif currentHour == 6: 
    print('probability = .4') 
elif currentHour == 7: 
    print('probability = .5') 
elif currentHour == 8: 
    print('probability = .6') 
elif currentHour == 9: 
    print('probability = .7') 
elif currentHour == 10: 
    print('probability = .8') 
elif currentHour == 11: 
    print('probability = .9') 
elif currentHour == 12: 
    print('probability = 1') 
elif currentHour == 13: 
    print('probability = .9') 
elif currentHour == 13: 
    print('probability = .8') 
elif currentHour == 14: 
    print('probability = .7') 
elif currentHour == 15: 
    print('probability = .6') 
elif currentHour == 16: 
    print('probability = .5') 
elif currentHour == 17: 
    print('probability = .4') 
elif currentHour == 18: 
    print('probability = .3') 
elif currentHour == 19: 
    print('probability = .2') 
elif currentHour == 20: 
    print('probability = .1') 
elif currentHour == 21: 
    print('probability = 0') 
elif currentHour == 22: 
    print('probability = 0') 
elif currentHour == 23: 
    print('probability = 0') 
elif currentHour == 24: 
    print('probability = 0') 
+1

최소한 사전을 사용하십시오. –

+0

.1을 사용하여 위아래로 이동하는 대신 Box-Mueller 변환을 사용하여 정규 분포로 만들 수 있습니다. 답변은 http://stackoverflow.com/a/75720/509840에서 확인하십시오. 또는 https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform – rajah9

+0

@ rajah9에서 변환 할 수있는 괜찮은 코드가있는 Wikipedia 페이지를 참조하십시오.이 공식은 sin()을 사용하여 제 대답을 봅니다. 줬어. – Fusseldieb

답변

1

순수 마법 :

이것은 내가 원하는에서 완전히 원유, unpythonic, 수동 시도이다. 나는 그것을 알아. 아니, 농담이야. 당신이 그 질문을 할 때, 그것은 곧 부비동의 파도를 상기 시켰고, 그들은 당신이하려고하는 것과 똑같이 다시 올라 갔다가 다시 내려갔습니다. this 페이지에 따르면

: Y = (X)에 의해 정의 죄 기능

그래프는 정현파 또는 사인파라고한다. [...]이 그래프는 6.28 단위 또는 2 pi 라디안을 반복합니다.

sin((hour/24)*pi) 

당신은 다음과 같이 파이썬이를 통합 할 수 있습니다 :

import math 
import time 
hour = int(time.strftime("%H")) 
probability = math.sin(hour/24.0*math.pi) 
print(probability) 

이유는 -1에서

1. 그래서 나는이 함께했다 범위? sin(0*pi)은 0이므로 sin(0.5*pi)1입니다. 확률이 12 시간이면 가장 높기 때문에 1입니다. 이 값은 sin(0.5*pi)에 발생합니다. 24 시간 후 값은 sin(1*pi)이고 다시 0이됩니다.

는 그럼 24하여 현재 시간을 분할함으로써, 0240 1 범위에서 해당 값을, 변환된다. 옵션

Half sine

1

많이. 단지 시간을 기준으로 0과 1 사이의 값을 반환하는 함수를 만듭니다. 그런 다음 0과 1 사이의 임의의 부동 소수점을 만듭니다. 부동 소수점이 확률보다 작 으면 프로그램을 실행합니다.

import numpy as np 

def prob_sawtooth(hour): 
    return 1. - abs((hour - 12.)/12.) 

def prob_sin(hour): 
    return np.sin(hour/24. * np.pi) 

def prob_gaussian(hour, stdev=6.): 
    gauss = lambda x, m, s: np.exp(-(x-m)**2/(2*s**2))/np.sqrt(2*np.pi*s**2) 
    return gauss(hour, 12., stdev)/gauss(12., 12., stdev) 

test = np.random.rand() 
#14:00 
if test <= prob_gaussian(14.): 
    # run program 
    pass 
관련 문제