কেউ আমাকে কীভাবে সিমুলেট করার কথা বলতে পারেন , যেখানে , একটি কয়েন টস ব্যবহার করে (যতবার আপনি প্রয়োজন হিসাবে) ?
আমি প্রত্যাখ্যানের নমুনা ব্যবহার করার কথা ভাবছিলাম, তবে এটি পেরেক দিতে পারিনি।
কেউ আমাকে কীভাবে সিমুলেট করার কথা বলতে পারেন , যেখানে , একটি কয়েন টস ব্যবহার করে (যতবার আপনি প্রয়োজন হিসাবে) ?
আমি প্রত্যাখ্যানের নমুনা ব্যবহার করার কথা ভাবছিলাম, তবে এটি পেরেক দিতে পারিনি।
উত্তর:
কারণ অনেকগুলি সমাধান রয়েছে, তাই আসুন একটি কার্যকর সমাধান খুঁজে বার করুন ।
এইটির পিছনে ধারণাটি একটি বার্নোল্লি ভেরিয়েবলটি প্রয়োগ করার একটি স্ট্যান্ডার্ড পদ্ধতিতে শুরু হয়: ইউনিফর্ম র্যান্ডম ভেরিয়েবল সাথে প্যারামিটার সাথে তুলনা করুন । যখন , ফিরে ; অন্যথায়, ফিরে ।
আমরা ইউনিফর্ম র্যান্ডম নম্বর জেনারেটর হিসাবে কয়েন ব্যবহার করতে পারি । একটি সংখ্যা উৎপন্ন করার জন্য কোনো বিরতি মধ্যে অবিশেষে , মুদ্রা টুসকি। যখন এটি শীর্ষস্থানীয় হয় , বিরতিগুলির প্রথম ব্যবধানের প্রথম অংশে একটি অভিন্ন মান উত্পন্ন করে; এটি যখন লেজগুলি হয় তখন বিরতিতে শেষের শেষ অংশ থেকে উত্পন্ন করে । এক পর্যায়ে লক্ষ্য অন্তর এতটাই ছোট হয়ে যাবে যে আপনি এটি থেকে কীভাবে একটি সংখ্যা বাছাই করে তা বিবেচ্য নয়: এইভাবে পুনরাবৃত্তি শুরু হয়। এটি স্পষ্টতই এই পদ্ধতিটি অভিন্ন বৈচিত্র উত্পন্ন করে (কোনও পছন্দসই নির্ভুলতা অবধি), যেমন সহজেই আনয়ন দ্বারা প্রমাণিত হয়।
এই ধারণাটি দক্ষ নয়, তবে এটি একটি দক্ষ পদ্ধতির দিকে নিয়ে যায়। যেহেতু প্রতিটি পর্যায়ে আপনি কিছু প্রদত্ত বিরতি থেকে একটি সংখ্যা আঁকতে যাচ্ছেন , তাই প্রথমে আপনাকে এটিকে আঁকার দরকার আছে কিনা তা যাচাই করে নিন না কেন? যদি আপনার লক্ষ্য মানটি এই ব্যবধানের বাইরে থাকে তবে আপনি ইতিমধ্যে এলোমেলো মান এবং লক্ষ্যটির মধ্যে তুলনার ফলাফলটি জানেন know সুতরাং, এই অ্যালগরিদম দ্রুত শেষ হতে ঝোঁক। (এটি প্রশ্নে অনুরোধ করা প্রত্যাখ্যান স্যাম্পলিং পদ্ধতি হিসাবে ধরা যেতে পারে ))
আমরা এই অ্যালগরিদমকে আরও অনুকূলিত করতে পারি। যে কোনও পর্যায়ে, আমাদের কাছে দুটি কয়েন রয়েছে যা আমরা ব্যবহার করতে পারি: আমাদের মুদ্রাকে পুনর্বিবেচনা করে আমরা এটিকে এমন এক হিসাবে তৈরি করতে পারি যা সম্ভাবনা সহ মাথা হয় । অতএব, পূর্বনির্দেশ হিসাবে আমরা পুনরাবৃত্তভাবে বেছে নিতে পারি যার যে কোনও রিলেবলিং সমাপ্তির জন্য কম প্রত্যাশিত ফ্লিপের দিকে নিয়ে যায়। (এই গণনাটি ব্যয়বহুল পদক্ষেপ হতে পারে))
উদাহরণস্বরূপ, সরাসরি বের্নুলি ভেরিয়েবলটি অনুকরণ করতে এটি সহ একটি মুদ্রা ব্যবহার করতে অক্ষম : এটিতে গড়ে প্রায় দশটি ফ্লপ লাগে। তবে যদি আমরা একটি মুদ্রা ব্যবহার করি তবে কেবলমাত্র দুটি আমরা নিশ্চিত হয়ে যাব এবং প্রত্যাশিত ফ্লিপের সংখ্যা মাত্র ।
বিস্তারিত এখানে।
অর্ধ-খোলা ব্যবধান অন্তরগুলিতে ভাগ করুন
এটি দুটি রূপান্তর এবং যা অর্ধ-খোলা বিরতিতে কাজ করে।
পরিভাষার বিষয়টি হিসাবে, যদি কোনও আসল সংখ্যার সেট করি তবে তা প্রকাশ করতে দিন
মানে কম জন্য আবদ্ধ হয় : সবার জন্য । একইভাবে, মানে একটি ঊর্ধ্ব জন্য আবদ্ধ হয় ।
লিখুন । (বাস্তবে, যুক্তিযুক্ত পরিবর্তে যদি আসল হয় তবে এটির কোনও তাত্পর্য হবে না; আমাদের কেবল ))
কাঙ্ক্ষিত বার্নোল্লি প্যারামিটার সহ একটি ভেরিয়েটেড উত্পাদন করতে এখানে অ্যালগরিদম রয়েছে :
সেট এবং ।
যদিও {টস মুদ্রা উত্পাদন করতে । সেট করুন বৃদ্ধি ।}
যদি তবে সেট করুন । অন্যথায়, সেট করুন ।
উদাহরণস্বরূপ, এখানে R
ফাংশন হিসাবে অ্যালরিদমের একটি বাস্তবায়ন draw
। এর আর্গুমেন্টগুলি লক্ষ্য মান এবং অন্তর , প্রাথমিকভাবে । এটি সহায়ক ফাংশন প্রয়োগকারী ব্যবহার করে । যদিও এটির প্রয়োজন নেই, এটি মুদ্রা টসসের সংখ্যাও ট্র্যাক করে। এটি এলোমেলো পরিবর্তনশীল, টসসের গণনা এবং এটি পরিদর্শন করা শেষ ব্যবধানটি প্রদান করে।s
s <- function(x, ab, p) {
d <- diff(ab) * p
if (x == 1) c(ab[1], ab[1] + d) else c(ab[1] + d, ab[2])
}
draw <- function(target, p) {
between <- function(z, ab) prod(z - ab) <= 0
ab <- c(0,1)
n <- 0
while(between(target, ab)) {
n <- n+1; ab <- s(runif(1) < p, ab, p)
}
return(c(target > ab[2], n, ab))
}
এর নির্ভুলতার ব্যবহার এবং পরীক্ষার উদাহরণ হিসাবে, কেসটি এবং । আসুন , অ্যালগরিদম ব্যবহার করে মান আঁকুন, প্রতিবেদন করুন (এবং এর মান ত্রুটি) এবং ব্যবহৃত ফ্লিপের গড় সংখ্যা নির্দেশ করুন।
target <- 0.01
p <- 0.9
set.seed(17)
sim <- replicate(1e4, draw(target, p))
(m <- mean(sim[1, ])) # The mean
(m - target) / (sd(sim[1, ]) / sqrt(ncol(sim))) # A Z-score to compare to `target`
mean(sim[2, ]) # Average number of flips
এই সিমুলেশনটিতে ছিল মাথা। যদিও এর লক্ষ্যমাত্রার চেয়ে কম , এর জেড-স্কোরটি তাত্পর্যপূর্ণ নয়: এই বিচ্যুতির সুযোগকে দায়ী করা যেতে পারে। গড় সংখ্যা ছিল দশজনের চেয়ে কিছুটা কম less আমরা যদি মুদ্রা ব্যবহার করে গড়টি হত - এটি লক্ষ্যমাত্রার চেয়ে উল্লেখযোগ্যভাবে আলাদা না গড়পড়তাভাবে কেবল ফ্লিপগুলির প্রয়োজন হত।
এখানে একটি সমাধান (কিছুটা অগোছালো, তবে এটি আমার প্রথম ছুরিকা)। আপনি আসলে উপেক্ষা করতে পারেন এবং WLOG অনুমান । কেন? দুটি পক্ষপাতদুষ্ট কয়েন ফ্লিপ থেকে একটি নিরপেক্ষ কয়েন ফ্লিপ উত্পন্ন করতে একটি চতুর অ্যালগরিদম বিদ্যমান । সুতরাং আমরা ধরে নিতে পারি ।
একটি উত্পন্ন করার জন্য , আমি দুটি সমাধান সম্পর্কে ভাবতে পারি (প্রথমটি আমার নিজস্ব নয়, তবে দ্বিতীয়টি একটি সাধারণীকরণ):
নিরপেক্ষ মুদ্রাটি বার বার ফ্লিপ করুন । যদি মাথা উপস্থিত না থাকে তবে আবার শুরু করুন। যদি মাথা হয় বর্তমান, রিটার্ন কিনা প্রথম মুদ্রা একটি মাথা বা না (কারণ )
এটি এর যে কোনও মান পর্যন্ত বাড়ানো যেতে পারে । বাইনারি আকারে লিখুন । উদাহরণস্বরূপ,
আমরা কয়েন ফ্লিপ ব্যবহার করে একটি নতুন বাইনারি নম্বর তৈরি করব। দিয়ে শুরু করুন এবং কোন মাথা (1) বা লেজ (0) প্রদর্শিত হবে তার উপর নির্ভর করে অঙ্কগুলি যুক্ত করুন। প্রতিটি ফ্লিপ এ, আপনার নতুন বাইনারি নম্বরটি বাইনারি উপস্থাপনার সাথে একই অঙ্ক পর্যন্ত তুলনা করুন । অবশেষে দুটি বিভক্ত হবে, এবং আপনার বাইনারি সংখ্যার চেয়ে বেশি হলে ফিরে আসবে ।
পাইথনে:
def simulate(p):
binary_p = float_to_binary(p)
binary_string = '0.'
index = 3
while True:
binary_string += '0' if random.random() < 0.5 else '1'
if binary_string != binary_p[:index]:
return binary_string < binary_p[:index]
index += 1
কিছু প্রমাণ:
np.mean([simulate(0.4) for i in range(10000)])
প্রায় 0.4 (তবে দ্রুত নয়)
আমি একটি সহজ সমাধান দেখতে পাচ্ছি, তবে এটি করার অনেক উপায় রয়েছে সন্দেহ নেই, সম্ভবত এটির চেয়ে কিছু সহজ। এই পদ্ধতির দুটি ধাপে বিভক্ত করা যেতে পারে:
সমমানের সম্ভাব্যতার সাথে দুটি ইভেন্ট থেকে উত্পন্ন করে একটি অনন্য কয়েন-টসিং প্রক্রিয়া দেওয়া হয় (নির্দিষ্ট মুদ্রার সংমিশ্রণ এবং পদ্ধতিটি যার দ্বারা এটি সম্ভাব্য দিয়ে মাথা তৈরি করে )। আমরা এই দুটি সমান সম্ভাব্য ইভেন্টগুলি , এবং । [এটির জন্য একটি সহজ পদ্ধতি রয়েছে যার জন্য দুটি সম-সম্ভাব্য ফলাফল তৈরি করতে এবং জোড়া লাগতে হবে, অন্য সমস্ত ফলাফলের সাথে একটি নতুন জুড়ি তৈরি হয় আবার চেষ্টা করার জন্য রোলস]
এখন আপনি সিমুলেটেড ফেয়ার কয়েন ব্যবহার করে দুটি শোষণকারী রাষ্ট্রের সাথে একটি এলোমেলো হাঁটা উত্পাদন করুন। উত্স থেকে শোষণকারী রাষ্ট্রগুলির দূরত্বটি বেছে নেওয়ার মাধ্যমে (এর উপরে একটি এবং এর নীচে একটি), আপনি উপরের শোষণকারী রাষ্ট্রটিকে পূর্ণসংখ্যার পছন্দসই অনুপাত হিসাবে বলে শোষণের সুযোগটি সেট করতে পারেন। বিশেষত, আপনি যদি উপরের শোষণকারী বাধাটি এবং নীচে এবং (এবং উত্স থেকে প্রক্রিয়া শুরু করুন), এবং শোষণ না হওয়া পর্যন্ত এলোমেলো হাঁটা চালান, উপরের বাধাটিতে শোষণের সম্ভাবনাটি হ'ল ।
(এটি দেখানোর জন্য এখানে কিছু গণনা করা দরকার, তবে পুনরাবৃত্ত সম্পর্কের সাথে কাজ করে আপনি সম্ভাব্যতাগুলি খুব সহজেই খুঁজে পেতে পারেন ... বা আপনি অসীম সিরিজগুলি সংক্ষেপণের মাধ্যমে এটি করতে পারেন ... বা অন্য কোনও উপায় রয়েছে))
[self-study]
ট্যাগটি যুক্ত করুন এবং এর উইকিটি পড়ুন । মনে রাখবেন যে আপনার প্রশ্নের শেষে সাহায্যের জন্য আবেদন করার দরকার নেই - আমরা জানি যে এখানে যারা পোস্ট করেন তারা সাহায্যের জন্য আশা করছেন!