いまを生成するヒストグラムの指定された確率分布のための機能テストサーバ)?

StackOverflow https://stackoverflow.com/questions/53786

質問

うことにより自動化機能の機能試験のサーバーを使用しリアルな周波数分布です。(のような負荷試験のシミュレーション)

私は選んだの ワイブル 流し"の"マッチの配信まで観察できる(スロープも、下の迅速なぐ)

その結果が、先ほど任天堂さんの分布生成の数が要求され日間の指定開始、終了日

私はハッキングとアルゴリズムのPythonではこのような作品でじkludgy:

how_many_days = (end_date - start_date).days
freqs = defaultdict(int)
for x in xrange(how_many_responses):
    freqs[int(how_many_days * weibullvariate(0.5, 2))] += 1
timeline = []
day = start_date
for i,freq in sorted(freqs.iteritems()):
    timeline.append((day, freq))
    day += timedelta(days=1)
return timeline

何よりよい方法はあるのか?

役に立ちましたか?

解決

これは迅速れていないことが考えられる正確なものであれば計算の自分自身、その後少なくとも使いやすくすくにはいくつかの小さなイターズも一つのタイプです。 dev の標準偏差をGuassianノイズをコントロールする"を表現。これは、 ない つの方法で作成したいものです。

import math
from datetime import datetime, timedelta, date
from random import gauss

how_many_responses = 1000
start_date = date(2008, 5, 1)
end_date = date(2008, 6, 1)
num_days = (end_date - start_date).days + 1
timeline = [start_date + timedelta(i) for i in xrange(num_days)]

def weibull(x, k, l):
    return (k / l) * (x / l)**(k-1) * math.e**(-(x/l)**k)

dev = 0.1
samples = [i * 1.25/(num_days-1) for i in range(num_days)]
probs = [weibull(i, 2, 0.5) for i in samples]
noise = [gauss(0, dev) for i in samples]
simdata = [max(0., e + n) for (e, n) in zip(probs, noise)]
events = [int(p * (how_many_responses / sum(probs))) for p in simdata]

histogram = zip(timeline, events)

print '\n'.join((d.strftime('%Y-%m-%d ') + "*" * c) for d,c in histogram)

他のヒント

てみましょう 研削盤の3 負荷試験をサーバーが付属します。prebuiltでpythonとしてスクリプト言語

長いろいろと読みやすくするためにリワークの前線:

samples = [0 for i in xrange(how_many_days + 1)]
for s in xrange(how_many_responses):
    samples[min(int(how_many_days * weibullvariate(0.5, 2)), how_many_days)] += 1
histogram = zip(timeline, samples)
print '\n'.join((d.strftime('%Y-%m-%d ') + "*" * c) for d,c in histogram)

この落のサンプル内の日付の範囲でご利用いただけます。対応するバンプの終了のタイムラインからすべてのサンプル上の[0,1]の範囲です。

に代えることの要望として固定値、なぜ使用しないでスケーリング係数ょうか?現在、処理要求として数量限定、randomising当日応。というよりリーズナブルな処理のご要望-当日として独立しています。

from datetime import *
from random import *

timeline = []
scaling = 10
start_date = date(2008, 5, 1)
end_date = date(2008, 6, 1)

num_days = (end_date - start_date).days + 1
days = [start_date + timedelta(i) for i in range(num_days)]
requests = [int(scaling * weibullvariate(0.5, 2)) for i in range(num_days)]
timeline = zip(days, requests)
timeline

無事に卒業できた私は、しばらくは上記コードする短いものかもしれないもobfuscatedですか?)

timeline = (start_date + timedelta(days=days) for days in count(0))
how_many_days = (end_date - start_date).days
pick_a_day = lambda _:int(how_many_days * weibullvariate(0.5, 2))
days = sorted(imap(pick_a_day, xrange(how_many_responses)))
histogram = zip(timeline, (len(list(responses)) for day, responses in groupby(days)))
print '\n'.join((d.strftime('%Y-%m-%d ') + "*" * c) for d,c in histogram)

少し値段が高くなりますが、利用 Rpy, に、すべての電力のRを含む多くのツールの分布を、容易に入ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top