မောင်သာအေး(အယူခံတရားလို) နှင့် ဘုရင်ဧကရာဇ် (တရားပြိုင်) [The Burma Law Journal, Volume 5 – 1926, pp.177-178]
++++++++++++++++++++++++++
သင်္ချာ၊ ကွန်ပျူတာသိပ္ပံ၊ ဉာဏ်ရည်တုပညာ နှင့် ဥပဒေ ဆိုင်ရာ သုတ ရသ ဆောင်းပါးများ
မောင်သာအေး(အယူခံတရားလို) နှင့် ဘုရင်ဧကရာဇ် (တရားပြိုင်) [The Burma Law Journal, Volume 5 – 1926, pp.177-178]
++++++++++++++++++++++++++
နိုင်ငံတကာ ဥပဒေတွေရဲ့ ဆင့်ကဲပြောင်းလဲလာမှု သမိုင်းကြောင်းကို လေ့လာကြည့်ရင်၊ အုပ်ချုပ်သူ အာဏာပိုင်တွေရဲ့ လောဘ ဒေါသ မောဟ မာန်မာန အာဃာတ၊ လူအများအတွက် တရားမျှတမှု ဆုံးရှုံးခြင်း နဲ့ လူကောင်းတွေက မတရားမှုအပေါ် နှုတ်ဆိတ်နေမှုတွေဟာ၊ အဆုံးစွန်သော ပဋိပက္ခများဆီသို့ အမြဲတစေ ဦးတည်သွားလေ့ရှိတယ်ဆိုတာကို တွေ့ရမှာဖြစ်တယ်။ ‘မဟာဘာရတ’ ဇာတ်တော်ကြီးဟာ ခေတ်အဆက်ဆက်မှာရှိတဲ့၊ ဥပဒေပညာရှင်တွေနဲ့ အုပ်စိုးသူတွေအတွက် အလွန် အဖိုးတန်တဲ့ လမ်းညွှန်မှုအမွေအနှစ်ကို ပေးအပ်ခဲ့တယ်။ ဥပဒေပြုသူတွေနဲ့ တရားမျှတမှုကို ဖေါ်ဆောင်ပေးဖို့ တာဝန်ရှိသူတွေဟာ ဥပဒေပြဌာန်ချက်စာသား (Letter of the Law) ကိုပဲ အသေဆုပ်ကိုင်ထားပြီး၊ ဥပဒေရဲ့ အသက်သွေးကြော ဝိညာဉ်ဖြစ်တဲ့ တရားမျှတမှု (Spirit of the Law) ကို မျက်ကွယ်ပြုလိုက်ရင်၊ လူအပေါင်းတို့ရဲ့ ကိုးစားယုံကြည်မှု ပျက်သုဉ်းသွားပြီး၊ လူ့အဖွဲ့အစည်း တစ်ခုလုံး သွေးချောင်းစီး စစ်ပွဲတွေအတွင်း မလွဲမသွေ ကျရောက်သွားနိုင်တယ်ဆိုတာကို ‘မဟာဘာရတ’ ဇာတ်တော်ကြီး က သက်သေပြနေတယ်။
သင်္ချာလောကရဲ့ 'ထောင်စုနှစ် ဆုကြေးပုစ္ဆာကြီး' (Millennium Prize Problems) ၇-ရပ် အနက် တစ်ခုအပါအဝင်ဖြစ်ပြီး ထင်ရှားလှတဲ့ ‘နာဗီယာ-စတုတ် ညီမျှခြင်းများ (Navier-Stokes equations)’ နဲ့ သက်ဆိုင်တဲ့ အခြေအနေတစ်ခုအတွက်၊ ကွန်ပျူတာစွမ်းအင် အမေရိကန်ဒေါ်လာ ၁၅ သန်းဖိုးခန့် အသုံးပြုတွက်ချက်ပြီး အဖြေကို တွေ့ရှိပြီဖြစ်ကြောင်း OpenAI က ကြေညာခဲ့တယ်။ [[အဆိုပါ အဖြေကို ရဖို့ AI အေးဂျင့်ပေါင်း တစ်သောင်းခန့်ကို ၈၈ နာရီနီးပါးကြာ မောင်းနှင်ခဲ့ရတယ်လို့ ဆိုတယ်။]]
ဒီကြေညာချက်မှာ
ချက်ချင်းဆိုသလိုပဲ အငြင်းပွားဖွယ်ရာ ဖြစ်လာခဲ့တယ်။ နယူးယောက် တက္ကသိုလ်က သင်္ချာပညာရှင်တွေဖြစ်တဲ့ ‘ထရစ်စတန်
ဘက်မတ်စတာ (Tristan
Buckmaster)’ နဲ့ ‘လီဗန့် အယ်လ်ပိုဂီ (Levent Alpöge)’
တို့က၊ ၎င်းတို့အနေနဲ့ အဆိုပါ ပုစ္ဆာအတွက် အလားအလာကောင်းသော ဖြေရှင်းနိုင်မည့် လမ်းကြောင်းတစ်ခုကို တွေ့ရှိထားပြီးဖြစ်ကြောင်း ပြောကြားခဲ့တယ်။ ၎င်းတို့ရဲ့ သုတေသန တိုးတက်မှုကို သိရှိသွားသည်နဲ့ တစ်ပြိုင်နက်၊ အဆိုပါ တွေ့ရှိမှုအဖြေကို အပိုင်စီးဖို့ OpenAI က ခြေလှမ်းပြင်ခဲ့တာဖြစ်တယ်လို့၊ ‘ဘက်မတ်စတာ’ က လူသိရှင်ကြား စွပ်စွဲထားတယ်။
နည်းပညာကုမ္ပဏီတွေက
ဒီလို တွေ့ရှိမှုတွေအတွက် အောင်ပွဲခံနေပေမဲ့၊ UCLA တက္ကသိုလ်က၊ ထင်ရှားကျော်ကြားတဲ့
သင်္ချာပညာရှင် ‘ထယ်ရင့်စ်
တောင်း’ (Terence
Tao) က, OpenAI နဲ့ ၎င်းတို့ရဲ့
ချဉ်းကပ်ပုံကို ပြင်းပြင်းထန်ထန် ဝေဖန်ခဲ့တယ်။ နည်းပညာကုမ္ပဏီတွေရဲ့ အလောတကြီးနဲ့ ပွင့်လင်းမြင်သာမှုမရှိတဲ့ ကြေညာချက်တွေဟာ "သင်္ချာပညာရှင်တွေရဲ့ စားပွဲပေါ်ကို အသားတုံးကြီးတွေ အစိမ်းလိုက် ပစ်တင်ပေးပြီး ထွက်သွားခြင်း" နဲ့ တူတယ်လို့ ‘တောင်း’
က ခိုင်းနှိုင်းခဲ့တယ်။
ဒါ့အပြင်
သူက အဖြေရှာမရသေးသော
ပုစ္ဆာတွေ (open
problems) ကို အလိုအလျောက်စနစ်တွေနဲ့ ဖြေရှင်းနေခြင်းကို
'ရှေးဟောင်းသုတေသန တူးဖော်ရေးနေရာတစ်ခုကို စက်ယန္တရားကြီးများသုံး၍
တူးဆွနေခြင်း' နဲ့ ခိုင်းနှိုင်းထားတယ်။ ဒီလုပ်ရပ်ဟာ အနာဂတ် သုတေသီတွေကို လေ့ကျင့်သင်ကြားပေးရာမှာ သင်္ချာဆိုင်ရာ တွေ့ရှိမှုတွေရဲ့ ရေရှည်တန်ဖိုးကို ဖြစ်ပေါ်စေသော နောက်ခံအကြောင်းတရားများကို
ဖျက်ဆီးပစ်လိုက်ခြင်းပင်
ဖြစ်တယ်။
ဂုဏ်သတင်းအတွက်
အပြင်းအထန် ယှဉ်ပြိုင်နေကြတဲ့ ဒီလုပ်ရပ်ဟာ သိပ္ပံပညာရဲ့ အရေးအကြီးဆုံး ကဏ္ဍဖြစ်တဲ့ အခြေခံသီအိုရီများ တည်ဆောက်ခြင်း၊ မျိုးဆက်သစ်များကို သင်ကြားပေးခြင်းနဲ့ အဖြေတစ်ခုဟာ အဘယ်ကြောင့် မှန်ကန်နေရသည်ကို ရှင်းလင်းပြသခြင်း ဆိုတဲ့ လူသားသင်္ချာပညာရှင်တွေရဲ့ လုပ်ငန်းစဉ်တွေကို
ကျော်လွန်ပစ်လိုက်ခြင်းပင်ဖြစ်တယ်လို့
သူက ထောက်ပြတယ်။
သင်္ချာပညာရပ်ရဲ့
အနာဂတ်ကို ကာကွယ်ဖို့အတွက်၊ တချို့သော သင်္ချာပုစ္ဆာ အမျိုးအစားတွေကို အလိုအလျောက် ဖြေရှင်းပေးသော စနစ်များ (automated
solvers) နဲ့ ဖြေရှင်းခွင့်မပြုဘဲ 'ကန့်သတ်နယ်မြေ' အဖြစ် သတ်မှတ်ဖို့ ပြတ်သားတဲ့ခြေလှမ်းတစ်ရပ်ကို
‘တောင်း’က အကြံပြုခဲ့တယ်။
သင်္ချာပညာဆိုတာ
လူသားတို့ရဲ့ လေ့လာတွေ့ရှိချက်တွေအပေါ်မှာ
အခြေခံ တည်ဆောက်ထားခြင်းဖြစ်တဲ့အတွက်၊
လူသားတို့ရဲ့ ဉာဏ်ဖြင့် ထိုးထွင်းသိမြင်နိုင်စွမ်း
(intuition) ကို လုံးဝ ဥပေက္ခာပြုလိုက်ခြင်းဟာ အခုမှစတင်လေ့လာမဲ့
သုတေသီတွေကို ဖယ်ကြဉ်ရာရောက်နိုင်တဲ့ အန္တရာယ်ရှိသလို၊ သင်္ချာပညာကို သင်ကြားပေးတဲ့ပုံစံနဲ့ မှန်ကန်ကြောင်း သက်သေပြတဲ့ လုပ်ငန်းစဉ်တွေကိုလည်း
ကမောက်ကမ ဖြစ်သွားစေနိုင်တယ်။
သင်္ချာပညာရဲ့
အန္တိမတန်ဖိုးက၊ အဖြေထုတ်ပေးရုံ
သက်သက်မဟုတ်ဘဲ ရှုပ်ထွေးခက်ခဲသော ပြဿနာများကို ဖြေရှင်းနိုင်ရန် စိတ်ကို လေ့ကျင့်ပေးခြင်းသာ ဖြစ်တယ်။ အဲ့ဒီလိုအခြေအနေမှာ AI
လက်ထဲကို အလုံးစုံ ထိုးအပ်လိုက်ခြင်းဟာ၊ AI ကို
ဖန်တီးပေးခဲ့တဲ့ ဒီပညာရပ်နယ်ပယ်ကိုပင်
ပြန်လည် ညစ်ညမ်းသွားစေနိုင်တယ်။
သိပ္ပံပညာ
ရေရှည်တည်တံ့စွာ တိုးတက်စေဖို့အတွက်၊ နည်းပညာ ကုမ္ပဏီကြီးတွေ အနေနဲ့ ကိုယ်ကျိုးစီးပွားအတွက် အလျင်စလို လုပ်ဆောင်ခြင်းထက်၊ ပူးပေါင်းပါဝင်မှုနဲ့ ပွင့်လင်းမြင်သာမှုရှိခြင်းကို
ဦးစားပေး လုပ်ဆောင်ကြရမှာဖြစ်တယ်။
ဒီနေရာမှာ
အရေးအကြီးဆုံးနဲ့ အခြေခံအကျဆုံးဖြစ်တဲ့ ပြဿနာက၊
AI သည် ခက်ခဲသော ပုစ္ဆာများကို ဖြေရှင်းနိုင်စွမ်း ရှိ၊ မရှိ ဆိုသည့်အချက် မဟုတ်ဘူး။ တကယ်တော့ ၎င်း
AI က၊ လူတွေထက်ကို ပိုပြီး
ပြဿနာတွေကို ဖြေရှင်းလာနိုင်ပါတယ်။
ဒါပေမဲ့ အဓိက မေးခွန်းထုတ်ဖို့က၊ ၎င်းအဖြေများ
ထုတ်ယူရာမှာ အသုံးပြုတဲ့၊ ‘အလျင်စလို လုပ်ဆောင်မှုနဲ့ လျှို့ဝှက်ထားမှု’ တို့က သင်္ချာပညာရပ်ရဲ့ ရာစုနှစ်ပေါင်းများစွာ အမှတ်လက္ခဏာဖြစ်ခဲ့တဲ့
'ပူးပေါင်းဆောင်ရွက်ခြင်းနဲ့
သင်ကြားပြသနိုင်ခြင်း'
ဆိုတဲ့ လုပ်ငန်းစဉ်တွေကို တိတ်တဆိတ် တိုက်စား ဖျက်ဆီးပစ်နေသလား ဆိုတဲ့အချက်ပဲ ဖြစ်တယ်။
ရင်းမြစ် - Choi, W. (2026). Fields Medalist Warns AI's Math Rush Undermines Discipline's Process. The Chosun Daily.
တက္ကသိုလ်တစ်ခုမှာ၊ ဘွဲ့ယူစာတမ်း တစ်ခု ရေးသားစေတဲ့အခါ၊ ပထမဦးဆုံး အနေနဲ့၊ ကျောင်းသားကို ၎င်းရေးသားမဲ့ ဘွဲ့လွန်စာတမ်း ခေါင်းစဉ် (title)၊ လေ့လာမှု နည်းလမ်း (method) နဲ့ ရည်ညွန်းကိုးကား (references) အတိုချုပ်ကို စုစုပေါင်း စာ တစ်မျက်နှာစာ (A4 ဖြင့်) အဆိုပြု တင်သွင်းစေတာကို တွေ့ရတယ်။ သက်ဆိုင်ရာ ပါမောက္ခက စာတမ်းခေါင်းစဉ်ကို၊ လက်ခံ အတည်ပြုပြီးတဲ့အခါမှာ၊ ဒုတိယအဆင့်အနေနဲ့ ကျောင်းသားကို ၎င်းရေးသားမဲ့ ဘွဲ့လွန်စာတမ်းရဲ့ မာတိကာ (Table of Contents) ကို တင်ပြစေပါတယ်။ ၎င်း မာတိကာ (မည်သည့် ရေးသားချက်မှ မပါသော၊ ခေါင်းစဉ် သက်သက်) ကိုကြည့်ပြီး၊ သက်ဆိုင်ရာ ကျမ်းကြီးကြပ်သူပါမောက္ခက၊ “ဖြုတ် နှုတ် ပယ် ထပ်ဖြည့် “ စတာတွေကို ခိုင်းစေပြီး၊ ၎င်း အတည်ပြုပေးသော Table of Contents အတိုင်း၊ ကျောင်းသားကို ကျမ်းပြုစေတယ်။
၂၀၂၆၊ မတ် ၂၈ ရက်နေ့မှာ၊ ဂျပန်နိုင်ငံ NHK ရုပ်သံက ထုတ်လွှင့်ခဲ့တဲ့ "有罪、とAIは告げた" (Guilty, the AI Said) ရုပ်ရှင်ကားဟာ၊ ခေတ်သစ်လူ့အဖွဲ့အစည်းရဲ့ ရှေ့မှောက်ကို၊ အလွန်လေးနက်သိမ်မွေ့တဲ့ မေးခွန်းတစ်ခုချပြလာခဲ့တယ်။ ဉာဏ်ရည်တု (AI) နည်းပညာတွေဟာ လူ့ဘဝရဲ့ နယ်ပယ်အသီးသီးကို၊ နက်ရှိုင်းစွာ ဝင်ရောက်လာနေချိန်မှာ ဒီဇာတ်ကားက လူသားတို့ရဲ့၊ တရားစီရင်ရေးမဏ္ဍိုင်အတွင်းကို AI က ဘယ်လိုနေရာယူလာနိုင်သလဲဆိုတာ ထိတ်လန့်ဖွယ်ဖွယ် စဉ်းစားဖွယ် ပုံဖော်ပြထားတယ်။
လူသားတို့၏
တရားစီရင်ရေးနှင့်
စက်ယန္တရား၏ ယုတ္တိ
************************
ဥပဒေဆိုဆိုတာ
လူ့အဖွဲ့အစည်းကို တရားမျှတစွာ
ထိန်းသိမ်းရန် ဖန်တီးထားတဲ့ စည်းမျဉ်းဖြစ်ပေမဲ့၊ ၎င်းကို
အကောင်အထည်ဖော်ရာမှာ 'လူသားတို့ရဲ့ ကရုဏာစိတ်'
(Human Empathy) နဲ့
တရားစီရင်မှုတစ်ခုအတွက် 'အခြေအနေအရပ်ရပ်ကို ချိန်ဆခြင်း' (Judicial
Discretion) တို့က
အမြဲတမ်း အဓိကကျတဲ့ နေရာက ပါဝင်ခဲ့တယ်။
ကြားနေမှု၏
အယောင်ဆောင်ခြင်းနှင့်
Black-Box ပြဿနာ
************************
နည်းပညာပိုင်းဆိုင်ရာနဲ့
နက်ရှိုင်းစွာမရင်းနှီးသူအများစုက၊ AI ဟာ
အီမိုးရှင်း စိတ်ခံစားချက်မပါတဲ့အတွက် ဘက်လိုက်မှုကင်းတယ်၊
ယုတ္တိတန်တယ်လို့၊ လွယ်လွယ်ယူဆတတ်ကြတယ်။ တကယ်တမ်းက၊ အေအိုင်တွေဟာ လူသားတို့
ရေးဆွဲခဲ့တဲ့၊ စုဆောင်းသိမ်းဆည်းထားတဲ့၊
ထည့်သွင်းပေးထားတဲ့၊ လေ့ကျင့်ပေးထားတဲ့၊ အချက်အလက် ဒေတာ နဲ့ ဘက်လိုက်မှုတွေကို အမွေဆက်ခံထားခြင်းသာ ဖြစ်တယ်။
မည်သူ့တွင်
တာဝန်ရှိသနည်း
နှင့် လူသားဖြစ်တည်မှု၏ တန်ဖိုး
**********************
ဒဿနိကဗေဒအရ
အဓိက အမေးထုတ်စရာက "အမှားတစ်ခုအတွက် မည်သူ့ကို တာဝန်ခံခိုင်းမည်နည်း"
ဆိုတဲ့ အချက်ဖြစ်တယ်။
နိဂုံး
နိဂုံးချုပ်အနေနဲ့
ဒီ ရုပ်ရှင်ဟာ အနာဂတ်ကမ္ဘာရဲ့ “ဥပဒေ၊
တရားစီရင်ရေး နဲ့ တရားမျှတမှု” ဆိုင်ရာ ကိစ္စရပ်တွေအတွက် ကြိုတင်သတိပေးချက်တစ်ခု
ဖြစ်တယ်။ ဒီ "Guilty, the AI
Said" ရုပ်ရှင်ဟာ နည်းပညာရဲ့
အရှိန်အဟုန်နဲ့ စွမ်းရည်ကို
အံ့ဩရင်း၊ လူသားတို့ရဲ့၊ ဖြစ်တည်မှု အနှစ်သာရနဲ့ လူ့ဘဝတန်ဖိုးကို
ပြန်လည်ရှာဖွေတွေ့ရှိစေမဲ့
ရသမြောက် ရုပ်ရှင်လက်ရာကောင်း တစ်ခု ဖြစ်တယ်လို့ ဆိုချင်ပါတယ်။ နည်းပညာဟာ
ကျွန်တော်တို့ရဲ့ လက်ထောက်ကောင်းတစ်ဦး
ဖြစ်နိုင်ပေမဲ့၊ လူသားတို့ရဲ့
ကံကြမ္မာနဲ့ တရားမျှတမှုကို
ဆုံးဖြတ်ပေးမဲ့ အရာတစ်ခုတော့
ဘယ်လိုမှ ဖြစ်မလာသင့်ဘူး။
Stuart Russell နဲ့ Peter Norvig တို့ရဲ့ "Artificial Intelligence: A Modern Approach" စာအုပ်၊ အခန်း ၄ တွင် ရှင်းပြထားသော "Local Search Algorithms" များထဲမှ Hill-climbing algorithm သည် လက်ရှိအခြေအနေ (Current State) မှနေ၍ ပိုမိုကောင်းမွန်သော အိမ်နီးချင်းအခြေအနေ (Neighbor State) သို့ အစဉ်မပြတ် ရွေးချယ်သွားသော နည်းလမ်းဖြစ်ပါသည်။
8-Queens ပြဿနာကို Hill-climbing ဖြင့် ဖြေရှင်းရာတွင် အောက်ပါအတိုင်း ဖွဲ့စည်း (Formulate) ပါသည်-
State Representation (အခြေအနေ ကိုယ်စားပြုပုံ):
ဘုတ်ပြားပေါ်တွင် ဘုရင်မ (Queen) ၈ ပါးလုံးကို ကော်လံ (Column) တစ်ခုလျှင် တစ်ပါးစီ ချထားသည့် ပုံစံဖြင့် စတင်ပါသည်။ ထို့ကြောင့် ကော်လံ ၈ ခုတွင် ရှိနေသော ဘုရင်မများ၏ အတန်း (Row) နေရာများကို [0, 4, 7, 5, 2, 6, 1, 3] စသည့် 1D Array ဖြင့် ကိုယ်စားပြုနိုင်ပါသည်။
Heuristic Function ($h$):
အချင်းချင်း တိုက်ခိုက်နိုင်သော (Attacking pairs) ဘုရင်မ အစုံအရေအတွက် ဖြစ်ပါသည်။ ပန်းတိုင် (Goal State) တွင် မည်သည့်ဘုရင်မမှ အချင်းချင်း မစားနိုင်ရသဖြင့် $h = 0$ ဖြစ်ရပါမည်။
Neighbor (အိမ်နီးချင်း အခြေအနေ):
ကော်လံတစ်ခုရှိ ဘုရင်မတစ်ပါးကို အခြားသော အတန်း (Row) တစ်ခုခုသို့ ရွှေ့လိုက်ခြင်းကို Neighbor ဟု သတ်မှတ်ပါသည်။ ကော်လံ ၈ ခု၊ ကော်လံတစ်ခုလျှင် ပြောင်းရွှေ့နိုင်သော အတန်း ၇ ခု ရှိသဖြင့် စုစုပေါင်း Neighbor ၅၆ ခု ($8 \times 7 = 56$) ရှိပါသည်။
Action:
လက်ရှိ $h$ တန်ဖိုးထက် ပိုနည်းသော (ပိုကောင်းသော) Neighbor ကို ရွေးချယ်သွားပါသည်။
Hill-climbing ၏ အဓိက အားနည်းချက်မှာ Local Maxima (သို့မဟုတ် $h$ တန်ဖိုးအရ Local Minima) တွင် ပိတ်မိတတ်ခြင်း ဖြစ်ပါသည်။ လက်ရှိအခြေအနေသည် ပန်းတိုင်ရောက်မနေသော်လည်း ($h > 0$)၊ ရွှေ့၍ရနိုင်သော အိမ်နီးချင်း ၅၆ ခုလုံး၏ $h$ တန်ဖိုးများသည် လက်ရှိတန်ဖိုးထက် ကြီးနေလျှင် သို့မဟုတ် တူညီနေလျှင် Algorithm သည် ရှေ့ဆက်မတိုးနိုင်တော့ဘဲ ရပ်တန့်သွားပါသည်။
ဤပြဿနာကို ဖြေရှင်းရန် Random-restart hill-climbing ကို အသုံးပြုပါသည်။ ၎င်း၏ အခြေခံသဘောတရားမှာ "ပိတ်မိသွားတိုင်း အသစ်ကနေ ပြန်စမည် (If at first you don't succeed, try, try again)" ဖြစ်ပါသည်။ Local Maxima တွင် ရပ်တန့်သွားတိုင်း၊ လက်ရှိအခြေအနေကို စွန့်လွှတ်ကာ ကျပန်း (Random) အခြေအနေသစ် တစ်ခုကို ဖန်တီး၍ အစမှ ပြန်လည်ရှာဖွေပါသည်။ ပန်းတိုင်ရောက်သည်အထိ ($h=0$) ဤလုပ်ငန်းစဉ်ကို အကြိမ်ကြိမ် ပြန်လုပ်သောကြောင့် 8-Queens ပြဿနာကို အမြဲတမ်း ဖြေရှင်းပေးနိုင်ပါသည်။
import random
# ==========================================
# Heuristic Function ($h$) တွက်ချက်ခြင်း
# ==========================================
def calculate_heuristic(board):
"""
ဘုတ်ပြားပေါ်ရှိ အချင်းချင်း တိုက်ခိုက်နိုင်သော ဘုရင်မ အစုံ (Attacking pairs) အရေအတွက်ကို တွက်ပါသည်။
board: 1D List (ဥပမာ - [0, 4, 7, 5, 2, 6, 1, 3] အဓိပ္ပာယ်မှာ ကော်လံ 0 တွင် အတန်း 0 ၌ ရှိသည်...)
"""
attacking_pairs = 0
n = len(board)
# ကော်လံ တစ်ခုစီရှိ ဘုရင်မများကို ကျန်ရှိသော ကော်လံများမှ ဘုရင်မများနှင့် တိုက်ရိုက် နှိုင်းယှဉ်ပါမည်
for i in range(n):
for j in range(i + 1, n):
# 1. ရေပြင်ညီ အတန်း (Same Row) တူနေသလား စစ်ဆေးခြင်း
# 2. ထောင့်ဖြတ် (Diagonal) မျဉ်းပေါ်တွင် ရှိနေသလား စစ်ဆေးခြင်း
# (ကော်လံနှစ်ခုကြား အကွာအဝေး နှင့် အတန်းနှစ်ခုကြား အကွာအဝေး တူညီနေလျှင် ထောင့်ဖြတ်မျဉ်းပေါ်တွင် ရှိသည်)
if board[i] == board[j] or abs(board[i] - board[j]) == abs(i - j):
attacking_pairs += 1
return attacking_pairs
# ==========================================
# အကောင်းဆုံး အိမ်နီးချင်း (Best Neighbor) ကို ရှာဖွေခြင်း
# ==========================================
def get_best_neighbor(board):
"""
ရွှေ့နိုင်သော အိမ်နီးချင်း ၅၆ ခုလုံးကို ဖန်တီးပြီး၊ ၎င်းတို့အနက်မှ Heuristic အနည်းဆုံး (အကောင်းဆုံး)
အခြေအနေကို ရွေးချယ်ပေးပါမည်။
"""
best_board = list(board) # လက်ရှိ Board ကို ကနဦး အကောင်းဆုံးအဖြစ် မှတ်ထားပါမည်
min_h = calculate_heuristic(board)
n = len(board)
# ကော်လံ (col) ၈ ခုလုံးကို လှည့်ပတ်စစ်ဆေးမည်
for col in range(n):
# အတန်း (row) ၈ ခုလုံးသို့ ရွှေ့ကြည့်မည်
for row in range(n):
# လက်ရှိ ရှိနေသော အတန်း မဟုတ်မှသာ ရွှေ့ကြည့်မည် (Neighbor အသစ် ဖန်တီးခြင်း)
if board[col] != row:
neighbor = list(board) # လက်ရှိ ဘုတ်ပြားကို မိတ္တူကူးပါ
neighbor[col] = row # ဘုရင်မကို အတန်းသစ်သို့ ရွှေ့ပါ
neighbor_h = calculate_heuristic(neighbor)
# အကယ်၍ Neighbor အသစ်၏ $h$ သည် လက်ရှိအနည်းဆုံး $h$ ထက် ပိုနည်းလျှင် Update လုပ်မည်
if neighbor_h < min_h:
min_h = neighbor_h
best_board = neighbor
return best_board, min_h
# ==========================================
# Standard Hill-Climbing Algorithm
# ==========================================
def hill_climbing(board):
"""
ပေးထားသော ကနဦးအခြေအနေမှ စတင်၍ Local Maxima သို့မဟုတ် Goal State ရောက်သည်အထိ ရှာဖွေမည်။
"""
current_board = board
current_h = calculate_heuristic(current_board)
while True:
# အကောင်းဆုံး Neighbor ကို ရှာပါ
neighbor_board, neighbor_h = get_best_neighbor(current_board)
# အကယ်၍ အကောင်းဆုံး Neighbor ၏ $h$ တန်ဖိုးသည် လက်ရှိ $h$ ထက် မနည်းတော့လျှင်
# (ဆိုလိုသည်မှာ ပိုမကောင်းတော့လျှင်) Local Maxima တွင် ပိတ်မိသွားပြီ ဖြစ်သဖြင့် ရပ်တန့်ပါမည်။
if neighbor_h >= current_h:
return current_board, current_h
# ပိုကောင်းသော အခြေအနေသို့ ရွှေ့ပါ
current_board = neighbor_board
current_h = neighbor_h
# ==========================================
# Random-Restart Hill-Climbing Algorithm
# ==========================================
def random_restart_hill_climbing():
"""
Hill-Climbing လုပ်ရင်း Local Maxima တွင် ပိတ်မိသွားတိုင်း၊ ကျပန်း (Random) Board အသစ်တစ်ခု
ပြန်လည်ဖန်တီး၍ Goal State ($h = 0$) ရရောက်သည်အထိ ဆက်တိုက် Restart လုပ်သွားမည့် Main Function ဖြစ်ပါသည်။
"""
restarts = 0
n = 8 # 8-Queens
while True:
# ကျပန်း ဘုတ်ပြားအသစ် တစ်ခု ဖန်တီးခြင်း (ကော်လံတစ်ခုစီအတွက် 0 မှ 7 အတွင်း ကျပန်းအတန်းတစ်ခု ရွေးခြင်း)
initial_board = [random.randint(0, n - 1) for _ in range(n)]
# Hill-Climbing ဖြင့် ဖြေရှင်းကြည့်ခြင်း
final_board, final_h = hill_climbing(initial_board)
# အကယ်၍ ဖြေရှင်းပြီးသော Board ၏ $h$ သည် 0 ဖြစ်သွားလျှင် ပြဿနာပြေလည်သွားပြီ (Goal Test အောင်မြင်သည်)
if final_h == 0:
print(f"Goal State Found! (Total Restarts: {restarts})")
return final_board
# ပိတ်မိသွားလျှင် Restart အကြိမ်ရေကို မှတ်သား၍ အပေါ်မှ `while` လှည့်ပတ်မှုအတိုင်း ပြန်လည်စတင်မည်
restarts += 1
# ==========================================
# ရလဒ်ကို ပုံဖော်ပြသရန် Function (Visualization)
# ==========================================
def print_board(board):
n = len(board)
for row in range(n):
row_str = ""
for col in range(n):
if board[col] == row:
row_str += " Q " # ဘုရင်မ ရှိသောနေရာ
else:
row_str += " . " # လွတ်နေသောနေရာ
print(row_str)
print("\nArray Representation:", board)
# Program စတင်ခြင်း
if __name__ == "__main__":
print("Running Random-Restart Hill-Climbing for 8-Queens...\n")
solution = random_restart_hill_climbing()
print("\nFinal Solution Board:")
print_board(solution)
Memory အသုံးပြုမှု နည်းပါးခြင်း: State တစ်ခုလုံးကို ပြသရန် 8x8 2D Array ကြီးကို မသုံးဘဲ ကော်လံတစ်ခုလျှင် အတန်း (row index) ကိုသာ ကိုယ်စားပြုသော 1D Array (ဥပမာ [1, 3, 5, 7, 2, 0, 6, 4]) ကို အသုံးပြုထားသောကြောင့် တွက်ချက်မှု မြန်ဆန်စေပါသည်။
Steepest-Ascent: get_best_neighbor function တွင် Neighbor ၅၆ ခုလုံးကို လှည့်ပတ်စစ်ဆေးပြီးမှ အကောင်းဆုံးကိုသာ ရွေးချယ်သည့် အပြည့်စုံဆုံး (Steepest) နည်းလမ်းကို အသုံးပြုထားပါသည်။
Completeness: သာမန် Hill-climbing သည် Local Maxima ကြောင့် ဖြေရှင်းချက် ရှာမရဘဲ ရပ်တန့်နိုင်သော်လည်း၊ random_restart_hill_climbing ၏ while True: loop မှ ဖြေရှင်းချက် (Goal State) မရမချင်း Random အသစ်ပြန်လုပ်ပေးနေမည်ဖြစ်၍ ပြဿနာကို အမြဲတမ်း ဖြေရှင်းပေးနိုင်မည် (Complete ဖြစ်သည်)။