Random Walk and Randomness of Nature

Sai Htaung Kham
10 min readJun 13, 2020

--

(ကျပန်း ရွေ့လျားခြင်း နှင့် သဘာဝ၏ ကျပန်းဖြစ်တည်မှု)

A random walk is a mathematical object, known as a stochastic or random process, that describes a path that consists of a succession of random steps on some mathematical space such as the integers. (Wikipedia)

Random walk ကိုတော့ ကျွန်တော်တို့ မြန်မာလို ဘာသာပြန်ရင်တော့ ကျပန်း လမ်းလျှောက်ခြင်း (သို့မဟုတ်) ကျပန်းအရ လှုပ်ရှားခြင်းလို့ ဘာသာပြန်ရင် မမှားဘူး လို့ထင်ထင်ပါတယ်။ မှန်မှန်ကန်ကန် သိပ္ပံနည်းကျကျ ဘာသာပြန်ရရင်တော့...

Random Walk ဆိုသည်မှာ သင်္ချာ၏အရာဝတ္ထုတစ်ခုဖြစ်ပြီး ကျပန်းအလိုက် ရွေ့လျားနေသည်။ ၎င်းအရာဝတ္ထုသည် ကျပန်းအလိုက်ရွေ့လျားရာတွင် သတ်မှတ်ထားသော ခြေလှမ်းနှင့် သင်္ချာသာသာရပ်တွင် သတ်မှတ်ထားသော နေရာလပ် (သို့) ကွက်လပ် (ဥပမာ ကိန်းပြည့်) အတိုင်းရွေ့လျားကြသည်။

နားလည်ရလွယ်အောင် ရှင်းပြရမယ်ဆိုရင် Random Walk ဟာ သတ်မှတ်ထားတဲ့ နေရာ (Space) နဲ့ သတ်မှတ်ထားတဲ့ ခြေလှမ်း အရေအတွက် (Step Size) အတိုင်း ကျပန်းရွေ့လျားတာကို ဆိုလိုတာပါ။

Random Walk ဟာ ဘာကြောင့် အရေးပါတာပါလိမ့်။ ဒီမေးခွန်းရဲ့ အဖြေကို သိချင်တယ်ဆိုရင်တော့ ဆက်ဖတ်ကြပါ။

စိတ်ဝင်စားစရာ တစ်ခုကတော့ ကျွန်တော်တို့ သဘာဝဖြစ်တည်မှုတော်တော်များများဟာ ကျပန်းအတိုင်း ဖြစ်ပေါ်နေသလို ခန့်မှန်းရဖို့လည်း အင်မတန်မှ ခက်ခဲလှပါတယ်။ ဥပမာ ပြောရမယ်ဆိုရင် လူတစ်ယောက်ရဲ့ စိတ်နေစိတ်ထားကို ခန့်မှန်းတာတို့၊ ထီပေါက်စဉ်နံပါတ် ခန့်မှန်းတာတို့ စတာတွေလည်း ကျပန်းအလိုက်ဖြစ်နေတဲ့ ဖြစ်စဉ်တွေပါပဲ။

ဒါဆိုရင် ဒီလို ကျပန်းဖြစ်စဉ်တွေကို ကျွန်တော်တို့ သင်္ချာဘာသာရပ်အရ Graph တွေနဲ့ ဖော်ပြလို့ရပါတယ်။ ဒါပေမယ့် Graph နဲ့ ဖော်ပြတဲ့နေရာမှာ သတိထားရမှာက 3 Dimensions အထိကိုသာ အများဆုံးဖော်ပြနိုင်တာကို သတိထားရပါမယ်။

ဒါဆိုရင် Random Walk ဝတ္ထုတစ်ခုကို ကျွန်တော်တို့ ဖန်းတီးကြည့်ရအောင်ဗျာ...

dims = 1
step_n = 10000
step_set = [-1, 0, 1]
origin = 0

ကျွန်တော်တို့ 1 Dimensional Space ပေါ်မှာ ကျပန်းအလျောက် ရွေ့လျားပါမယ်။ တစ်ခုရွေ့လျားရင် ခြေလှမ်းရဲ့ ပမာဏ [-1, 0, 1] အတိုင်းရွေ့လျားပါမယ်။ စမှတ်ကတော့ သုည ကနေစရွှေ့ပါမယ်။ ခြေလှမ်း စုစုပေါင်း ၁၀၀၀၀ ဖိုးရွေ့လျားပါမယ်။

အဲဲ့ဒါကို Python မှာ Simulation လုပ်ကြည့်မယ်ဆိုရင် အောက်ဖော်ပြပါ Graph အတိုင်း မြင်ရမှာပါ။ Simulation လုပ်တိုင်းရလာတဲ့ရလဒ်တွေကတော့ တစ်ခုနဲ့ တစ်ခု မတူကြပါဘူး။ Source code ကိုတော့ အောက်က Link မှာ ရယူပါ။

Random Walk on 1 dimensional space
Random Walk on 1 dimensional space

အရာဝတ္ထုတစ်ခုဟာ 0 ကနေစပြီး ခြေလှမ်း 10000 မှာ ဆုံးသွားပါတယ်။ Simulation လုပ်လိုက်တိုင်း ထွက်ပေါ်လာတဲ့ Walking Pattern (ရွေ့လျားမှု ပုံစံ) ဟာ မတူကြပါဘူး။ သဘာဝရဲ့ ဖြစ်တည်မှုဟာလည်း ထိုနည်းတူပါပဲ။

နောက်တစ်ခေါက် 2 Dimensional Space မှာ ဖြစ်ပေါ်မယ့် Random Walk Pattern ကို လေ့လာကြည့်ရအောင်ပါ။

Random Walk on 2 dimensional space
Random Walk on 2 dimensional space
Random Walk on 2 dimensional space with multiple objects

ဒီ 2 Dimensional Space မှာတော့ (0, 0) ကနေစပြီး ရွေ့လျားကြပြီး ရွေ့လျားနိုင်တဲ့ Walking Steps တွေကတော့ အောက်ပါအတိုင်းဖြစ်ပါတယ်။

{(-1, -1), (-1, 0), (-1, 1), (0, -1), 
(0, 1), (1, -1), (1, 0), (1, 1)}

နောက်ဆုံးပုံကတော့ Multiple object တွေဟာ (0, 0) အစား ကျပန်းနေရာကနေ ရွေ့လျားနေကြပါတယ်။

ကျွန်တော်တို့ 3D ပေါ်မှာ ရွေ့လျားမယ့် Pattern ကို လေ့လာကြည့်ရအောင်ဗျာ။

Random Walk on 3 dimensional space
Random Walk on 3 dimensional space with multiple objects

ဟုတ်ပါပြီ ကျွန်တော့်ကို မေးကြပါလိမ့်မယ်။ Random Walk ကတော့ ဟုတ်ပြီ ကျပန်းအတိုင်း ရွေ့လျားနေမယ်။ ဘာတွေများထူးဆန်းနေလို့လဲပေါ့။

ဟုတ်ပါတယ် Random Walk ဟာ ဒီအတိုင်းဆိုရင်တော့ ပျင်းဖို့ကောင်းပါတယ်။ ဘာမှ သိပ်ပြီး အကျိုးမပြုပါဘူး။ ဒါပေမယ့် Randomness (ကျပန်းဖြစ်တည်မှု) ကို အသုံးချပြီး ကျွန်တော်တို့ လူသားတွေ ဖြေရှင်းလို့ မဖြစ်နိုင်းဘူး၊ သက်သေပြလို့ မဖြစ်နိုင်ဘူးဆိုတဲ့ ပုစ္ဆာတွေကို ဖြေရှင်းနိုင်တဲ့ ဂုဏ်သတ္တိတည်ရှိနေတာကို စိတ်ဝင်စားဖို့ တော်တော်ကောင်းပါတယ်။

ကဲ ကျွန်တော်တို့ Randomness ကို အသုံးချပြီး လွယ်ကူတဲ့ ပုစ္ဆာတစ်ခုကို ဖြေရှင်းကြည့်ရအောင်လားဗျာ။

Monte Carlo Simulation

Monte Carlo methods, or Monte Carlo experiments, are a broad class of computational algorithms that rely on repeated random sampling to obtain numerical results. The underlying concept is to use randomness to solve problems that might be deterministic in principle. (Wikipedia)

Statistical Mathematics (စာရင်းအင်းသင်္ချာ ဘာသာရပ်)ကို လေ့လာတဲ့ လူတော်တော်များများကတော့ ဒီ လုပ်ဆောင်ချက်နဲ့ ပတ်သက်ပြီး ရင်းနှီးကြမယ်လို့ ကျွန်တော် ယူဆပါတယ်။ Monte Carlo ကတော့ နာမည်ကျော် Casino တွေ တည်ရှိရာ မြို့ ဆိုပြန်လည်းမမှားပါဘူး။

Monte Carlo လုပ်ဆောင်ချက် (သို့) စမ်းသပ်ချက်ဟာ သိပ်ကို စိတ်ဝင်စားစရာကောင်းပါတယ်။ လွယ်ကူ ရိုးရှင်းတဲ့ နည်း လို့ပြောရင်လည်း မှားမယ် မထင်ပါ။

လွယ်လွယ်ကူကူနဲ့ ရှင်းပြရရင် Monte Carlo လုပ်ဆောင်ချက်ဟာ ကွန်ပျူတာ Algorithms တစ်ခုဖြစ်ပြီး သဘာဝရဲ့ ကျပန်းဖြစ်တည်မှုကို အသုံးချကာ ကိုယ်လိုရာ ကိန်းဂဏန်း ရလဒ် တစ်ခုကို ရှာဖွေတဲ့ နည်းပဲဖြစ်ပါတယ်။ တစ်နည်းအားဖြင့် သဘာဝရဲ့ ကျပန်းဖြစ်တည်မှုကို အသုံးချကာ ရလဒ်တစ်ခုဟာ မှန်ကန်တယ် (သို့) တည်ရှိတယ် ဆိုတဲ့ ပုစ္ဆာကို ဖြေရှင်းတဲ့ နေရာမှာ အသုံးပြုတာ များပါတယ်။

ဥပမာကို ကြည့်ရအောင်လားဗျာ... Source Code ကိုတော့ အောက်ဖော်ပြပါ Link မှာ ရယူပါ။

ကျွန်တော်တို့ Game တစ်ခုကို ကစားတယ်လို့ ယူဆရအောင်။ Game ရဲ့ စည်းမျဉ်းစည်းကမ်းကတော့

Jack ဆိုတဲ့ ပုဂ္ဂိုလ်သည် အထူးတလည် စီမံထားတဲ့ အန်စာတုံးတစ်ခုကို ကစားတယ်််််််််် ဆိုပါစို့။ တကယ်လို့ အဲ့ဒီ အန်စာတုံးကနေ လှိမ့်လိုက်လို့ ထွက်လာတဲ့ ရလဒ်သည် 1 ကနေ 51 ဖြစ်မယ်ဆိုရင် Casino ကြီးက အနိုင်ရမယ်။ 52 ကနေ 100 ရလဒ် ရခဲ့မယ်ဆိုရင် Jack က အနိုင်ရမယ်။ စည်းမျဉ်းစည်းကမ်း ကတော့ ရှင်းပါတယ်။

Jack က တစ်ခါ ကစားတိုင်း $1 ထည့်ပြီး လောင်းကြေးထပ်ပါမယ်။

ဒါဆိုရင်- Jack ရဲ့ နိုင်နိုင်ခြေက = 49/100- Casino ရဲ့ နိုင်နိုင်ခြေက = 51/100- Jack ရဲ့ မြတ်နိုင်ခြေက = ‌1 * (49/100) - 1 * (51/100) = 0.02 = -2%- Casion ရဲ့ မြတ်နိုင်ခြေကတော့ 2% ပါ။

သင်္ချာ တွက်နည်းအရတော့ အပေါ်မှာ ဖော်ပြထားတဲ့အတိုင်း Jack သည် ဘယ်လိုပဲဖြစ်ဖြစ် ဒီ Game ကို ကစားရင် 2% အမြဲရှုံးပါမယ် ဆိုပြီးပြောထားပါတယ်။

ဒါဆိုရင် ကျွန်တော့်ကို စာဖတ်တဲ့လူတွေက ပြောပါမယ်။ လောင်းကစားတာတွေ Game ကစားတာတွေက ကံပေါ်မှာ အမြဲမူတည်ပါတယ်။ အဲ့လို အတိအကျ ပြောနိုင်ရိုးလား။ တစ်ညတည်း လမ်းမှားပြီး လောင်းကစားရုံထဲ ရောက်သွားလို့ ချမ်းသာသွားတဲ့လူလည်းရှိတာပဲ။ ထီထိုးလိုက်လို့ သောင်းထောင်ချီ ပေါက်သွားတဲ့လူလည်း အများကြီးပါ။ ဒီ သင်္ချာတွက်နည်းက မှားမနေဘူးလားပေါ့။

ဒီလို မတည်မြဲမှု၊ ကျပန်းဖြစ်တည်မှု၊ ကံတရားတွေဟာ သဘာဝရဲ့ ကျပန်းဖြစ်တည်မှုတွေထဲက ကောင်းတဲ့ ဥပမာတွေပါပဲ။

ဒါဆို အပေါ်မှာ အဆိုပြုထားတဲ့ သင်္ချာဟာ မှားလား မှန်လားကို သက်သေပြဖို့အတွက် နည်းလမ်းကို ရှာရမှာပါ။ လွယ်ကူတဲ့ နည်းလမ်းကတော့ Jack ကို Casino မှာ သွားကစားခိုင်းပြီး ပွဲရလဒ်တိုင်းကို မှတ်သားပြီးတော့ ပြန်ပြောခိုင်းတဲ့ နည်းပါပဲ။ ဒါကတော့ Sponsor အကြီးစားကို လိုအပ်မှာပါ။ ကျွန်တော်ကတော့ Sponsor ကို မပေးနိုင်တဲ့ အတွက် Monte Carlo Simulation နည်းကို အသုံးပြုပြီး သက်သေပြမှာပါ။

အောက်ဖော်ပြပါ ပုံတွေကတော့ Jack ကို မတည်ငွေ $10000 ပေးပါမယ်။ Jack လောင်းကစား တစ်ခါလုပ်တိုင်း $100 ထည့်ခိုင်းပါမယ်။ လောင်းကစားကိုတော့ 5 ကြိမ်၊ 10 ကြိမ်၊ အကြိမ် 100, 1000, 10000 စတာတွေ ကစားခိုင်းပြီး သတ်မှတ်ထားတဲ့ အကြိမ် ပြည့်ရင် နောက်ဆုံးလက်ကျန်ငွေကို Jack က မှတ်ထားရပါမယ်။

ဥပမာ - 5 ကြိမ်ပြည့်ရင် Jack ရဲ့ လက်ကျန်ငွေကို မှတ်သားပြီး၊ မတည်ငွေတွေ အကြိမ်အရေအတွက် စတာတွေကိုတော့ အစကနေပြန်စပါမယ်။

Monte Carlo Simulation ရဲ့ ရလဒ်ကတော့ အောက်ဖော်ပြပါပုံ အတိုင်းပါပဲ။

Time of played : 5. The player starts the game with $10,000 and ends with $9996.0
Time of played : 10. The player starts the game with $10,000 and ends with $9971.0
Time of played : 100. The player starts the game with $10,000 and ends with $9810.0
Time of played : 1000. The player starts the game with $10,000 and ends with $7817.0
Time of played : 10000. The player starts the game with $10,000 and ends with $-10148.0

ဒီရလဒ်တွေကတော့ အကြိမ် [5, 10, 100, 1000, 10000] ကနေ အကြိမ်တိုင်း Jack ရဲ့ လက်ကျန်ငွေကို ဖော်ပြတဲ့ Graph ပဲဖြစ်ပါတယ်။

စိတ်ဝင်စားဖို့ကောင်းတာကတော့ Jack သည် သတ်မှတ်ထားတဲ့ အကြိမ်အရေအတွက် ကစားတိုင်း နောက်ဆုံးလက်ကျန်ငွေသည် တိုးမလားဘဲ လျော့သွားတာကို တွေ့မြင်ရမှာပါ။ ဒီမှာ သတိထားရမှာကတော့ နောက်ဆုံးလက်ကျန်ငွေကို ဖော်ပြရာမှာ ပျမ်းမျှလက်ကျန်ငွေဖြစ်ပါတယ်။ Source Code ထဲကို ကြည့်မယ်ဆိုရင်တော့ အောက်ဖော်ပြပါ Code ကို မြင်ရမှာပါ။ ပျမ်းမျှရှာထားတာပါ။

sum(ending_funds)/len(ending_funds)

Graph ကို လေ့လာကြည့်ရင်တော့ ကစားတဲ့ အကြိမ်အရေအတွက်များလာလေလေ Jack သည် 2% အနေနဲ့ ပိုပိုပြီးရှုံးလာလေလေကို မြင်တွေ့ရမှာပါ။ ဖြတ်ခနဲ ကြည့်ပြီီီးဆုံးဖြတ်ရရင်တော့ အပေါ်ကို ထောင်ထွက်နေတဲ့ လိုင်းအရေအတွက်နဲ့ အောက်ကို စိုက်နေတဲ့ လိုင်းအရေအတွက် ပမာဏကို နှိုင်းယှဉ်ကြည့်ပါ။ ဘယ်ဟာက ပိုများနေပါလဲ။

သင်္ချာအရ ပြန်တွက်ကြည့်မယ်ဆိုရင်

Jack သည် မတည်ငွေ $10000 ရှိတယ်။လောင်းကစား တစ်ကြိမ်လုပ်တိုင်း $100 လောင်းတယ်။အကြိမ် 10000 ကစားရင် Jack ရှုံးနိုင်မယ့် ပမာဏကတော့ (10000) * (0.02 * 100) = $20000 ဖြစ်ပါတယ်။

နောက်ဆုံးပုံရဲ့ရလဒ်ကို ကြည့်ရင် Jack ရဲ့ နောက်ဆုံးလက်ကျန်ငွေသည် $-10148.0 ဖြစ်ပါတယ်။ မတည်ငွေနဲ့ ထည့်ပေါင်းရင်တော့ Jack သည် (10148.0) + 10000 = $20148 ရှုံးပါတယ်။ အပေါ်မှာ တွက်ထားတဲ့ $20000 နဲ့ အရမ်းကို နီးစပ်ပါတယ်။

ဟုတ်ပါပြီ။ ကျွန်တော်တို့ သဘာဝရဲ့ ကျပန်းဖြစ်တည်မှု ကို အသုံးပြုပြီး အကြိမ် မြောက်မြားစွာ Simulation လုပ်ခြင်းအားဖြင့် ကျွန်တော်တို့ရဲ့ သင်္ချာတွက်ချက်မှုဟာ မှန်ကန်ကြောင်း သက်သေပြသွားတာဖြစ်ပါတယ်။

ဒီလို Simulation သာ မရှိခဲ့ရင်တော့ ကျွန်တော်တို့ဟာ ဒီသက်သေပြချက်ကို ပြနိုင်ဖို့ ခက်ခဲပါလိမ့်မယ်။ ဒါကလည်း Randomess ရဲ့ အရေးပါပုံကို ဖော်ပြထားတာပဲဖြစ်ပါတယ်။ ဒီနေရာမှာတော့ ကျွန်တော်က Coding အကြောင်းကို ပြမသွားတဲ့ အတွက်ကြောင့် Random ကို ဘယ်မှာ သုံးခဲ့လဲ ဆိုတာ သိနိုင်မှာ မဟုတ်ပါဘူး။ Source Code ကို ကြည့်ရင်တော့ မြင်နိုင်ပါတယ်။

import randomdef rolldice():
dice = random.randint(1, 100)
if dice <= 51:
return False
return True

ဒါကတော့ အန်စာတုံးလှိမ့်တဲ့နေရာမှာ အသုံးပြုခဲ့တဲ့ Source Code ပဲဖြစ်ပါတယ်။ အဲ့ဒီနေရာမှာ random library ကို ခေါ်သုံးထားတာပါ။ ဒီ random library ဟာ Uniform Distribution ကို အသုံးပြုထားတာ ဖြစ်တဲ့ အတွက် ဖြစ်စဉ်တစ်ခုချင်းဆီမှာ Fair ဖြစ်တယ်လို့ ဆိုရမှာပါ။

ကဲ ကျွန်တော်တို့ Monte Carlo Simulation ကို အသုံးပြုပြီး စိတ်ဝင်စားစရာ ပုစ္ဆာလေးတွေ ဖြေရှင်းပြီးသွားပြီဆိုတော့ Random Walk Topic ဆီကို ပြန်လာရအောင်ဗျာ...

အရင်က Random Walk ဟာ 2 Dimensional Space မှာ အောက်ဖော်ပြပါ Pattern အတိုင်း ရွေ့လျားတယ်လို့ ကျွန်တော် ပြခဲ့ပြီးပါပြီ။

Random Walk on 2 dimensional space

ဒီရွေ့လျားမှုဟာ Free ရွေ့လျားမှု (သို့) ကန့်သတ်မှု အနည်းဆုံးနဲ့ရွေ့လျားမှု လို့ ကျွန်တော် ပြောပါမယ်။ ဘာလို့လဲဆိုတော့ ဒီရွေ့လျားမှုဟာ ဘာကန့်သတ်ချက်မှ မရှိဘဲ (သို့) အနည်းဆုံး ကန့်သတ်ချက်နဲ့ ရွေ့လျားနေလို့ပါ။

ကျွန်တော်တို့ တကယ်လို့ အဲ့ဒီရွေ့လျားမှုကို စည်းမျဉ်းစည်းကမ်းတွေ သတ်မှတ်ချက်တွေ့ ထည့်သွင်းပြီး ရွေ့လျားစေမယ်ဆိုရင် စိတ်ဝင်စားစရာ ရွေ့လျားမှု ပုံစံကို တွေ့မြင်ရမှာပါ။

ကျွန်တော်တို့ Game နောက်တစ်ခုကို ကစားရအောင်လားဗျာ...

Source Code : https://www.youtube.com/watch?v=BfS2H1y6tzQ

ကျွန်တော်တို့ 2 Dimensional Space ပေါ်မှာ (0, 0) ကနေစပြီး ရွေ့လျားပါမယ်။ ရွေ့လျားမယ့် ခြေလှမ်းကတော့ စည်းမျဉ်းစည်းကမ်း သတ်မှတ်ပါမယ်။ အရှေ့၊ နောက်၊ တောင်၊ မြောက် ရွေ့လျားနိုင်မယ်။ နောက်ပြန်လည်းရွေ့လျားနိုင်မယ်လို့ သတ်မှတ်ပါမယ်။ အပေါ်က ပုံအရဆိုရင်တော့ (0, 0) က စမှတ်ဖြစ်ပြီး နောက်ဆုံး ဆုံးသွားတဲ့ အမှတ်ကတော့ (1, -2) မှာ ဆုံးသွားပါတယ်။ စမှတ်နဲ့ ဆုံးမှတ် ရဲ့ အကွာအဝေးကို တွက်တဲ့ နေရာမှာတော့ abs(x) + abs(y) Formula နဲ့တွက်ပါတယ်။ အပေါ်က ပုံ အရကတော့ စမှတ်နဲ့ ဆုံးမှတ်ဟာ 3 blocks အကွာအဝေးရှိတယ်ဆိုတဲ့ သဘောပါ။ ဒီနေရာမှာ ကျွန်တော်တို့ ပကတိတန်ဘိုး (absolute value) ယူရတဲ့ အကြောင်းရင်းကတော့ အကွာအဝေးမှာ အနှုတ်လက္ခဏာဟာ ဆန့်ကျင်ဘက် ဦးတည်ချက်ကို ဆိုလိုတဲ့အတွက် တွက်ချက်တဲ့နေရာမှာ ပကတိတန်ဘိုးကို ယူပြီးတွက်ရတာပါ။

ဒီ Game ကို Mote Carlo Simulation နဲ့ Run ကြည့်ရင်တော့ အောက်ဖော်ပြပါ စိတ်ဝင်စားစရာ ရွေ့လျားမှုကို တွေ့မြင်နိုင်မှာပါ။

Sample Walking Pattern
Sample Walking Pattern

ဒီအတိုင်း Walking လုပ်ရတာဟာ စိတ်ဝင်စားဖို့ မကောင်းပေမယ့် တကယ်လို့ ကျွန်တော်ဟာ Story တစ်ခုကို ဖန်ဆင်းပြီး ပြောမယ်ဆိုရင် ပိုပြီး စိတ်ဝင်စားဖို့ကောင်းပါလိမ့်မယ်။

Company တစ်ခုဟာ Jack ဆိုတဲ့ ပုဂ္ဂိုလ်ကို အပေါ်က Random Walk လျှောက်လမ်းအတိုင်း Taxi စီးပြီးသွား ခိုင်းမယ်ဆိုပါစို့။ တကယ်လို့ Jack ဟာ Random Walk အတိုင်း သွားပြီး စမှတ်နဲ့ ဆုံးမှတ်ဟာ 4 blocks နဲ့ 4 blocks အတွင်းမှာ ရှိနေမယ်ဆိုရင် Company ဟာ Jack ကို Taxi ခပေးမယ်။ စမှတ်နဲ့ ဆုံးမှတ်ဟာ 4 blocks ကျော်သွားမယ်ဆိုရင်တော့ Taxi ခ Jack ကိုယ်တိုင် ကျခံရမယ်ဆိုပါစို့။

What is the longest random walk Jack can take so that on average Jack will end up 4 blocks or fewer from origin?

အဲ့မှာ သိချင်တာက Jack ဟာ စမှတ်နဲ့ ဆုံးမှတ် အကွာအဝေး အနေနဲ့ 4 blocks နဲ့အောက်ဖြစ်ပြီး ပျမ်းမျှအားဖြင့် အများဆုံးခြေဘယ်နလှမ်း လှမ်းနိုင်မှာလဲ။

သေချာတာ တစ်ခုကတော့ တကယ်လို့ Jack ဟာ ခြေ ၁ လှမ်းကနေ ၄ လှမ်းကြား လှမ်းမယ်ဆိုရင် Jack ဟာ သေချာပေါက် ၁၀၀ ရာခိုင်နှုန်း Taxi ခရမှာပါ။ အကြောင်းရင်းကတော့

ခြေ ၁ လှမ်းလှမ်းရင် စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ၁၀၀% ရှိနေပါတယ်။ခြေ ၂ လှမ်းလှမ်းရင် စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ၁၀၀% ရှိနေပါတယ်။ခြေ ၃ လှမ်းလှမ်းရင် စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ၁၀၀% ရှိနေပါတယ်။ခြေ ၄ လှမ်းလှမ်းရင် စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ၁၀၀% ရှိနေပါတယ်။ခြေ ၅ လှမ်းလှမ်းရင် စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ?% ရှိနေမှာလဲ။ခြေ ၆ လှမ်းလှမ်းရင် စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ?% ရှိနေမှာလဲ။

ဒီနေရာမှာ ခြေလှမ်းတဲ့ ပမာဏနဲ့ Taxi လှမ်းတဲ့ပမာဏ (သွားတဲ့ ပမာဏ) အတူတူပဲ လို့ မှတ်ယူပေးပါ။

သိချင်တာက

စမှတ်နဲ့ ဆုံးမှတ်အကွာအဝေးဟာ ၄ နဲ့အောက်မှာ ၅၀% ရှိဖို့ ခြေ ဘယ်နလှမ်း လှမ်းရမှာလဲ။

ဒီနေရာမှာ ပျမ်းမျှဆိုတဲ့ အသုံးအနှုန်းကို သတိထားပါ။

ဒီတော့ ဘယ်လို ဖြေရှင်းနိုင်မှာလဲ။ စာရွက်ပေါ်ကို ချပြီး ပုံဆွဲလမ်းလျှောက်ကြည့်ကြမလား။ ဒါကတော့ တော်တော် ကြိုးကြိုးစားစားနဲ့ လုပ်မှ ရလဒ်ကို သိနိုင်မှာပါ။

အလွယ်ဆုံးနည်းကတော့ ကျွန်တော်တို့ Random Walk နဲ့ Mote Carlo Simulation ကို လုပ်ပြီး ရလဒ်ကို ရှာဖွေရာမှာ ပိုပြီး သဘာဝကျပါတယ်။

Simulation လုပ်ရာမှာ ခြေလှမ်း ၁ လှမ်း ကနေ ၃၁ လှမ်း အထိ လျှောက်မယ်လို့ ယူဆရအောင်။ (1, 2, 3, …, 31)

(1, 2, 3, …, 31) ထဲက ခြေလှမ်းကို ၁ ခါလှမ်းရင် အကြိမ် ၁၀၀၀ စမ်းပြီး လှမ်းကြည့်ပါမယ်။

ခြေလှမ်း 1 လှမ်းကို - အကြိမ် 1000
ခြေလှမ်း 2 လှမ်းကို - အကြိမ် 1000
ခြေလှမ်း 3 လှမ်းကို - အကြိမ် 1000
...
ခြေလှမ်း 31 လှမ်းကို - အကြိမ် 1000

သတ်မှတ်တဲ့ ခြေလှမ်းလှမ်းပြီးလို့ နောက်ဆုံး စမှတ်နဲ့ ဆုံးမှတ်ဟာ ၄ နဲ့ အောက် အကွာအဝေးမှာရှိလား၊ ရှိရင် လမ်းစရိတ်ရမယ်။

import randomdef random_walk(steps):    x, y = (0, 0)    for i in range(steps):        (dx, dy) = random.choice([(0, 1), (0, -1), (1, 0), (-1, 0)])        x += dx        y += dy    return (x, y)
number_of_walks = 1000walk_size = list()for walk_length in range(1, 31):    get_transport = 0    for i in range(number_of_walks):        (x, y) = random_walk(walk_length)        distance = abs(x) + abs(y)        if distance <= 4:            get_transport += 1    get_transport_percentage = float(get_transport) / number_of_walks    walk_size.append((walk_length, get_transport_percentage))    print(f"Walk size = {walk_length} / % of get transport cost = {100 * get_transport_percentage}")max_walk_size = sorted(    [(x, y) for x, y in     sorted(walk_size, key=lambda x: x[-1])     if y > 0.5], key=lambda x: x[0], reverse=True)[0]print(f"The max walk size you can do {max_walk_size}.")

အပေါ်က Program ကို Run လိုက်ရင်တော့ အောက်ဖော်ပြပါ ရလဒ်ကို ရကြမှာပါ။

Walk size = 1 / % of get transport cost = 100.0 
Walk size = 2 / % of get transport cost = 100.0
Walk size = 3 / % of get transport cost = 100.0
Walk size = 4 / % of get transport cost = 100.0
Walk size = 5 / % of get transport cost = 89.4
Walk size = 6 / % of get transport cost = 94.19999999999999
Walk size = 7 / % of get transport cost = 77.7
Walk size = 8 / % of get transport cost = 86.7
Walk size = 9 / % of get transport cost = 66.3
Walk size = 10 / % of get transport cost = 79.5
Walk size = 11 / % of get transport cost = 58.699999999999996
Walk size = 12 / % of get transport cost = 74.3
Walk size = 13 / % of get transport cost = 52.7
Walk size = 14 / % of get transport cost = 67.30000000000001
Walk size = 15 / % of get transport cost = 48.199999999999996
Walk size = 16 / % of get transport cost = 61.4
Walk size = 17 / % of get transport cost = 43.8
Walk size = 18 / % of get transport cost = 58.9
Walk size = 19 / % of get transport cost = 40.5
Walk size = 20 / % of get transport cost = 53.900000000000006
Walk size = 21 / % of get transport cost = 40.300000000000004
Walk size = 22 / % of get transport cost = 51.5 <== ပျမ်းမျှ(50%)
Walk size = 23 / % of get transport cost = 35.699999999999996
Walk size = 24 / % of get transport cost = 47.8
Walk size = 25 / % of get transport cost = 33.900000000000006
Walk size = 26 / % of get transport cost = 45.300000000000004
Walk size = 27 / % of get transport cost = 31.5
Walk size = 28 / % of get transport cost = 41.199999999999996
Walk size = 29 / % of get transport cost = 29.799999999999997
Walk size = 30 / % of get transport cost = 39.300000000000004
The max walk size you can do (22, 0.515).

မေးခွန်းကို ပြန်ကြည့်မယ်ဆိုရင်

အဲ့မှာ သိချင်တာက Jack ဟာ စမှတ်နဲ့ ဆုံးမှတ် အကွာအဝေး အနေနဲ့ 4 blocks နဲ့အောက်ဖြစ်ပြီး ပျမ်းမျှအားဖြင့် အများဆုံးခြေဘယ်နလှမ်း လှမ်းနိုင်မှာလဲ။

အများဆုံးခြေလှမ်း ၂၂ လှမ်းနိုင်ပါတယ်။

ဒီပုစ္ဆာကိုတော့ ကျွန်တော်တို့ Monte Carlo Simulation ကို အသုံးပြုပြီး အဖြေရှာလိုက်တာပဲ ဖြစ်ပါတယ်။ Walk pattern ကို ပြပါဆိုရင်တော့

Walking pattern with 22 walk steps where start and end in 4 blocks away.
Walking pattern with 22 walk steps where start and end in 4 blocks away.

ဒီ Simulation ရဲ့ ရလဒ်ကနေ ပိုပြီး စိတ်ဝင်စားဖို့ ကောင်းတာ နောက်တစ်ခုကတော့ အကြိမ် 300 ခြေလှမ်း လှမ်းခိုင်းပါမယ်။ ဒါပေမယ့် စမှတ်နဲ့ ဆုံးမှတ် အကွာအဝေး ၄ နဲ့အောက်ရှိတဲ့ Walking Pattern ကို ရှာပါ ဆိုတဲ့ ပုစ္ဆာကိုလည်း ဖြေရှင်းလို့ရပါသေးတယ်။ Walking Pattern ကိုတော့ အောက်ဖော်ပြပါ ပုံအတိုင်းပဲ ဖြစ်ပါတယ်။

Walking pattern with 300 walk steps where start and end in 4 blocks away.

သဘာဝရဲ့ ကျပန်းဖြစ်တည်မှုဟာ တော်တော်ကို စိတ်ဝင်စားဖို့ကောင်းပါတယ်။ ဘာလို့လဲဆိုတော့ ကျပန်းဖြစ်တည်မှုနဲ့ Monte Carlo Simulation ကို အသုံးချပြီး ခက်ခဲတဲ့ ပုစ္ဆာတော်တော်များများကို ဖြေရှင်းနိုင်လို့ပါပဲ။

ဒီ Post ကိုတော့ ကျွန်တော့် ဒီလောက်နဲ့ပဲ ရပ်နားခွင့်ပြုပါခင်ဗျာ... ဒီ Post မှာတော့ သဘာဝ ကျပန်းဖြစ်စဉ်တွေကို သင်္ချာဆိုင်ရာ Graph တွေပေါ်မှာ ဘယ်လို ဖော်ပြနိုင်လဲ၊ ကျပန်းဖြစ်စဉ်နဲ့ Monte Carlo Simulation ကို အသုံးပြုပြီး ခက်ခဲတဲ့ သက်သေပြချက်တွေ ကို ဖြေရှင်းနိုင်ပုံ စတာတွေကို ဆွေးနွေးသွားခဲ့ပြီးပါပြီ။

လာမယ့် Post မှာတော့ Randomness နဲ့ Monte Carlo Simulation ကို အသုံးပြုပြီး နာမည်ကြီး Company တွေက Recommender System ကို ဘယ်လို တည်ဆောက်ခဲ့လဲ ဆိုတဲ့ Post နဲ့ ပတ်သက်ပြီး ဆွေးနွေးသွားဖို့ အစီအစဉ်ရှိပါတယ်။

လာမယ့် Post မှာ တွေ့ကြရအောင်ဗျာ... 👋

--

--

Sai Htaung Kham

Research Engineer working on AI. Make things work beyond its limitation.