بيثون ، SimPy:كيفية توليد قيمة من الثلاثي احتمال التوزيع ؟
-
03-07-2019 - |
سؤال
أريد تشغيل محاكاة يستخدم المعلمة القيمة المتولدة من الثلاثي التوزيع الاحتمالي مع الحد الأدنى ، وضع ب و و الحد الأعلى 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)])
للتأكد من أن كل شيء يبدو بخير.