पारेटो वितरण का नमूना


22

परेटो वितरण एक प्रायिकता वितरण है कि प्रकृति में एक बहुत ऊपर आता है। इसके बहुत सारे विशेष गुण हैं, जैसे कि अनंत साधन। इस चुनौती में, आप इस वितरण से सैंपल लिए गए नंबर को आउटपुट करेंगे।

पारेटो डिस्ट्रीब्यूशन को xप्रायिकता से अधिक या उसके बराबर 1/x, सभी xसे अधिक या 1 के बराबर के लिए परिभाषित किया गया है ।

इसलिए, इस वितरण से प्राप्त एक संख्या संभावना 1 के 1 से अधिक या 1 के बराबर है, 2 से अधिक या 2 के बराबर संभावना के साथ 1/2, अधिक से अधिक या 3 के बराबर संभावना के साथ 1/3, ठीक से अधिक या इसके बराबर है। 11.4 संभावना के साथ ठीक 1 / 11.4, और इसी तरह।

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

(इसे सटीक 1 के लिए अल्फा 1 और लोअर बाउंड 1 के साथ पेरेटो डिस्ट्रीब्यूशन कहा जाता है)

इस वितरण से 10 उदाहरण यहां दिए गए हैं:

1.1540029602790338
52.86156818209856
3.003306506971116
1.4875532217142287
1.3604286212876546
57.5263129600285
1.3139866916055676
20.25125817471419
2.8105749663695208
1.1528212409680156

ध्यान दें कि उनमें से 5 2 से नीचे कैसे हैं, और 5 ऊपर हैं। चूंकि यह औसत परिणाम है, इसलिए यह निश्चित रूप से उच्च या निम्न हो सकता है।

आपके उत्तर को केवल आपके फ़्लोटिंग पॉइंट प्रकार, वास्तविक संख्या प्रकार, या जो भी आप उपयोग करते हैं, की सीमाओं तक सही होना चाहिए, लेकिन आपको कम से कम 3 दशमलव अंकों की सटीकता के साथ संख्याओं का प्रतिनिधित्व करने में सक्षम होना चाहिए, और 1,000,000 तक की संख्याओं का प्रतिनिधित्व करना चाहिए। । यदि आपको यकीन नहीं है कि कुछ ठीक है, तो बेझिझक पूछें।

यह कोड गोल्फ है।


संसेचन के बारे में विवरण:

  • प्रत्येक श्रेणी के लिए [a, b], जहां 1 <= a < b, आदर्श संभावना है कि नमूना उस श्रेणी में आएगा 1/a - 1/b। संभावना है कि अपने कार्यक्रम उस श्रेणी में एक नंबर का उत्पादन के साथ होना चाहिए 0.001की 1/a - 1/b। यदि Xआपके प्रोग्राम का आउटपुट है, तो यह आवश्यक है कि |P(a <= X <= b) - (1/a - 1/b)| < 0.001

  • ध्यान दें कि उपरोक्त नियम को लागू करने a=1और bपर्याप्त रूप से बड़े होने पर, यह मामला है कि आपके कार्यक्रम को कम से कम 0.999 की संभावना के साथ 1 से अधिक या उसके बराबर संख्या में आउटपुट करना चाहिए। बाकी समय यह दुर्घटनाग्रस्त हो सकता है, उत्पादन कर सकता है Infinity, या जो कुछ भी कर सकता है।

मैं काफी हद तक निश्चित है कि फार्म की मौजूदा प्रस्तुतियाँ हूँ 1/1-xया 1/x, जहां xमें एक यादृच्छिक नाव है [0, 1)या (0, 1)या [0, 1], सभी इस आवश्यकता को पूरा।



2
सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं। [टिप्पणी दुरुपयोग के लिए भी खेद है, लेकिन ऐसा तब होगा जब ओपी परिवर्तन पर काफी सवाल
उठाएगा

जवाबों:


6

MATL , 3 बाइट्स

1r/

इसे ऑनलाइन आज़माएं! या परिणामी संभावनाओं का अनुमान लगाकर इसे 10000 बार चलाएं।

व्याख्या

1    % Push 1
r    % Push random number uniformly distributed on the open interval (0,1)
/    % Divide. Implicitly display

ओपी में स्पष्टीकरण और संपादन के बाद, यह जवाब चुनौती के नियमों के अनुरूप है
लुइस मेंडू


5

आर, 10 बाइट्स

1/runif(1)

बहुत सीधा।


2
ध्यान दें कि runif डिफ़ॉल्ट मामले में कभी भी 0 या 1 नहीं लौटाया जाता है ताकि इससे कोई समस्या न हो।
ग्यूसेप

हाँ धन्यवाद। और मैंने इस उत्तर में प्रवेश करते समय इसके बारे में नहीं सोचा था लेकिन यदि आवश्यक हो तो आप वास्तव में वितरण को सत्यापित कर सकते हैं ।
प्लेनैपस

2
@Mego जो गलत है। पेरेटो वितरण बिल्कुल निरंतर है और इस प्रकार किसी भी संख्या के लिए माप 0 है।
थेरेकेल

3
@ मेगो ओके जो मेरे लिए त्वरित हो सकता है (मुझे फ्लोटिंग पॉइंट के बारे में कुछ भी नहीं पता है), लेकिन मुझे वास्तव में लगता है कि जबकि runif1 देने की संभावना शून्य है, 1 देने की संभावना 1/runifफ्लोटिंग पॉइंट सटीकता की वजह से नहीं है ( आम तौर पर 1 / 0.9999999 रिटर्न 1 आर में)।
प्लेनैपस

1
@plannapus हम्म ... यह एक अच्छी बात है। फ़्लोट्स इसे पूरी तरह से बहुत जटिल बनाते हैं।
Mego

4

टीआई-बेसिक, 2 बाइट्स

rand^-1      (AB 0C in hex)

जो कोई भी सोच रहा है, उसके लिए rand(0,1) में एक यादृच्छिक मूल्य देता है। "यादृच्छिक संख्या उत्पन्न करने वाली एल्गोरिदम की बारीकियों के कारण, उत्पन्न करने के लिए संभव छोटी संख्या 0. से थोड़ा अधिक है। सबसे बड़ी संख्या संभव है वास्तव में 1 ... "( स्रोत )। उदाहरण के लिए, 196164532 पैदावार 1 के साथ रैंड बोना।


अजीब बात है, समकक्ष कोड TI-89 श्रृंखला कैलकुलेटर पर काम नहीं करेगा। भले ही उनके यादृच्छिक संख्या जनरेटर कर रहे हैं लगभग हूबहू लागू किया, एक TI-89 0 लौटने जब भी एक TI-83 + .99999999999889 वापसी होगी होगा।
मिशा लावरोव

2
टीआई-बेसिक डेवलपर्स को पहले से पता था कि यह चुनौती होगी ...? लगता है इस बार जीत होगी।
user202729

@ user202729 0 और 1 से बचना randकैलकुलेटर के अन्य कमांड्स के लिए सबरूटीन के रूप में अधिक उपयोगी है, जो शायद इसलिए टीआई ने इस डिजाइन का निर्णय लिया। उदाहरण के लिए, बीज के साथ 196164532 randNorm(0,1रिटर्न -7.02129...। समायोजन के बिना RNG एल्गोरिथ्म का उपयोग करने का एक मूल्य देगा 1e99, जो कि सामान्य रूप से वितरित चर के लिए एक अनुचित मूल्य है।
मिशा लावरोव

@ user202729 हाँ, वास्तव में मेरे पास बस इतना समय है कि इसे पूरा कर लिया जाए। निश्चित रूप से इन upvotes के लिए इसके लायक है।
टिमटेक

4

आर , 12 बाइट्स

exp(rexp(1))

इसे ऑनलाइन आज़माएं!

वितरण सत्यापित करें

यह एक अलग दृष्टिकोण लेता है, इस तथ्य का शोषण करता है कि यदि Y~exp(alpha), तो X=x_m*e^Yमापदंडों के साथ एक पेरेटो है x_m,alpha। चूँकि दोनों पैरामीटर 1 हैं, और डिफ़ॉल्ट दर पैरामीटर rexp1 है, इससे उपयुक्त पारेतो वितरण होता है।

हालांकि यह उत्तर एक काफी R- विशिष्ट दृष्टिकोण है, यह दुख की बात है कि यह प्लेनैपस की तुलना में कम है । '

आर , 14 बाइट्स

1/rbeta(1,1,1)

इसे ऑनलाइन आज़माएं!

यहां तक ​​कि कम गोल्फ, लेकिन जवाब में पाने का एक और तरीका।

घातांक वितरण की एक और संपत्ति यह है कि अगर X ~ Exp(λ) then e^−X ~ Beta(λ, 1), इसलिए 1/Beta(1,1)Pareto(1,1)

इसके अतिरिक्त, एक गहरी पर्यवेक्षक को याद होगा कि अगर X ~ Beta(a,b)और a=b=1फिर X~Unif(0,1), तो यह वास्तव में है 1/runif(1)


मुझे पता नहीं है। लेकिन वास्तविकता यह है कि इस चुनौती को लेकर क्या अनुमति है और क्या नहीं है, इसको लेकर भारी भ्रम है।
user202729

@ user202729 यह उचित है, लेकिन जो लोग इस संबंध में चिंताओं को उठा रहे हैं, उन्होंने कम से कम टिप्पणी की होगी, इसलिए डाउनवोट (मेरी राय में) उस से संबंधित होने की संभावना नहीं है। EDIT: मिस्ट्री डाउनवॉटर ने डाउनवोट को हटा दिया है।
Giuseppe

मैंने नीचा दिखाया क्योंकि मैंने सोचा था कि इस तरह से एक चुनौती पर आर का उपयोग करना तुच्छ था, लेकिन मैं थोड़ा ट्रिगर-खुश था। मुझे लगता है कि यह अन्य उत्तरों की तुलना में एक अलग विधि का उपयोग करता है, इसलिए मैंने अपना डाउनवोट हटा दिया।
केस्मार्ट्स

@Smarts आर में "तुच्छ" उत्तर का उपयोग वास्तव में किसी ने भी नहीं किया था: actuar::rpareto(1,1,1)क्योंकि यह लंबा है :)
प्लाननैपस

जानकारी के लिए, ca हैं बेस आर में 20 वितरण हार्ड-कोडेड हैं, लेकिन पेरेटो उनमें से एक नहीं है, इसलिए या तो काम के आसपास या एक अतिरिक्त पैकेज का उपयोग करने की आवश्यकता है।
प्लेनपस

3

चारकोल , 10 बाइट्स

I∕Xφ²⊕‽Xφ²

इसे ऑनलाइन आज़माएं!

लिंक वर्बोज़ संस्करण के लिए है:

Print(Cast(Divide(Power(f, 2), ++(Random(Power(f, 2))))));

टिप्पणियाँ:

  • चारकोल में केवल यादृच्छिक पूर्णांक संख्याएं प्राप्त करने के तरीके हैं, इसलिए 0 और 1 के बीच एक यादृच्छिक फ्लोटिंग-पॉइंट संख्या प्राप्त करने के लिए हमें 0 और एन के बीच एक यादृच्छिक पूर्णांक प्राप्त करना होगा और एन द्वारा विभाजित करना होगा।
  • इस उत्तर का पिछला संस्करण जिसने 1/(1-R)सूत्र का उपयोग किया था : इस मामले में, एन 1000000 पर सेट है क्योंकि ओपी इसे न्यूनतम कहता है। इस नंबर को प्राप्त करने के लिए चारकोल एक पूर्व निर्धारित चर f= 1000 प्रदान करता है । तो बस गणना करने पर f^2हमें 1000000 मिलते हैं। इस घटना में कि यादृच्छिक संख्या 999999 (अधिकतम) है 1/(1-0.999999)=1000000
  • नील की टिप (3 बाइट्स बचत): अगर मेरे पास है 1/(1-R/N), जहां R0 और एन के बीच एक यादृच्छिक संख्या है, यह सिर्फ calculate रूप में ही है N/(N-R)। लेकिन यह देखते हुए कि यादृच्छिक पूर्णांक N-Rऔर Rघटित होने की समान संभावना है, यह केवल गणना के समान है N/R( Rइस अंतिम स्थिति में शून्य से विभाजन से बचने के लिए 1 और एन समावेशी के बीच की संख्या)।


@ नील कृपया एक क्षण प्रतीक्षा करें जब मैं यह समझने की कोशिश करूं कि आपका कोड क्या करता है ... :-)
चार्ली

असल में मैं की जरूरत नहीं है MapAssignRightकिसी भी अधिक, 10 बाइट्स! काम करता है।
नील

@ अपने कोड का पूरा आत्मसात! उत्तर संपादित किया गया। :
चार्ली

3

हास्केल , 61 56 बाइट्स

फ़ंक्शन अंतराल मेंrandomIO :: IO Float यादृच्छिक संख्याएं पैदा करता है , इसलिए उनका उपयोग करके परिवर्तित करने से प्यारेटो अहसास का उत्पादन होगा। [0,1)x -> 1/(1-x)

import System.Random
randomIO>>=print.(1/).((1::Float)-)

इसे ऑनलाइन आज़माएं!


टाइप एनोटेशन को आगे randomIO>>=print.((1::Float)/)
बढ़ाने से

और जैसा कि फ़ंक्शन की अनुमति है, मैं कहूंगा कि आप ड्रॉप कर सकते हैं main=
लिकोनी

स्पष्ट रूप से सीमा इस उत्तर के[0,1) अनुसार है
दोष

@flawr वूप्स, आप सही कह रहे हैं! मैं भूल गया कि अस्थायी रूप से कैसे काम करता है।
मेघो

वैसे भी, टिप्पणी के लिए धन्यवाद, मुझे कोई विचार नहीं होगा :)
दोष

3

एक्सेल, 9 बाइट्स

=1/rand()

याय, एक्सेल एक बदलाव के लिए (अर्द्ध-) प्रतिस्पर्धी है!


लिब्रे ऑफिस Calc में भी काम करता है :)
ElPedro

आप इसे 1-बाइट्स के लिए गूगल शीट में बदल सकते हैं ( =1/Rand()
टेलर स्कॉट

3

गणितज्ञ, 10 बाइट्स

1/Random[]

इसे ऑनलाइन आज़माएं!

M.Stern से -4 बाइट्स


2
यह विफल होने की क्षमता है, क्योंकि RandomRealबंद सीमा में एक वास्तविक संख्या को आउटपुट करता है [0, 1]। इस प्रकार, 0 से विभाजन संभव है। आपको उस संभावना को हटाने के लिए यादृच्छिक मूल्य में हेरफेर करने की आवश्यकता होगी।
मेगो

2
@Mego वास्तव में आपको वह जानकारी कहां से मिली?
J42161217

1
@Mego 0 पाने की संभावना क्या है?
J42161217 12

4
जेनी_मैथी: मेटा पर प्रस्ताव के अनुसार , the burden of proof should be on the person claiming to have a valid answer- यह साबित करने के लिए आपका काम है कि यह वैध है, न कि @Mego से एक अवैध परीक्षण मामला प्रदान करने के लिए कहने के लिए। इसके अलावा, क्योंकि फ्लोट 0 होने की संभावना को असतत है।
user202729

1
विषय पर वापस, मुझे विश्वास नहीं है कि इस फ़ंक्शन का उपयोग करके शून्य प्राप्त करने की संभावना है। गणितज्ञ वास्तव में संख्या से कम उत्पादन करेंगे $MinMachineNumber। इस प्रयास करें: Table[RandomReal[{0, $MinMachineNumber}], 100]। मैथमेटिका चालू हो जाती है और मशीन नंबरों को त्यागने और मनमाने ढंग से सटीक संख्याओं पर स्विच करने के लिए पर्याप्त है। जबरदस्त हंसी।
केली लोडर

2

रूबी, 14 8 बाइट्स

p 1/rand

तुच्छ कार्यक्रम, मुझे नहीं लगता कि यह कोई छोटा हो सकता है।


सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं।
user202729

2

एक्सेल VBA, 6 बाइट्स

बेनामी VBE तत्काल विंडो फ़ंक्शन जो VBE तत्काल विंडो में कोई इनपुट और आउटपुट नहीं लेता है

?1/Rnd

1

पायथन , 41 बाइट्स

lambda:1/(1-random())
from random import*

इसे ऑनलाइन आज़माएं!


बिलिन का उपयोग वास्तव में लंबा है:

पायथन , 43 बाइट्स

lambda:paretovariate(1)
from random import*

इसे ऑनलाइन आज़माएं!

दोनों समाधान पायथन 2 और पायथन 3 दोनों में काम करते हैं।


1
पूर्ण प्रोग्राम उन कार्यों के लिए छोटे होते हैं जो इनपुट का उपयोग नहीं करते हैं, printबाइट का उपयोग करते हुए ।
एरिक आउटोलॉफ़र

1

जे , 5 बाइट्स

%-.?0

ओटी कैसे काम करता है:

?0 0 से अधिक और 1 से कम एक यादृच्छिक मूल्य उत्पन्न करता है

-. 1 से घटाना

% पारस्परिक

इसे ऑनलाइन आज़माएं!


सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं।
user202729

1

लाल , 19 बाइट्स

1 /(1 - random 1.0)

इसे ऑनलाइन आज़माएं!


सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं।
user202729

1

APL (Dyalog) , 5 बाइट्स

÷1-?0

इसे ऑनलाइन आज़माएं!

कैसे?

 ÷   1-     ?0
1÷  (1-  random 0..1)

सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं।
user202729

1

जाप , 6 बाइट्स

1/1-Mr एक ही लंबाई है, लेकिन यह थोड़ा कम उबाऊ लगा!

°T/aMr

कोशिश करो


व्याख्या

वृद्धि ( °) शून्य ( T) और विभाजित ( /) इसके पूर्ण अंतर ( a) के साथ Math.random()


सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं।
user202729

1

जेली , 5 बाइट्स

जेली में यादृच्छिक फ्लोट भी नहीं होता है, इसलिए यह उपयोग करता है x/nजहां xरेंज में एक यादृच्छिक पूर्णांक [1, n](समावेशी) होता है जो रेंज में एक यादृच्छिक फ्लोट का अनुकरण करता है (0, 1]। इस कार्यक्रम में nहोना तय है ।108

ȷ8µ÷X

इसे ऑनलाइन आज़माएं!

व्याख्या

ȷ8     Literal 10^8.
  µ    New monad.
   ÷   Divide by
    X  random integer.

सूची , 3 बाइट्स

ØXİ

इसे ऑनलाइन आज़माएं!

ईर्ष्या धड़कता है जेली! (टीआई-बेसिक अभी तक नहीं)

व्याख्या

  İ    The inverse of...
ØX     a random float in [0, 1)

बेशक इसमें 0 का विलोम लेने की गैर-संभावना है।


यदि ØXलौटाया गया तो क्या एनलिस्ट समाधान विफल नहीं होगा 0? (डिस्क्लेमर: मैं एनलिस्ट को बिल्कुल नहीं जानता!)
झबरा

@ शैगी your program must output a number greater than or equal to 1 with at least probability 0.999. The rest of the time it may crash(चुनौती नियमों से)
user202729

1

आईबीएम / लोटस नोट्स फॉर्मूला, 13 बाइट्स

1/(1-@Random)

नमूना (10 रन)

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


सभी के लिए ध्यान दें: issacg ने कुछ नियम जोड़े हैं जो कुछ गड़बड़ियों की अनुमति देते हैं, इसलिए यहां अधिकांश उत्तर आवश्यक से अधिक लंबे हैं।
user202729

यकीन नहीं है कि मैं इसे बहुत कम कर सकता हूं जो भी नियम में बदलाव किए गए हैं :)
ElPedro


1

जावास्क्रिप्ट REPL, 15 19 बाइट्स

1/Math.random()

3
Math.random() 0
श्री Xcoder

1
शायद 1/(1-Math.random())?
user202729

यू * 29 के समाधान का उपयोग करके फिक्स्ड
l4m2

_=>इसे शुरू करने के लिए आपको एक फ़ंक्शन बनाने की आवश्यकता है; स्निपेट्स की अनुमति नहीं है।
झबरा

यह कंसोल चलाने का उपयोग करके एक पूर्ण कार्यक्रम है
l4m2


0

जे, 9 बाइट्स

p=:%@?@0:

मैं यह पता नहीं लगा सका कि पी =:% के बाद से इसे कोई इनपुट कैसे लेना है? 0 तुरंत मूल्यांकन करेगा और तय रहेगा। इस वजह से इसकी तरह।

यह काम किस प्रकार करता है:

p=:        | Define the verb p
       0:  | Constant function. Returns 0 regardless of input.
     ?@    | When applied to 0, returns a random float in the range (0,1)
   %@      | Reciprocal

20 बार मूल्यांकन किया गया:

    p"0 i.20
1.27056 1.86233 1.05387 16.8991 5.77882 3.42535 12.8681 17.4852 2.09133 1.82233 2.28139 1.58133 1.79701 1.09794 1.18695 1.07028 3.38721 2.88339 2.06632 2.0793

0

अजगर , 4 बाइट्स

c1O0

यहाँ कोशिश करो!

वैकल्पिक: c1h_O0


c1tOZ5 है, क्या यह काम नहीं करता है?
डेव

@ क्या काम नहीं करता है, जो नकारात्मक मान लौटाता है। मुझे 1-nनहीं चाहिएn-1
श्री Xcoder

क्या पाइथ के लिए एक स्थिर नहीं है 100?
झबरा

@ शैगी की इच्छा है कि मैंने ऐसा किया। दुर्भाग्य से, 100AFAIK के लिए कोई स्थिर नहीं
श्री एक्सकोडर

0

क्लीन , 91 बाइट्स

import StdEnv,Math.Random,System.Time
Start w=1.0/(1.0-hd(genRandReal(toInt(fst(time w)))))

स्वच्छ यादृच्छिक संख्या पसंद नहीं है।

क्योंकि रैंडम जेनरेटर (एक मेर्सेन ट्विस्टर) को एक बीज देने की आवश्यकता होती है, मुझे कुछ प्राप्त करने के लिए सिस्टम टाइमस्टैम्प लेना पड़ता है, जो निष्क्रिय रूप से अलग-अलग चलता है, और कुछ भी करने के लिए IO- संबंधित मुझे पूरी घोषणा का उपयोग करने की आवश्यकता होती है Start। केवल एक प्राप्त करने के लिए जगह है World

इसे ऑनलाइन आज़माएं!

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