بيثون ، SimPy:كيفية توليد قيمة من الثلاثي احتمال التوزيع ؟

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

سؤال

أريد تشغيل محاكاة يستخدم المعلمة القيمة المتولدة من الثلاثي التوزيع الاحتمالي مع الحد الأدنى ، وضع ب و و الحد الأعلى C.كيف يمكن توليد هذه القيمة في الثعبان ؟ هل هناك شيء بسيط مثل expovariate(لامدا) (من عشوائية) على هذا التوزيع أو هل يجب أن رمز هذا الشيء ؟

هل كانت مفيدة؟

المحلول

إذا قمت بتحميل حزمة نمباي، فقد numpy.random.triangular وظيفة (من اليسار، واسطة، الحق [حجم]) أن يفعل بالضبط ما كنت أبحث عنه.

نصائح أخرى

منذ كنت فحص عشوائي وثائق من بيثون 2.4 فاتني هذا:

عشوائي.الثلاثي(منخفضة, عالية, mode)¶ عودة عشوائي النقطة العائمة ن عدد هذه منخفض <= N <= عالية مع تحديد وضع بين تلك الحدود.انخفاض وارتفاع حدود الافتراضي إلى صفر وواحد.وضع حجة التخلف إلى نقطة الوسط بين حدود ، مما يتيح توزيع متماثل. الجديد في الإصدار 2.6.

ودعونا نقول أن التوزيع لم يكن التعامل معها من قبل نمباي أو بيثون مكتبة قياسي.

في الحالات التي يكون فيها الأداء ليس مهما جدا، وأخذ العينات الرفض هو الإختراق من المفيد للحصول على توجه من توزيع لم يكن لديك باستخدام أحد يجب عليك.

لتوزيع الثلاثي الخاص بك، يمكنك أن تفعل شيئا من هذا القبيل

from random import random, uniform

def random_triangular(low, high, mode):
    while True:
        proposal = uniform(low, high)
        if proposal < mode:
            acceptance_prob = (proposal - low) / (mode - low)
        else:
            acceptance_prob = (high - proposal) / (high - mode)
        if random() < acceptance_prob: break
    return proposal

ويمكنك رسم بعض العينات

pylab.hist([random_triangular(1, 6, 5) for t in range(10000)])

للتأكد من أن كل شيء يبدو بخير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top