احتمال دالة الكثافة من ورقة تنفيذها باستخدام C++, لا تعمل على النحو المنشود
-
29-09-2019 - |
سؤال
حتى انا تنفيذ خوارزمية الكشف عن مجريات الأمور ، لقد جئت عبر هذه الوظيفة.
لدي مجموعة من 1 إلى n (0 إلى n-1 على C w/e).أريد أن اختيار عدد من العناصر سوف نسخ إلى مجموعة أخرى.تعطى المعلمة y (0 < y <= 1) ، أريد أن يكون توزيع الأرقام التي متوسط (ذ * n).وهذا يعني أنه كلما استدعاء هذه الدالة ، انه يعطيني رقم بين 0 و ن ، و متوسط هذه الأرقام هو y*ن.
وفقا للمؤلف, "l" هو رقم عشوائي:0 < l < ن .على رمز اختبار لها حاليا توليد 0 <= l <= n.و كان الرمز الصحيح ، ولكن أنا أعبث مع هذا لساعات الآن و أنا كسول الرمز مرة أخرى.
لذا مشفرة الجزء الأول من الدالة y <= 0.5 أنا وضعت y 0.2 n إلى 100.وهذا يعني أنه اضطر إلى العودة رقم بين 0 و 99 ، مع متوسط 20.والنتائج ليست بين 0 و n, ولكن بعض العوامات.وأكبر n هو أصغر من هذا تعويم.
هذا هو C اختبار التعليمات البرمجية."x" هو "أنا" المعلمة.
//hate how code tag works, it's not even working now
int n = 100;
float y = 0.2;
float n_copy;
for(int i = 0 ; i < 20 ; i++)
{
float x = (float) (rand()/(float)RAND_MAX); // 0 <= x <= 1
x = x * n; // 0 <= x <= n
float p1 = (1 - y) / (n*y);
float p2 = (1 - ( x / n ));
float exp = (1 - (2*y)) / y;
p2 = pow(p2, exp);
n_copy = p1 * p2;
printf("%.5f\n", n_copy);
}
وهنا بعض النتائج (5 عشرية اقتطاع):
0.03354
0.00484
0.00003
0.00029
0.00020
0.00028
0.00263
0.01619
0.00032
0.00000
0.03598
0.03975
0.00704
0.00176
0.00001
0.01333
0.03396
0.02795
0.00005
0.00860
المادة:
http://www.scribd.com/doc/3097936/cAS-The-Cunning-Ant-System
صفحة 6 و 7.
أو البحث "cAS:النمل الماكرة النظام" على جوجل.
إذن ما الخطأ الذي فعلته ؟ أنا لا أعتقد أن الكاتب هو الخطأ, لأن هناك أكثر من 5 ورقات واصفا هذه الوظيفة نفسها.
كل ما عندي انترنيت لمن يساعدني.هذا هو المهم عملي.
شكرا :)
المحلول
dmckee هو الصحيح في الواقع, ولكن أعتقد أن أريد أن أفصل أكثر في محاولة لتفسير بعض الارتباك هنا.أنا بالتأكيد يمكن أن تفشل. f_s(l)
, وظيفة الخاص بك جميلة الصيغة أعلاه, هو احتمال وظيفة التوزيع.فإنه يقول لك معين الإدخال l
بين 0 و n ، احتمال أن l
هو طول الجزء.مجموع (لا يتجزأ) لجميع القيم بين 0 و n يجب أن يساوي 1.
الرسم البياني في أعلى الصفحة 7 يخلط بين هذه النقطة.ومن المؤامرات l
مقابل f_s(l)
, ولكن عليك أن احترس من الضالة العوامل فإنه يضع على الجانب.لاحظ أن القيم في الجزء السفلي من 0 إلى 1 ، ولكن هناك عامل x n
على الجانب ، مما يعني أن l
القيم في الواقع تذهب من 0 إلى ن.أيضا ، على المحور الصادي هناك x 1/n
مما يعني أن هذه القيم في الواقع لا تصل إلى حوالي 3 ، يذهبون إلى 3/ن.
لذا ماذا تفعل الآن ؟ حسنا, أنت بحاجة إلى حل دالة التوزيع التراكمي من خلال دمج احتمال وظيفة التوزيع على l
والتي في الواقع تبين أن ليس سيئا جدا (أنا فعلت هذا مع Wolfram Mathematica على الانترنت متكامل باستخدام x l
و فقط باستخدام المعادلة y <= .5).ومع ذلك كان استخدام غير محددة لا يتجزأ كنت حقا التكامل على طول x من 0 إلى l
.إذا وضعنا المعادلة الناتجة عن ذلك يعادل بعض المتغير (z على سبيل المثال) ، والهدف الآن هو حل ل l
بوصفها وظيفة من الياء.z هنا هو رقم عشوائي بين 0 و 1.يمكنك محاولة استخدام رمزي حلالا هذا الجزء إذا كنت ترغب في (أنا).ثم لديك ليس فقط حققت هدفك من أن تكون قادرة على اختيار عشوائي l
s من هذا التوزيع ، لديك أيضا تحقيق السكينة.
تعمل
سوف تساعد أكثر قليلا.حاولت فعل ما قلته عن y <= .5 ، ولكن رمزية نظام الجبر كنت تستخدم تكن قادرة على القيام عكس (بعض نظام آخر قد تكون قادرة على).ومع ذلك, ثم قررت أن محاولة استخدام معادلة .5 < y <= 1.تبين أن هذا أسهل بكثير.إذا قمت بتغيير l
x في f_s(l)
أحصل على
y / n / (1 - y) * (x / n)^((2 * y - 1) / (1 - y))
دمج هذا على x من 0 إلى l
حصلت (باستخدام الرياضيات على الانترنت متكامل):
(l / n)^(y / (1 - y))
انها لا تحصل على أفضل من ذلك مع هذا النوع من الشيء.إذا أنا وضعت هذا يساوي z و حل l
أحصل على:
l = n * z^(1 / y - 1) for .5 < y <= 1
واحدة سريعة تحقق هو y = 1.في هذه الحالة نحصل على l = n
بغض النظر عن الياء.حتى الآن جيد جدا.إن توليد z (رقم عشوائي بين 0 و 1) وتحصل على l
التي يتم توزيعها على النحو المطلوب من أجل .5 < y <= 1.ولكن الانتظار, وعند النظر إلى الرسم البياني في الصفحة 7 لاحظت أن احتمال وظيفة التوزيع متماثل.وهذا يعني أنه يمكننا استخدام النتيجة أعلاه للعثور على قيمة 0 < y <= .5.نحن مجرد تغيير l
-> n-l
و y
-> 1-y
والحصول على
n - l = n * z^(1 / (1 - y) - 1)
l = n * (1 - z^(1 / (1 - y) - 1)) for 0 < y <= .5
على أي حال ، ينبغي أن حل المشكلة الخاصة بك إلا إذا كنت جعل خطأ ما في مكان ما.حظا سعيدا.
نصائح أخرى
قد يسيئون فهم ما هو متوقع منك.
تعطى (صحيح تطبيع) PDF و الرغبة في رمي عشوائي توزيع يتفق مع النموذج التراكمي التوزيع الاحتمالي (قوات الدفاع المدني) من خلال دمج PDF, ثم عكس قوات الدفاع المدني ، واستخدام موحد عشوائية المسند كما حجة مقلوب الدالة.
أكثر من ذلك بقليل من التفصيل.
f_s(l)
هو PDF و تم تطبيع على [0,n)
.
الآن يمكنك دمج لتشكيل قوات الدفاع المدني ،
g_s(l') = \int_0^{l'} dl f_s(l)
علما أن هذا واضح لا يتجزأ غير محدد النهاية التي دعوت l'
.قوات الدفاع المدني وبالتالي وظيفة l'
.على افتراض لدينا التطبيع الحق ، g_s(N) = 1.0
.إذا كان هذا هو لا نطبق بسيط معامل لإصلاحه.
بجانب قلب الدفاع المدني والدعوة النتيجة G^{-1}(x)
.لهذا ربما كنت سوف ترغب في اختيار قيمة معينة من أشعة جاما.
ثم رمي موحدة رقم عشوائي على [0,n)
, و استخدام هذه الحجة ، x
, ، G^{-1}
.النتيجة يجب أن تقع بين [0,1)
, و يجب أن توزع وفقا f_s
.
مثل جوستين, يمكنك استخدام جهاز كمبيوتر الجبر نظام الرياضيات.
بالنظر إلى أن أي قيم l, y, n كما هو موضح ، حيث تتصل p1 و p2 على حد سواء في [0,1) و exp في [1,..) جعل الأسرى(p2, exp) أيضا في [0,1) وبالتالي أنا لا أرى كيف كنت من أي وقت مضى الحصول على الإخراج مع مجموعة [0,n)