पूर्वानुमानित यादृच्छिक जनरेटर की आवश्यकता


151

मैं एक वेब-गेम डेवलपर हूं और मुझे रैंडम नंबर की समस्या है। मान लीजिए कि किसी खिलाड़ी के पास अपनी तलवार के साथ महत्वपूर्ण हिट पाने का 20% मौका है। इसका मतलब है, 5 हिट्स में से 1 क्रिटिकल होना चाहिए। समस्या यह है कि मुझे बहुत खराब वास्तविक जीवन परिणाम मिले हैं - कभी-कभी खिलाड़ियों को 5 हिट में 3 क्रिट मिलते हैं, कभी-कभी 15 हिट में से कोई भी नहीं। लड़ाईयां कम (3-10 हिट) होती हैं, इसलिए अच्छा यादृच्छिक वितरण प्राप्त करना महत्वपूर्ण है।

वर्तमान में मैं PHP का उपयोग करता हूं mt_rand(), लेकिन हम अपने कोड को C ++ में स्थानांतरित कर रहे हैं, इसलिए मैं इस समस्या को हमारे गेम के नए इंजन में हल करना चाहता हूं।

मुझे नहीं पता कि क्या समाधान कुछ समान यादृच्छिक जनरेटर है, या उचित वितरण के लिए बाध्य करने के लिए पिछले यादृच्छिक राज्यों को याद रखना चाहिए।


58
असली यादृच्छिक संख्याओं को मानते हुए, वास्तव में 3 महत्वपूर्ण हिटों और 0.5 गैर-महत्वपूर्ण लोगों के बारे में 0.5% संभावना और एक पंक्ति में 15 गैर-महत्वपूर्ण हिटों का 3.5% मौका है।
निक्सुज

10
ऊपर से +1। यादृच्छिक संख्याओं की एक विशेषता यह है कि आपको आउटलेयर मिलता है।
कंसर्नडऑफटुनब्रिजवेल्स

45
@ निक्सस: नहीं, यह 3 महत्वपूर्ण हिट्स और 2 गैर-महत्वपूर्ण लोगों के 5% मौका है, आप (5! / (3! * 2!)) = 10. 95% आत्मविश्वास के स्तर के साथ गुणा करना भूल रहे हैं, यह! 5 हमलों में होने वाली 3 महत्वपूर्ण हिट के लिए सांख्यिकीय रूप से संभावना नहीं है।
एरिकक्लेन

7
पहले तो मुझे लगा कि यह एक मूर्खतापूर्ण सवाल है ... एक बार फिर, मैं एसओ द्वारा विनम्र हूं।
सर्जियोएल

जवाबों:


39

मैं पहले के जवाबों से सहमत हूं कि कुछ खेलों के छोटे रनों में वास्तविक यादृच्छिकता अवांछनीय है - यह कुछ उपयोग के मामलों के लिए बहुत अनुचित लगता है।

मैंने रूबी में कार्यान्वयन की तरह एक सरल साधा बैग लिखा और कुछ परीक्षण किया। कार्यान्वयन ने ऐसा किया:

  • यदि यह अभी भी उचित लगता है या हम न्यूनतम रोल की सीमा तक नहीं पहुंचे हैं, तो यह सामान्य संभावना के आधार पर एक उचित हिट देता है।
  • यदि पिछले रोल से देखी गई संभावना अनुचित लगती है, तो यह "उचित-ifying" हिट देता है।

इसे सीमा संभावनाओं के आधार पर अनुचित माना जाता है। उदाहरण के लिए, 20% की संभावना के लिए, आप 10% को कम बाउंड के रूप में और 40% को एक ऊपरी बाउंड के रूप में सेट कर सकते हैं।

उन सीमाओं का उपयोग करते हुए, मैंने पाया कि 10 हिट के रन के साथ, उस समय के 14.2% सच्चे छद्म आयामी कार्यान्वयन ने परिणाम उत्पन्न किए जो उन सीमाओं से बाहर थे । लगभग 11% समय, 10 प्रयासों में 0 महत्वपूर्ण हिट किए गए थे। 3.3% समय, 5 या अधिक महत्वपूर्ण हिट्स 10. से बाहर आ गए थे। स्वाभाविक रूप से, इस एल्गोरिथ्म (5 की न्यूनतम रोल गणना के साथ) का उपयोग करते हुए, "फेयरिश" रन की बहुत छोटी राशि (0.03%) सीमा से बाहर थी। । भले ही नीचे कार्यान्वयन अनुपयुक्त हो (अधिक चतुर चीजें निश्चित रूप से की जा सकती हैं), यह ध्यान देने योग्य है कि अक्सर आपके उपयोगकर्ताओं को यह महसूस होगा कि यह वास्तविक छद्म आयामी समाधान के साथ अनुचित है।

यहाँ FairishBagरूबी में मेरा लिखा हुआ मांस है । संपूर्ण कार्यान्वयन और त्वरित मोंटे कार्लो सिमुलेशन यहां (जिस्ट) उपलब्ध है

def fire!
  hit = if @rolls >= @min_rolls && observed_probability > @unfair_high
    false
  elsif @rolls >= @min_rolls && observed_probability < @unfair_low
    true
  else
    rand <= @probability
  end
  @hits += 1 if hit
  @rolls += 1
  return hit
end

def observed_probability
  @hits.to_f / @rolls
end

अद्यतन: इस विधि का उपयोग करने से ऊपर की सीमा का उपयोग करके एक महत्वपूर्ण हिट होने की समग्र संभावना बढ़ जाती है, लगभग 22%। आप इसकी "वास्तविक" संभावना को थोड़ा कम करके इसकी भरपाई कर सकते हैं। फेयरिश मॉडिफिकेशन के साथ 17.5% की संभावना में लगभग 20% की दीर्घावधि संभावना देखी जाती है, और यह अल्पावधि को उचित महसूस करता है।


मुझे लगता है कि यह सबसे अच्छा समाधान है जो मेरी आवश्यकताओं के अनुरूप है। सबसे अच्छी तरह से बताए गए उत्तर में दिए गए शफल बैग खराब नहीं हैं, लेकिन बहुत सारी गणना की आवश्यकता है, और मुझे सबसे सरल समाधान पसंद है जो लक्ष्य की ओर जाता है।
विचारक

स्टीव रबिन ने खेलों में यादृच्छिकता के बारे में एक दिलचस्प लेख लिखा। संक्षेप में, सच "यादृच्छिक" व्यवहार वास्तव में "महसूस" नहीं करता है अधिकांश लोगों और अध्ययनों ने यादृच्छिक रूप से इसका समर्थन किया है। उनके लेख को एआई डिसीज़न और गेम लॉजिक के लिए फ़िल्टर्ड रैंडमनेस कहा जाता है और "एआई गेम प्रोग्रामिंग विजडम 2" (2003) में दिखाई देता है। आपको इसकी जांच करनी चाहिए, शायद यह आपके लिए उपयोगी होगा।
जेफ टकर 23

@IanTerrell यह बताना अच्छा होगा कि आपके परीक्षणों का नमूना आकार कितना बड़ा है, यानी उन संभावनाओं को निर्धारित करने के लिए कितनी लड़ाइयाँ।

@ user677656: यह गिस्ट में है, लेकिन यह 100k है
इयान टेरेल

223

इसका मतलब है, 5 हिट्स में से 1 क्रिटिकल होना चाहिए। समस्या यह है कि मुझे बहुत खराब वास्तविक जीवन परिणाम मिले हैं - कभी-कभी खिलाड़ियों को 5 हिट में 3 क्रिट मिलते हैं, कभी-कभी 15 हिट में से कोई भी नहीं।

आपको जो चाहिए वो है शफल बैग । यह खेल के लिए सही यादृच्छिक के यादृच्छिक होने की समस्या को हल करता है।

एल्गोरिथ्म इस तरह है: आपने एक बैग में 1 महत्वपूर्ण और 4 गैर-महत्वपूर्ण हिट लगाए हैं। फिर आप बैग में उनके ऑर्डर को रैंडम करते हैं और उन्हें एक बार में बाहर निकालते हैं। जब बैग खाली होता है, तो आप इसे फिर से उसी मूल्यों के साथ भरते हैं और इसे यादृच्छिक करते हैं। इस तरह आपको प्रति 5 हिट में औसतन 1 क्रिटिकल हिट मिलेगा, और एक पंक्ति में अधिकतम 2 क्रिटिकल और 8 गैर-क्रिटिकल हिट होंगे। अधिक यादृच्छिकता के लिए बैग में वस्तुओं की संख्या बढ़ाएं।

यहां एक कार्यान्वयन (जावा में) और इसके परीक्षण मामलों का एक उदाहरण है जो मैंने कुछ समय पहले लिखा था।


21
+ 1 आलोचना के बिना अच्छे विचार के लिए। यादृच्छिकता की उच्च डिग्री के लिए बैग को स्केल करें, और खिलाड़ियों के बीच महत्वपूर्ण अवसर में वेरिएंस को संभालने के लिए (यदि चर की)
TheMissingLINQ

16
आपके पास एक बैग का आकार हो सकता है। 1 हिट में रखो, एक सेकंड का 30% मौका। यदि महत्वपूर्ण मौका बदलता है, तो आप बस बैग को फेंक सकते हैं और एक नई शुरुआत कर सकते हैं। ध्यान दें कि ऐसी कोई भी योजना जोखिम से चलती है कि यदि आप (या आपके प्रतिद्वंद्वी) आपकी महत्वपूर्ण हिट संभावना और बैग के आकार को जानते हैं, तो आप कभी-कभी यह सुनिश्चित कर सकते हैं कि आपको निश्चित संख्या में रोल के लिए एक और महत्वपूर्ण नहीं मिलेगा। इससे रणनीति प्रभावित हो सकती है।
स्टीव जेसोप

3
हाँ ... कुछ इस तरह से आप कार्ड की गिनती के समान रिक्शा चलाते हैं। क्या मैं एक चपरासी को जोखिम में डालता हूं या बड़ी हत्या के लिए जाता हूं ... संभावित परिणामों के एक छोटे से निर्धारित सेट से नुकसान का खतरा कम हो सकता है और "gamed" होने की संभावना बढ़ सकती है
मैथ्यू

8
मुझे शफ़ल बैग विचार पसंद है लेकिन मुझे नहीं लगता कि यह मैच "स्पिरिट" से मेल खाता है क्योंकि आपकी महत्वपूर्ण हिट की संभावना 20% है (जिसका अर्थ है कि आप 10 हिट में से कोई भी नहीं कर सकते हैं) अब संभावना नहीं है। यह हर 5 हिट में से 1 हिट बन जाता है। इसके अलावा, यदि महत्वपूर्ण हिट संभावना परिवर्तन के कारण बैग में रेरोलिंग हो जाता है, तो इससे खेल में एक गड़बड़ होगी। अगर मेरी महत्वपूर्ण हिट हो गई है, तो मैं अगले आलोचक को पाने के लिए खुद पर जादू करूँगा: p
Michaël Carpentier

2
@ जोनाथन: बैग को बड़े आकार का बनाना जो आप वास्तव में देते हैं, वह पूरे बैग-आइडिया को खोल देता है: यह सुनिश्चित करने के लिए कि कुछ स्वीकार्य मात्रा में होता है (महत्वपूर्ण है)। बैग को 50000 बड़ा बनाना यादृच्छिक संख्या जनरेटर का उपयोग करने के समान है।
dstibbe

113

आपको इस बात की गलतफहमी हो गई है कि यादृच्छिक का क्या मतलब है।

इनमें से कौन अधिक यादृच्छिक है?

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

जबकि दूसरा प्लॉट अधिक समान रूप से वितरित किया गया है, और अधिक यादृच्छिक वास्तव में पहला प्लॉट है। मानव मन अक्सर यादृच्छिकता में पैटर्न देखता है, इसलिए हम क्लॉट्स को पहले प्लॉट में पैटर्न के रूप में देखते हैं, लेकिन वे नहीं हैं - वे यादृच्छिक रूप से चयनित नमूने का हिस्सा हैं।


25
अच्छा Numb3rs स्पष्टीकरण!
RMAAlmeida

9
तकनीकी रूप से, आप यादृच्छिकता को माप नहीं सकते। दोनों वितरण मेरे लिए काफी मनमाने लगते हैं, हालांकि मेरा अनुमान है कि दोनों एल्गोरिथम उत्पन्न हुए थे। आप पहले प्लॉट पर कई परीक्षण कर सकते हैं और यह निर्धारित कर सकते हैं कि यह एक ऐसी प्रक्रिया से आने की संभावना है जो एक समान वितरण के अनुसार अंक देती है, लेकिन आप यह निष्कर्ष निकालने में सक्षम नहीं होंगे कि यह अधिक यादृच्छिक है। एक प्रतिरूप के रूप में, आप एक रेखीय बधाई जनरेटर का उपयोग करके पहले की तरह एक भूखंड बना सकते हैं, फिर एक ज़ेनर डायोड से प्रवर्धित शोर का उपयोग करके दूसरे की तरह एक भूखंड बना सकते हैं। यादृच्छिक के बजाय असंबद्ध शब्द का प्रयास करें।
डायट्रीच एप

8
आप इस संभावना को माप सकते हैं कि उक्त वितरण यादृच्छिक है।
सिज्जोज


2
निष्पक्ष होने के लिए, जबकि ओपी सही शब्दों का उपयोग नहीं कर सकता है, वह समझता है कि यादृच्छिक संख्या जनरेटर उसे पहले ग्राफ की तरह कुछ और दे रहा है, जब वह दूसरे ग्राफ़ की तरह कुछ और चाहता है क्योंकि यह उपयोगकर्ता को अधिक "निष्पक्ष" लगता है
किप

88

आपके द्वारा पूछे जा रहे व्यवहार को देखते हुए, मुझे लगता है कि आप गलत चर को यादृच्छिक कर रहे हैं।

यादृच्छिक के बजाय कि यह हिट महत्वपूर्ण होगी, अगले महत्वपूर्ण हिट होने तक घुमावों की संख्या को यादृच्छिक करने की कोशिश करें। उदाहरण के लिए, खिलाड़ी के क्रिटिकल होने पर हर बार 2 और 9 के बीच एक नंबर चुनें, और उसके बाद उन्हें अपना अगला क्रिटिकल दें। आप सामान्य वितरण के करीब पहुंचने के लिए पासा विधियों का भी उपयोग कर सकते हैं - उदाहरण के लिए, आपको 2 डी 4 टर्न में अपना अगला महत्वपूर्ण मिलेगा।

मेरा मानना ​​है कि इस तकनीक का उपयोग आरपीजी में किया जाता है जो ओवरवर्ल्ड में यादृच्छिक मुठभेड़ों के साथ-साथ आप एक कदम काउंटर को यादृच्छिक करते हैं, और उसके बाद कई चरणों में, आप फिर से हिट हो जाते हैं। यह एक बहुत अधिक उचित लगता है क्योंकि आप लगभग कभी भी एक पंक्ति में दो मुकाबलों में नहीं आते - यदि ऐसा एक बार भी होता है, तो खिलाड़ी चिड़चिड़े हो जाते हैं।


मुझे लगता है कि यह महान समाधान है, लेकिन लगभग 80% संभावना क्या है?
विचारक

मुझे कई बार बहुआयामी यादृच्छिक जनरेटर का उपयोग करना पसंद है। हिट करने की संभावना + शक्ति के लिए मौका + महत्वपूर्ण के लिए संभावना। जैसे डी एंड डी में कई अलग-अलग पासे को रोल करते हैं
मैथ्यू Whited

मुझे यह विचार पसंद है, और आप स्टेप काउंटर चीज़ के बारे में पूरी तरह से सही हैं, इसका उपयोग अंतिम कल्पना में बहुत लंबे समय के लिए किया जाता है, उदाहरण के लिए
एड जेम्स

इसके साथ एक समस्या यह है कि यह केवल तभी काम करता है जब हिट के बीच किसी महत्वपूर्ण की संभावना लगभग स्थिर हो। मान लीजिए कि मध्य-युद्ध में खिलाड़ी एक स्पेल डालता है जो एक महत्वपूर्ण हिट की संभावना को दोगुना कर देता है। फिर आप घुमावों की संख्या को कैसे समायोजित करते हैं?
183 बजे एलेक्स 319

+1 बहुत अच्छा, 20% की तुलना में बहुत आसानी से कम-से-हिट संभावनाएं भी संभालता है।
ऐलिस परसेल

53

सबसे पहले, "उचित" वितरण को परिभाषित करें। यादृच्छिक संख्याएँ, अच्छी तरह से, यादृच्छिक - आपके द्वारा देखे जा रहे परिणाम पूरी तरह से (छद्म) यादृच्छिकता के अनुरूप हैं।

इस पर विस्तार करते हुए, मुझे लगता है कि आप जो चाहते हैं वह "निष्पक्षता" की कुछ भावना है, इसलिए उपयोगकर्ता एक सफलता के बिना 100 मोड़ नहीं जा सकता है। यदि ऐसा है, तो मैं अंतिम सफलता के बाद से विफलताओं की संख्या पर नज़र रखूंगा, और उत्पन्न परिणाम का वजन करूंगा। मान लेते हैं कि आपको "सफल" होने के लिए 5 में से 1 रोल चाहिए। तो आप बेतरतीब ढंग से 1 से 5 तक एक संख्या उत्पन्न करते हैं, और यदि यह 5 है, तो महान।

यदि नहीं, तो विफलता रिकॉर्ड करें, और अगली बार, 1 से 5 तक एक संख्या उत्पन्न करें, लेकिन कहते हैं, फर्श (संख्या 2) पर जोड़ें। इसलिए इस बार फिर से उनके पास 5 में से 1 मौका है। यदि वे असफल होते हैं, तो अगली बार विजेता अंतराल 4 और 5 होता है; सफलता के 2 5 मौके। इन विकल्पों के साथ, 8 असफलताओं के बाद, उनका सफल होना निश्चित है।


उस नोट पर ... यादृच्छिक संख्या की श्रेणी वितरण को प्रभावित करेगी ... उदाहरण के लिए रैंडम आर = नया रैंडम () चुनना; r.Next (1,5) बनाम r.Next (1, 1000000)% 200000
इयोन कैंपबेल

23
ओपी को गलत बताने के बजाय अनुरोध के पीछे की समस्या को देखने के लिए +1 वह गलत समझता है।
बोरिस

4
ध्यान दें कि यदि आप ऐसा करते हैं, तो उनकी सफलताओं का कुल अनुपात 1 से 5 से अधिक होगा। इसके चारों ओर एक तरीका है (उदाहरण के लिए) 1..100 की सीमा से यादृच्छिक पर 20 अलग-अलग संख्याओं का चयन करें, और पूर्व निर्धारित करें कि वे करेंगे उनके आलोचक बनो। यह एक गुच्छा अधिक बहीखाता है, हालांकि।
स्टीव जेसोप

"5 में 1 से अधिक होगा" - लंबी अवधि में होने की उम्मीद है, मेरा मतलब है।
स्टीव जेसोप

आप शुरुआती संभाव्यता को थोड़ा कम कर सकते हैं, ताकि समग्र अनुपात 1/5 हो जाए। मैंने इस पर काम नहीं किया है कि आपको इसे कितना कम करना है, लेकिन सब कुछ निरंतर है इसलिए एक सही उत्तर होना चाहिए।
स्टीव जेसोप

35

इस तरह से कुछ के साथ mt_rand () को बदलने के बारे में कैसे?

XKCD कॉमिक (RFC 1149.5 मानक IEEE-vetted यादृच्छिक संख्या के रूप में 4 निर्दिष्ट करता है।)

(RFC 1149.5 मानक IEEE-vetted यादृच्छिक संख्या के रूप में 4 निर्दिष्ट करता है।)

से xkcd


एक अच्छा है, लेकिन क्या यह ओपी यादृच्छिक संख्या वितरण समस्या को हल करेगा? ;-)
अर्जन ईनबू

ज़रुरी नहीं; वह एक गैर-यादृच्छिक आरएनजी के लिए पूछ रहा है, जिसके लिए वह इस फ़ंक्शन का उपयोग कर सकता है; लेकिन जो वह वास्तव में चाहता है उसे वर्तमान शीर्ष उत्तर ( stackoverflow.com/questions/910215/910224#910224 ) द्वारा समझाया गया है
कॉलिन पिकार्ड

28
यह ओपी चाहता है की तुलना में अधिक यादृच्छिक है
şağdaş Tekin

-1 क्योंकि RFC1149 का कोई खंड 5 नहीं है (और वैकल्पिक रूप से, कोई 1149.5 नहीं है); निष्पक्ष यादृच्छिकता के लिए +1।
ग्रेफेड

34

उम्मीद है कि यह लेख आपकी सहायता करेगा: http://web.archive.org/web/20090103063439/http://www.gamedev.net:80/reference/design/features/randomness/

आरपीजी / mmorpg गेम में 'रैंडम नंबर' जेनरेट करने का यह तरीका आम है।

यह हल करती है समस्या यह है (निकालें):

एक ब्लेड मकड़ी आपके गले में है। यह हिट होता है और आप मिस करते हैं। यह फिर से हिट होता है और आप फिर से याद करते हैं। और बार-बार, जब तक कि आपके पास हिट करने के लिए कुछ नहीं बचा हो। आप मर चुके हैं और आपकी लाश पर दो टन का एक मोहरा है। असंभव? नहीं? हाँ। लेकिन पर्याप्त खिलाड़ियों को देखते हुए और पर्याप्त समय दिए जाने से, अयोग्य लगभग निश्चित हो जाता है। यह नहीं था कि ब्लेड स्पाइडर कठिन था, यह सिर्फ दुर्भाग्य था। कितनी निराशा होती है। एक खिलाड़ी को छोड़ना चाहते हैं बनाने के लिए यह पर्याप्त है।


1
मैंने इस पर एक संस्करण सुना है - "एक लाख की घटना में दुनिया की आबादी में 6,000 बार होता है"।
ceejayoz

19

आप जो चाहते हैं, वह रैंडम संख्या नहीं है, लेकिन वे संख्याएं जो मानव को यादृच्छिक लगती हैं। अन्य ने पहले ही व्यक्तिगत एल्गोरिदम का सुझाव दिया है, जो आपकी मदद कर सकता है, जैसे कि शफल बैड।

इस डोमेन के अच्छे विस्तृत और व्यापक विश्लेषण के लिए AI गेम प्रोग्रामिंग विजडम 2 देखें । पूरी पुस्तक किसी भी गेम डेवलपर के लिए पढ़ने लायक है, "प्रतीत होता है यादृच्छिक संख्या" का विचार अध्याय में संभाला गया है:

ऐ निर्णय और गेम लॉजिक के लिए फ़िल्टर की गई यादृच्छिकता :

सार: पारंपरिक ज्ञान बताता है कि बेहतर यादृच्छिक संख्या जनरेटर, आपका खेल जितना अप्रत्याशित होगा। हालांकि, मनोविज्ञान के अध्ययनों के अनुसार, अल्पावधि पर सच्ची यादृच्छिकता अक्सर मनुष्यों के लिए निश्चित रूप से अप्रकाशित दिखती है। यह लेख दिखाता है कि कैसे यादृच्छिक एआई निर्णय और गेम लॉजिक खिलाड़ियों को अधिक यादृच्छिक दिखता है, जबकि अभी भी मजबूत सांख्यिकीय यादृच्छिकता बनाए रखता है।

आपको एक और अध्याय भी दिलचस्प लग सकता है:

यादृच्छिक संख्या के आँकड़े

सार: रैंडम नंबर का उपयोग आर्टिफिशियल इंटेलिजेंस और सामान्य रूप से गेम द्वारा सबसे अधिक किया जाता है। उनकी क्षमता को नजरअंदाज करने के लिए खेल को पूर्वानुमान और उबाऊ बनाना है। इनका गलत तरीके से इस्तेमाल करना उतना ही बुरा हो सकता है जितना कि उन्हें सीधे तौर पर नजरअंदाज करना। यह समझना कि यादृच्छिक संख्याएँ कैसे उत्पन्न होती हैं, उनकी सीमाएँ और उनकी क्षमताएं, उन्हें आपके खेल में उपयोग करने की कई कठिनाइयों को दूर कर सकती हैं। यह लेख यादृच्छिक संख्याओं, उनकी पीढ़ी, और अच्छे लोगों को बुरे से अलग करने के लिए अंतर्दृष्टि प्रदान करता है।


8

निश्चित रूप से किसी भी यादृच्छिक संख्या पीढ़ी के पास ऐसे रन बनाने का मौका है? आपको उचित प्रतिशत देखने के लिए 3-10 रोल में एक बड़ा पर्याप्त नमूना सेट नहीं मिलेगा।

हो सकता है कि आप जो चाहते हैं वह एक दया दहलीज हो ... अंतिम 10 रोल याद रखें, और यदि उनके पास कोई महत्वपूर्ण हिट नहीं है, तो उन्हें फ्रीबी दें। यादृच्छिकता के स्लिंग और तीर को चिकना करें।


8

आपका सबसे अच्छा समाधान कई अलग - अलग गैर- यादृच्छिक योजनाओं के साथ खेल-परीक्षण हो सकता है और उस खिलाड़ी को चुनना चाहिए जो खिलाड़ियों को सबसे अधिक खुश करता है।

आप किसी दिए गए मुठभेड़ में एक ही नंबर के लिए बैक-ऑफ पॉलिसी भी आज़मा सकते हैं, उदाहरण के लिए, यदि कोई खिलाड़ी 1अपनी पहली बारी पर रोल स्वीकार करता है तो उसे स्वीकार करें। एक और पाने के लिए 1उन्हें 1एक पंक्ति में 2 एस रोल करने की आवश्यकता है । एक तिहाई प्राप्त करने के लिए 1उन्हें एक पंक्ति में 3, विज्ञापन इन्फिनिटम की आवश्यकता होती है।


7

दुर्भाग्य से आप जो पूछ रहे हैं वह प्रभावी रूप से एक गैर-यादृच्छिक संख्या जनरेटर है - क्योंकि आप चाहते हैं कि अगले परिणाम निर्धारित करते समय पिछले परिणामों को ध्यान में रखा जाए। यह नहीं है कि कैसे यादृच्छिक संख्या जनरेटर मैं डर रहा हूँ काम करते हैं।

अगर आप चाहते हैं कि हर 5 हिट में से 1 हिट क्रिटिकल हो तो बस 1 और 5 के बीच नंबर चुनें और कहें कि हिट एक क्रिटिकल होगा।


1
वह गेम फ्रेंडली रैंडम चाहता है, अगर आप कुछ मामलों में सख्त रैंडम जेनरेट किए गए नंबरों का इस्तेमाल करते हैं, तो आपको "कोरियाई रैंडम" परिणाम मिलते हैं। वे यादृच्छिक परिणाम हैं जो खिलाड़ियों को गुस्सा करते हैं और बहुत बार निराश हो जाते हैं (किसी भी वंश 2 खिलाड़ी से पूछें);)
जुआन टेचेरा

नतीजतन, अगर पहली हिट एक क्रिट है, तो अगले चार नहीं होंगे। यह इस तरह से ध्वनि करता है जैसे ओपी चाहता है, लेकिन जब आप इसे इस तरह से बोलते हैं, तो यह धीमा लगता है। आप इसके लिए मेरी यूवी प्राप्त करें।
belgariontheking

-1 आप "मेमोरीलेस" के साथ "यादृच्छिक" को भ्रमित करते हुए दिखाई देते हैं - en.wikipedia.org/wiki/Memorylessness
ऐलिस पर्ससेल

7

mt_rand () Mersenne ट्विस्टर कार्यान्वयन पर आधारित है , जिसका अर्थ है कि यह आपको मिलने वाले सबसे अच्छे यादृच्छिक वितरणों में से एक है।

जाहिरा तौर पर आप जो चाहते हैं, वह यादृच्छिकता बिल्कुल नहीं है, इसलिए आपको वही निर्दिष्ट करना शुरू करना चाहिए जो आप चाहते हैं। आपको शायद एहसास होगा कि आपके पास परस्पर विरोधी अपेक्षाएं हैं - कि परिणाम थोड़े यादृच्छिक होना चाहिए और पूर्वानुमान नहीं होना चाहिए, फिर भी एक ही समय में उन्हें बताई गई संभावना से स्थानीय भिन्नताओं का प्रदर्शन नहीं करना चाहिए - लेकिन फिर यह पूर्वानुमान योग्य हो जाता है। यदि आप एक पंक्ति में अधिकतम 10 गैर-आलोचकों को सेट करते हैं, तो आपने खिलाड़ियों को सिर्फ "यदि आपने 9 गैर-आलोचकों को पंक्ति में बताया है, तो अगला 100% निश्चितता के साथ महत्वपूर्ण होगा" - आप के रूप में हो सकता है अच्छी तरह से यादृच्छिकता के साथ बिल्कुल परेशान नहीं है।


6

इतनी कम संख्या में परीक्षण से आपको इस तरह के परिणाम की उम्मीद करनी चाहिए:

सच्ची यादृच्छिकता केवल एक विशाल सेट आकार पर अनुमानित है, जैसे कि एक सिक्के को फ्लिप करना और पहली बार एक पंक्ति में 3 बार सिर प्राप्त करना संभव है, हालांकि कुछ मिलियन फ़्लिप पर आप लगभग 50-50 के साथ समाप्त हो जाएंगे।


7
हालांकि अभी भी एक मौका है कि कुछ मिलियन फ़्लिप के बाद, आपने अभी भी सिक्के का केवल एक ही पक्ष देखा होगा। हालांकि अगर ऐसा कभी होता है, तो आप शायद एक असीम असंभव ड्राइव के बहुत करीब बैठे हैं: P
अनुदान पीटर्स

हाहा, हाँ, लेकिन मौका इतना अविश्वसनीय रूप से कम है कि गणित के नियम कहते हैं कि आपको एक (ईश) वितरण देखना चाहिए।
एड जेम्स

6

मुझे पहले से तैयार की गई संख्याओं पर नज़र रखने या सभी संभावित मूल्यों में फेरबदल करने का सुझाव देने वाले बहुत सारे उत्तर दिखाई देते हैं।

व्यक्तिगत रूप से, मैं सहमत नहीं हूं, कि एक पंक्ति में 3 संकट खराब हैं। न ही मैं इस बात से सहमत हूं कि एक पंक्ति में 15 गैर-आलोचक बुरे हैं।

मैं समस्या को हल करूँगा, प्रत्येक संख्या के बाद, स्वयं को समालोचना के अवसर को संशोधित करके। उदाहरण (विचार प्रदर्शित करने के लिए):

int base_chance = 20;
int current_chance = base_chance;

int hit = generate_random_number(0, 100) + 1; // anything from 1 to 100
if(hit < current_chance)//Or whatever method you use to check
{
    //crit!
    if(current_chance > base_chance)
        current_chance = base_chance; // reset the chance.
    else
        current_chance *= 0.8; // decrease the crit chance for the NEXT hit.
}
else
{
    //no crit.
    if(current_chance < base_chance)
        current_chance = base_chance; // reset the chance.
    else
        current_chance *= 1.1; // increase the crit chance for the NEXT hit.
    //raise the current_chance
}

अब आपको एक क्रिट नहीं मिलता है - आपके पास अपनी अगली कार्रवाई के लिए उच्च संभावना है। मेरे द्वारा शामिल किया गया रीसेट पूरी तरह से वैकल्पिक है और यह बताने के लिए परीक्षण की आवश्यकता होगी कि क्या इसकी आवश्यकता है या नहीं। लंबे समय तक गैर-क्रिट एक्शन चेन के बाद एक पंक्ति में एक से अधिक कार्रवाई के लिए एक क्रिट की उच्च संभावना देना वांछनीय हो सकता है या नहीं भी हो सकता है।

बस मेरे 2 सेंट में फेंक ...


मुझे इस तरह का दृष्टिकोण पसंद है। मैं शायद इसे दूसरी तरह से करूंगा। कम मौके से शुरू करें और हिट होने तक अधिकतम 20% + कुछ अतिरिक्त प्रतिशत का निर्माण करें और कुछ कम राशि पर फिर से रीसेट करें।
मैथ्यू

5

शीर्ष कुछ उत्तर महान स्पष्टीकरण हैं, इसलिए मैं केवल एक एल्गोरिथ्म पर ध्यान केंद्रित करूंगा जो आपको नियतात्मक नहीं बनने के दौरान "खराब लकीरों" की संभावना पर नियंत्रण देता है । यहाँ मुझे लगता है कि आपको क्या करना चाहिए:

पी निर्दिष्ट करने के बजाय , एक बर्नौली वितरण का पैरामीटर, जो एक महत्वपूर्ण हिट की संभावना है, एक और बी निर्दिष्ट करें , बीटा वितरण के पैरामीटर, बर्नौली वितरण के "संयुग्म पूर्व"। आपको और बी का ट्रैक रखने की आवश्यकता है , अब तक की महत्वपूर्ण और गैर-महत्वपूर्ण हिट की संख्या।

अब, a और b को निर्दिष्ट करने के लिए , यह सुनिश्चित करें कि / a (a + b) = p, महत्वपूर्ण हिट का मौका। साफ-सुथरी बात यह है कि (ए + बी) यह निर्धारित करता है कि आप ए / (ए + बी) को कितना करीब रखना चाहते हैं।

आप अपना नमूना इस तरह करते हैं:

p(x)बीटा वितरण की संभाव्यता घनत्व कार्य होने दें । यह कई स्थानों पर उपलब्ध है, लेकिन आप इसे जीएसएल में gsl_ran_beta_pdf के रूप में पा सकते हैं।

S = A+B+1
p_1 = p((A+1)/S)
p_2 = p(A/S)

संभावना p_1 / (p_1 + p_2) के साथ बर्नौली वितरण से नमूना करके एक महत्वपूर्ण हिट चुनें

यदि आप पाते हैं कि यादृच्छिक संख्याओं में बहुत अधिक "खराब लकीरें" हैं, तो a और b को बड़ा किया जा सकता है , लेकिन सीमा में, a और b अनंत तक जाते हैं, आपके पास पहले से वर्णित फेरबदल बैग दृष्टिकोण होगा।

यदि आप इसे लागू करते हैं, तो कृपया मुझे बताएं कि यह कैसे चलता है!


5

यदि आप एक ऐसा वितरण चाहते हैं जो दोहराए गए मूल्यों को हतोत्साहित करता है, तो आप एक साधारण दोहराव अस्वीकृति एल्गोरिथ्म का उपयोग कर सकते हैं।

जैसे

int GetRand(int nSize)
{
    return 1 + (::rand() % nSize);
}
int GetDice()
{
    static int nPrevious=-1;
    while (1) {
        int nValue = GetRand(6);
        // only allow repeat 5% of the time
        if (nValue==nPrevious && GetRand(100)<95)
            continue;
        nPrevious = nValue;
        return nValue;
    }
}

यह कोड बार-बार होने वाले 95% मूल्यों को दोहराता है, दोहराता है लेकिन असंभव नहीं है। सांख्यिकीय रूप से यह थोड़ा बदसूरत है, लेकिन यह संभवतः आपके इच्छित परिणाम उत्पन्न करेगा। बेशक, यह "5 4 5 4 5" जैसे वितरण को नहीं रोकेगा। आप कट्टर हो सकते हैं और दूसरे अंतिम (कहते हैं) को 60% समय और तीसरे अंतिम (कहते हैं) को 30% अस्वीकार कर सकते हैं।

मैं इसे अच्छे गेम डिज़ाइन के रूप में अनुशंसित नहीं कर रहा हूँ। बस यह सुझाव देना कि आप क्या चाहते हैं।


मेरे खेल के कुछ मूल्यों जैसे क्रिटिकल हिट में 50% से अधिक का मौका नहीं हो सकता है, इसलिए मैं सभी को दोहरा रहा हूं, लेकिन कुछ पर्चों के लिए इस घटना की संभावना कम है।
विचारक

4

यह वास्तव में स्पष्ट नहीं है कि आप क्या चाहते हैं। ऐसा फ़ंक्शन बनाना संभव है, जिसे पहले 5 बार आप कॉल करते हैं, यह क्रमबद्ध क्रम में 1-5 नंबर देता है।

लेकिन यह वास्तव में यादृच्छिक नहीं है। खिलाड़ी को पता चल जाएगा कि वह अगले 5 हमलों में ठीक एक 5 पाने जा रहा है। यह वही हो सकता है जो आप चाहते हैं, और उस स्थिति में, आपको बस इसे स्वयं कोड करना होगा। (संख्या युक्त एक सरणी बनाएं और फिर उन्हें फेरबदल करें)

वैकल्पिक रूप से, आप अपने वर्तमान दृष्टिकोण का उपयोग कर सकते हैं, और मान सकते हैं कि आपके वर्तमान परिणाम खराब रैंडम जनरेटर के कारण हैं। ध्यान दें कि आपके वर्तमान नंबरों में कुछ भी गलत नहीं हो सकता है। यादृच्छिक मूल्य यादृच्छिक हैं। कभी-कभी आपको एक पंक्ति में समान मूल्य के 2, 3 या 8 मिलते हैं। क्योंकि वे यादृच्छिक हैं। एक अच्छा यादृच्छिक जनरेटर बस गारंटी देता है कि औसतन, सभी संख्याओं को समान रूप से अक्सर वापस किया जाएगा।

बेशक अगर आप एक खराब रैंडम जनरेटर का उपयोग कर रहे हैं, तो हो सकता है कि यह आपके परिणामों को कम कर दे, और यदि ऐसा है, तो बस एक बेहतर यादृच्छिक जनरेटर पर स्विच करने से समस्या को ठीक करना चाहिए। (बेहतर जनरेटर के लिए Boost.Random पुस्तकालय की जाँच करें)

वैकल्पिक रूप से, आप अपने यादृच्छिक फ़ंक्शन द्वारा लौटे अंतिम एन मानों को याद रख सकते हैं, और उन लोगों द्वारा परिणाम का वजन कर सकते हैं। (एक सरल उदाहरण होगा, "नए परिणाम की प्रत्येक घटना के लिए, 50% संभावना है कि हम मूल्य को त्याग दें और एक नया परिणाम प्राप्त करें"

अगर मुझे अनुमान लगाना था, तो मैं कहूंगा कि "वास्तविक" यादृच्छिकता के साथ चिपके रहना आपकी सबसे अच्छी शर्त है। सुनिश्चित करें कि आप एक अच्छा यादृच्छिक जनरेटर का उपयोग करते हैं, और फिर जिस तरह से आप इसे अभी कर रहे हैं, उसे जारी रखें।


दरअसल, वह जिस फ़ंक्शन का उपयोग कर रहा है, वह बूस्ट लाइब्रेरी में सर्वश्रेष्ठ आरएनजी के समान है।
माइकल बोर्गवर्ड

MT "सर्वश्रेष्ठ" नहीं है, अंतिम बार मैंने जाँच की थी। यह अच्छा, सरल और तेज़ है, लेकिन यह सर्वोत्तम वितरण नहीं करता है। वैसे भी, एक लाख यादृच्छिक संख्याओं को पकड़ो और वितरण की जांच करें। पता लगाएँ कि क्या आपका यादृच्छिक कार्य वास्तव में आपको एक समान वितरण देता है या नहीं। यदि ऐसा नहीं होता है, तो बेहतर जनरेटर खोजें। यदि ऐसा होता है, या तो इसे चूसो और आलोचकों की सामयिक पंक्ति को स्वीकार करो, या धोखा दो और परिणामों को कम यादृच्छिक और अधिक पूर्वानुमान बनाओ ।
जल्फ

4

आप 1 से 5 तक की संख्या वाली एक सूची बना सकते हैं, और उन्हें यादृच्छिकता द्वारा क्रमबद्ध कर सकते हैं। फिर बस आपके द्वारा बनाई गई सूची पर जाएं। आपके पास कम से कम एक बार हर नंबर पर चलने की गारंटी है ... जब आप पहले 5 से गुजरते हैं, तो बस एक और 5 नंबर बनाएं ...


4

मैं बर्फ़ीले तूफ़ान जैसे प्रगतिशील प्रतिशत प्रणाली की सलाह देता हूं: http://www.shacknews.com/onearticle.x/57886

आम तौर पर आप एक आरएनजी को रोल करते हैं, फिर यह निर्धारित करने के लिए मान की तुलना करें कि क्या सफल हुआ या नहीं। ऐसा लग सकता है:

if ( randNumber <= .2 ) {
   //Critical
} else {
   //Normal
}

आपको बस इतना करना है कि आधार के अवसर में उत्तरोत्तर वृद्धि हो ...

if (randNumber <= .2 + progressiveChance ) {
   progressiveChance = 0;
   //Critical
} else {
   progressiveChance += CHANCE_MODIFIER;
   //Normal hit
}

यदि आपको अधिक फैंसी होने की आवश्यकता है तो इसे और अधिक जोड़ना बहुत आसान है। आप उस राशि को कैप कर सकते हैं जो प्रगतिशील क्रेडिट 100% महत्वपूर्ण अवसर से बचने या कुछ घटनाओं पर रीसेट करने के लिए मिल सकती है। आप प्रगतिशील मात्रा में भी प्रगतिशील वृद्धि कर सकते हैं, प्रत्येक को प्रगतिशील के साथ कुछ बढ़ा सकते हैं जैसे = (1 - प्रगतिशीलचैन्स) * स्कैले जहां स्कैले <1।


4

ठीक है, अगर आप थोड़ा गणित में हैं, तो आप संभवतः घातीय वितरण की कोशिश कर सकते हैं

उदाहरण के लिए, यदि लैम्ब्डा = 0.5, अपेक्षित मान 2 है (उस लेख को पढ़ें!), जिसका अर्थ है कि आप शायद सबसे अधिक हिट / क्रिट / जो भी हर 2 टर्न (जैसे 50%, हुह?)। लेकिन इस तरह की संभावना वितरण के साथ, आप निश्चित रूप से 0 वें मोड़ पर (या जो कुछ भी विपरीत है) को मिस करेंगे (एक, जिसमें घटना पहले से ही घट गई थी और टर्न_काउंटर को रीसेट कर दिया गया था), अगले मोड़ पर हिट करने के लिए 40% मौका पसंद है, लगभग 65% यह करने के लिए मौका 2 (अगले के बाद अगले) बारी, 3 जी और इतने पर हिट करने के लिए लगभग 80%।

उस वितरण का पूरा उद्देश्य यह है कि यदि किसी के पास 50% हिट का मौका है और वह लगातार 3 बार चूकता है, तो वह शर्मीली (अच्छी तरह से, 80% से अधिक मौका देता है, और यह हर अगले मोड़ पर) हिट करता है। यह अधिक "निष्पक्ष" परिणामों की ओर जाता है, 50% की संभावना को अपरिवर्तित रखता है।

आपके पास 20% समालोचना का मौका है, आपके पास है

  • १% क्रिट १ बारी
  • 32% क्रिट 2 टर्न टर्न, यदि कोई क्रिट पिछले सभी में नहीं होता है।
  • अगर कोई क्रिट सभी पिछले वाले में नहीं आता है, तो क्राइट 3 जी मोड़ के लिए 45%।
  • ५४% क्राइट ४ टर्न, अगर कोई क्रिट पिछले सभी में नहीं होता है।
  • ...
  • 8% मोड़ के लिए 80%, यदि कोई पिछले सभी में क्रिट नहीं होता है।

यह अब भी लगभग ५.२% (उन ५%) ३ परिणाम + २ गैर-आलोचकों को ५ परिणामी मोड़ देता है। और 4 परिणामी गैर-आलोचकों का 14% मौका है, 5 का 5%, 6 के लिए 1.5%, 7 के लिए 0.3%, 8 परिणामी गैर-आलोचकों के लिए 0.07% है। मैंने इसकी "अधिक उचित" 41%, 32%, 26%, 21% और 16% से अधिक शर्त लगाई।

आशा है कि आप अभी भी मृत्यु से ऊब नहीं हैं।


यह मेरे समाधान के समान सुंदर है, सिवाय इसके कि यह अंतिम महत्वपूर्ण हिट के बाद से केवल "याद" है। इस समाधान के तहत, 4 क्रिटिकल हिट्स की एक स्ट्रिंग, 1 क्रिटिकल हिट्स की एक स्ट्रिंग है, जहाँ तक भविष्य के बारे में संभावनाएँ हैं। इसलिए, यदि महत्वपूर्ण हिट अच्छे हैं, तो यह समाधान आपके नकारात्मक जोखिम को सीमित करता है, लेकिन आपका उल्टा नहीं। मेरा समाधान दोनों को प्रभावित करता है।
नील जी

यह स्पष्ट है कि विभिन्न समाधानों के अपने फायदे हैं। यह विज्ञान के दृष्टिकोण से यादृच्छिकता को साफ रखने पर केंद्रित है। इसका मतलब यह नहीं है, कि यह किसी भी तरह से बेहतर है, फेरबदल बैग या कुछ और से। यह सिर्फ एक समाधान है जो कोशिश करने के लायक लगता है।
डार्क

3

आलोचनात्मक संयोग बनाने के बारे में अंतिम N हमलों पर क्या निर्भर करता है। एक सरल योजना कुछ प्रकार की मार्कोव श्रृंखला है: http://en.wikipedia.org/wiki/Markov_chain लेकिन कोड वैसे भी बहुत सरल है।


IF turns_since_last_critical < M THEN 
   critial = false
   turns_since_last_critical++;
ELSE
   critial = IsCritical(chance);
   IF Critial THEN
       turns_since_last_critica = 0;
   ELSE
       turns_since_last_critica++;
   END IF;
END IF;

निश्चित रूप से आपको अपना गणित बनाना चाहिए क्योंकि महत्वपूर्ण की संभावना एक महत्वपूर्ण की संभावना से कम होती है, जब आप जानते हैं कि यह पिछले एक के बाद से काफी बदल गया है


आप केवल आखिरी हमले को ध्यान में रखते हुए अधिकांश प्रभाव प्राप्त करते हैं। बता दें कि P, एक हिट के बाद R हिट दर और R / 2 हिट के बाद हिट दर है। परिभाषा के अनुसार, किसी भी बिंदु पर आपके पास P = P * R + (1-P) * (R / 2) को हिट करने का मौका होता है। इसका अर्थ है पी = आर / (2-आर)
MSalters

2

ओपी,

बहुत ज्यादा, अगर आप चाहते हैं कि यह उचित हो, तो इसका यादृच्छिक होना नहीं है।

आपके गेम की समस्या मैच की वास्तविक लंबाई है। यह मैच जितना लंबा होगा, उतनी कम यादृच्छिकता जो आप देखने जा रहे हैं (आलोचकों को 20% की दरकार होगी) और इसके लिए अपने इच्छित मूल्यों से संपर्क करना होगा।

आपको दो विकल्प मिले, पिछले रोल के आधार पर हमलों की पूर्व-गणना करें। जो आपको हर 5 हमलों (आपके 20% के आधार पर) पर एक क्रिट मिलेगा, लेकिन आप क्रम को यादृच्छिक बना सकते हैं।

listOfFollowingAttacks = {हिट, हिट, हिट, मिस, क्रिट};

यही पैटर्न आप चाहते हैं। इसलिए इसे सूची से बेतरतीब ढंग से चुनें, जब तक कि इसके खाली होने तक, वे इसे फिर से न बना लें।

यह एक पैटर्न है जिसे मैंने अपने खेल के लिए बनाया है, यह काफी अच्छी तरह से काम करता है, जो मैं करना चाहता हूं।

आपका दूसरा विकल्प, यह होगा कि, आलोचना करने का मौका बढ़ाएं, आप संभवतः सभी हमलों के अंत में एक और भी अधिक संख्या देख सकते हैं (यह मानते हुए कि आपके मैच जल्दी समाप्त होते हैं)। कम% मौका, अधिक RNG'd आपको मिलेगा।


2

आप एक रेखीय वितरण को देख रहे हैं, जब आप शायद सामान्य वितरण चाहते हैं।

यदि आप डी एंड डी खेल रहे अपने युवाओं में वापस याद करते हैं, तो आपको कई एन-साइडेड मर रोल करने के लिए कहा गया था, फिर परिणाम का योग करें।

उदाहरण के लिए, 4 x 6-पक्षीय रोल को रोल करना 1 x 24-पक्षीय पासा को रोल करने से अलग है।


2

सिटी ऑफ हीरोज में वास्तव में "स्ट्रीकब्रेकर" नामक एक मैकेनिक होता है जो इस समस्या को हल करता है। जिस तरह से यह काम करता है वह यह है कि स्ट्रिंग में सबसे कम-हिट संभावना के साथ संबंधित लंबाई की एक स्ट्रिंग की याद आती है, अगले हमले को हिट होने की गारंटी है। उदाहरण के लिए यदि आप मौका मारने के लिए 90% से अधिक के साथ एक हमले को याद करते हैं तो आपका अगला हमला ऑटो हिट होगा, लेकिन यदि आपका हिट मौका 60% की तरह कम है तो आपको "स्ट्रीकब्रेकर" (I सटीक संख्या नहीं जानते)


2

वैकल्पिक शब्द

यह वास्तव में अनुमानित है ... लेकिन आप कभी भी निश्चित नहीं हो सकते।


यह मेरा डेस्कटॉप वॉलपेपर होना चाहिए !!

0

कैसे मूल्य भार के बारे में?

उदाहरण के लिए, यदि आपके पास महत्वपूर्ण हिट के लिए 20% मौका है, तो 1 और 5 के बीच एक संख्या उत्पन्न करें जिसमें एक नंबर एक महत्वपूर्ण हिट का प्रतिनिधित्व करता है, या 1 और 100 के बीच की संख्या 20 संख्याओं के साथ एक महत्वपूर्ण हिट है।

लेकिन जब तक आप यादृच्छिक या छद्म आयामी संख्या के साथ काम कर रहे हैं, तब तक संभावित रूप से उन परिणामों से बचने का कोई तरीका नहीं है जो आप वर्तमान में देख रहे हैं। यह यादृच्छिकता की प्रकृति है।


और इससे कोई फर्क क्यों पड़ेगा? दोनों संख्याओं के लिए क्रिटिकल होने की समान संभावना है।
samjudson

बिल्कुल सही। मैं उसके 20% उदाहरण के लिए सिर्फ दो विकल्प प्रस्तुत कर रहा हूं। यद्यपि 100 शायद बेहतर काम करेंगे यदि आप पूरे नंबर प्रतिशत के साथ काम कर रहे हैं, क्योंकि आपको केवल एक "डाई" का अनुकरण करने की आवश्यकता होगी, यदि आप इस तरह से सोचना चाहते हैं।
थॉमस ओवेन्स

आपके द्वारा प्रस्तुत किए जा रहे विकल्प ठीक वही हैं जो वह पहले से कर रहा है।
सिजयोज़

2
उसके लिए नहीं जो वह चाहता है। वह एक गैर-यादृच्छिक संख्या जनरेटर चाहता है, भले ही वह सोचता हो कि यादृच्छिक संख्या जनरेटर कहा जाता है।
ceejayoz

0

प्रतिक्रिया पर: "समस्या यह है कि मुझे बहुत खराब वास्तविक जीवन परिणाम मिले हैं - कभी-कभी खिलाड़ियों को 5 हिट में 3 क्रिट मिलते हैं, कभी-कभी 15 हिट में से कोई भी नहीं।"

आपके पास 15 हिट में कुछ भी नहीं पाने के बीच 3 और 4% का मौका है ...


जब आप 3500 खिलाड़ियों को एक मिनट में 10000 लड़ते हुए ऑनलाइन लड़ते हैं, तो 3% लड़ाइयों में होने वाली समस्या बहुत आम समस्या है।
विचारक

फिर, 3% लड़ाइयों में होने वाली बुरी किस्मत अभी भी सिर्फ दुर्भाग्य है।
MSalters 27:09

0

मैं निम्नलिखित का प्रस्ताव "बेतरतीब ढंग से देरी पुटैक मरने" होगा:

  • दो सरणियों को बनाए रखें, एक ( in-array) शुरू में 0 से n-1 तक के मूल्यों से भरा है, दूसरा (out-array ) खाली है
  • जब एक परिणाम का अनुरोध किया जाता है:
    • सभी परिभाषित से एक यादृच्छिक मान लौटाएं मूल्योंin-array
    • से इस मान को स्थानांतरित करें in-array करने के लिएout-array
    • एक यादृच्छिक ( सभी तत्वों से अधिक , अपरिभाषित सहित!) तत्व को out-arrayपीछे से स्थानांतरित करेंin-array

यह संपत्ति है कि यह "प्रतिक्रिया" अधिक धीरे धीरे बड़ा n है। उदाहरण के लिए, यदि आप 20% का मौका चाहते हैं, तो n को 5 पर सेट करना और 0 पर मारना " 10 से कम n को सेट करना और 0 या 1 पर हिट करने की तुलना में" कम यादृच्छिक "है , और इसे 1000 से 0 से 199 करना लगभग समाप्त हो जाएगा। एक छोटे से नमूने पर सत्य यादृच्छिकता से अप्रभेद्य। आपको अपने नमूने के आकार में n को समायोजित करना होगा ।



0

मुझे लगता है कि शायद आप गलत यादृच्छिक वितरण फ़ंक्शन का उपयोग कर रहे हैं। आप शायद संख्याओं पर एक समान वितरण नहीं चाहते हैं। इसके बजाय एक सामान्य वितरण का प्रयास करें ताकि महत्वपूर्ण हिट 'नियमित' हिट से अधिक असामान्य हो जाएं।

मैं जावा के साथ काम करता हूं इसलिए मुझे यकीन नहीं है कि आप सी ++ के लिए कुछ पा सकते हैं जो आपको सामान्य वितरण के साथ यादृच्छिक संख्या देता है, लेकिन वहां कुछ होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.