လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကျပန်းပေမယ့်မျှတသောချိန်ညှိချက်များအောင်မြင်ရန်ဂိမ်းဖွံ့ဖြိုးတိုးတက်မှုအတွက်ဇာတ်ကောင် attribute တွေ assign ဖို့ဘယ်လို?

ကျပန်းပေမယ့်မျှတသောချိန်ညှိချက်များအောင်မြင်ရန်ဂိမ်းဖွံ့ဖြိုးတိုးတက်မှုအတွက်ဇာတ်ကောင် attribute တွေ assign ဖို့ဘယ်လို?

gitbox 2025-08-30
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> <span class="hljs-string"><<<HTML
<!--
  ဤမှတ်ချက်、သရုပ်ပြဘို့သာအလုပ်လုပ်တဲ့ functions နှင့် styles တည်ရှိ,စာသားနှင့်အတူလုပ်ဖို့ဘာမှမရှိဘူး。
  သငျသညျစာသားသာလိုအပ်လျှင်,ကျေးဇူးပြု. အောက်ပါအလျားလိုက်လိုင်းမှစာဖတ်ခြင်းကိုစတင်ပါ。
-->
<style>
  body { font-family: system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; line-height: 1.65; max-width: 820px; margin: 2rem auto; padding: 0 1rem; }
  pre { overflow: auto; padding: .75rem; background: #f6f8fa; border-radius: 6px; }
  code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
</style>
<hr>

<h1>mt_srand ဂိမ်းဖွံ့ဖြိုးတိုးတက်မှုအတွက် character attribute တွေ assigter လုပ်နည်း,ကျပန်းပေမယ့်မျှတသော settings ကိုအောင်မြင်ရန်?</h1>

<p><strong>အကျဉ်းချုပ်</strong>:<code>mt_srand()

မှတ်ချက် - တိုက်ရိုက်မျိုးစေ့ကြဲရန် အချိန် () ကို မသုံးပါနှင့်။ mt_srand () ကို ခွဲဝေချထားပေးခြင်းလုပ်ငန်းစဉ်တွင်ထပ်ခါတလဲလဲမခေါ်ပါနှင့် - ခွဲဝေလုပ်ငန်းစဉ်၏အစတွင်တစ်ချိန်ကမျိုးစေ့ကိုကြဲပါ။

3 ။ Fair Segment "Total Fixed" attribute အချက်များ - ကျပန်းဖြတ် / ကြယ်များနှင့်ဘားများ

ဖြစ်ရပ် - attribute 6 ခု (အင်အား, sensitivity, ထောက်လှမ်းရေး, ထောက်လှမ်းရေး, ရုပ်ပိုင်းဆိုင်ရာ, လှုပ်ရှားမှု,

 
/**
 * သေတမ်းစာ totalPoints ကျပန်းအညီအမျှကဖြတ် n ခဲှဝေ,满足每ခဲှဝေ均 ≥ minVal、≤ maxVal,နှင့်ပေါင်းလဒ်မပြောင်းလဲနေဆဲဖြစ်သည်。
 * ကန့်သတ်ချက်များကအရမ်းတင်းကျပ်စွာနေလျှင်, မဖြစ်နိုင်ပါ,အလိုအလျောက် Rollback ကြိုးပမ်းမှု(အများဆုံး retries ဒုတိယနှုန်း)。
 */
function random_partition_constrained(int </span><span><span class="hljs-subst">$n</span></span><span>, int </span><span><span class="hljs-subst">$totalPoints</span></span><span>, int </span><span><span class="hljs-subst">$minVal</span></span><span>, int </span><span><span class="hljs-subst">$maxVal</span></span><span>, int </span><span><span class="hljs-subst">$retries</span></span><span> = 256): array {
    for (</span><span><span class="hljs-subst">$t</span></span><span> = 0; </span><span><span class="hljs-subst">$t</span></span><span> &lt; </span><span><span class="hljs-subst">$retries</span></span><span>; </span><span><span class="hljs-subst">$t</span></span><span>++) {
        // ပထမ ဦး ဆုံးအနိမ့်ကန့်သတ်နှုတ်ယူပါ,ကျန်ရစ်နေသော R အခမဲ့ခွဲဝေချထားပေးပါ
        </span><span><span class="hljs-subst">$R</span></span><span> = </span><span><span class="hljs-subst">$totalPoints</span></span><span> - </span><span><span class="hljs-subst">$n</span></span><span> * </span><span><span class="hljs-subst">$minVal</span></span><span>;
        if (</span><span><span class="hljs-subst">$R</span></span><span> &lt; 0) throw new InvalidArgumentException('အောက်ပိုင်းကန့်သတ်ချက်၏ပေါင်းလဒ်သည်စုစုပေါင်းအရေအတွက်ထက်ကျော်လွန်သည်');
        // ဖြစ်ပါှးစေ n-1 မရေွှးသော“ဖြတ်အချက်”,မှန်သော [0, R] ဖြတ်တောက်ခြင်းပင်လုပ်ဆောင်ပါ
        </span><span><span class="hljs-subst">$cuts</span></span><span> = [];
        for (</span><span><span class="hljs-subst">$i</span></span><span> = 0; </span><span><span class="hljs-subst">$i</span></span><span> &lt; </span><span><span class="hljs-subst">$n</span></span><span> - 1; </span><span><span class="hljs-subst">$i</span></span><span>++) { </span><span><span class="hljs-subst">$cuts</span></span><span>[] = mt_rand(0, </span><span><span class="hljs-subst">$R</span></span><span>); }
        sort(</span><span><span class="hljs-subst">$cuts</span></span><span>);
        </span><span><span class="hljs-subst">$parts</span></span><span> = [];
        </span><span><span class="hljs-subst">$prev</span></span><span> = 0;
        foreach (</span><span><span class="hljs-subst">$cuts</span></span><span> as </span><span><span class="hljs-subst">$c</span></span><span>) { </span><span><span class="hljs-subst">$parts</span></span><span>[] = </span><span><span class="hljs-subst">$c</span></span><span> - </span><span><span class="hljs-subst">$prev</span></span><span>; </span><span><span class="hljs-subst">$prev</span></span><span> = </span><span><span class="hljs-subst">$c</span></span><span>; }
        </span><span><span class="hljs-subst">$parts</span></span><span>[] = </span><span><span class="hljs-subst">$R</span></span><span> - </span><span><span class="hljs-subst">$prev</span></span><span>;
        // အနိမ့်ကန့်သတ်သို့ပြန်ထည့်ပါ,နှင့်အထက်ကန့်သတ်စစ်ဆေးပါ
        </span><span><span class="hljs-subst">$vals</span></span><span> = array_map(fn(</span><span><span class="hljs-subst">$x</span></span><span>) =&gt; </span><span><span class="hljs-subst">$x</span></span><span> + </span><span><span class="hljs-subst">$minVal</span></span><span>, </span><span><span class="hljs-subst">$parts</span></span><span>);
        if (max(</span><span><span class="hljs-subst">$vals</span></span><span>) &lt;= </span><span><span class="hljs-subst">$maxVal</span></span><span>) return </span><span><span class="hljs-subst">$vals</span></span><span>;
    }
    throw new RuntimeException('အတားအဆီးအောက်မှာရှာမတွေ့ပါ,ကျေးဇူးပြုပြီးအထက်နှင့်အောက်ပိုင်းကန့်သတ်ချက်များကိုလျှော့ချပါသို့မဟုတ်စုစုပေါင်းအရေအတွက်ကိုတိုးမြှင့်ပါ。');
}

// နမူနာ:6 ပစ္စည်းဂုဏ်သတ္တိများ,လုံးဝသော 30 အစွန်း,တစ်ခုချင်းစီကို ittem [1,10]
</span><span><span class="hljs-subst">$attrs</span></span><span> = random_partition_constrained(n: 6, totalPoints: 30, minVal: 1, maxVal: 10);
// </span><span><span class="hljs-subst">$attrs</span></span><span> ကဲ့သို့ [7, 4, 2, 6, 3, 8],လုံးဝသော和恒为 30,နှင့်အားလုံးအကွာအဝေးအတွင်း

ဤနည်းလမ်းတွင်အားသာချက်များသုံးခုရှိသည်။ ပေါင်းစည်းခြင်း , ဘက်မလိုက်သောပစ္စည်းများကို တင်းကြပ်စွာထိန်းချုပ်ထားခြင်း (အခက်အခဲများကန့်သတ်ချက်များရှိသည့်အချက်များအရ) နှင့် ရိုးရှင်းမှုရရှိနိုင်ပါသည်Maxval သည်သေးငယ်သောသို့မဟုတ် minval သည်အလွန်ကြီးမားလွန်းသောအခါဖြစ်နိုင်ချေရှိသောဒိုမိန်းသည်အလွန်ကျဉ်းမြောင်းသည်, ပြန်လည်ပြုပြင်ခြင်းကိုသုံးရန်အသုံးပြုနိုင်သည်။

4 ။ Preference နှင့်ရှားပါး: အလေးချိန်ဘက်လိုက်ခြင်းမရှိသောထုတ်ယူခြင်း (alias သို့မဟုတ် segmented နမူနာ)

ကွဲပြားခြားနားသော attribute များသည်ကွဲပြားခြားနားသော "အလေးများ" ကိုလိုချင်ပါက (ဥပမာ "ကံ" သည်အနည်းငယ်ရှားပါးသည်။ အောက်ဖော်ပြပါအချက်များသည်ရိုးရှင်းလွယ်ကူပြီးဖတ်ရန်လွယ်ကူသောနမူနာ sgmeting scheme (ဘက်လိုက်မှုမရှိဘဲအလေးချိန်နှင့်အညီတင်းကြပ်စွာ)

 
/**
 * အလေးချိန်ခင်းကျင်းအပေါ်အခြေခံပြီးအညွှန်းကိန်းကိုပြန်သွားပါ(ဘက်မလိုက်)
 * @param array&lt;float&gt; </span><span><span class="hljs-subst">$weights</span></span><span> Non- အနုတ်လက်ခဏာ,အနည်းဆုံးတစ်ခု &gt; 0
 */
function weighted_pick(array </span><span><span class="hljs-subst">$weights</span></span><span>): int {
    </span><span><span class="hljs-subst">$sum</span></span><span> = array_sum(</span><span><span class="hljs-subst">$weights</span></span><span>);
    if (</span><span><span class="hljs-subst">$sum</span></span><span> &lt;= 0) throw new InvalidArgumentException('权重လုံးဝသော和必须 &gt; 0');
    </span><span><span class="hljs-subst">$r</span></span><span> = mt_rand() / mt_getrandmax() * </span><span><span class="hljs-subst">$sum</span></span><span>; // [0, sum)
    </span><span><span class="hljs-subst">$acc</span></span><span> = 0.0;
    foreach (</span><span><span class="hljs-subst">$weights</span></span><span> as </span><span><span class="hljs-subst">$i</span></span><span> =&gt; </span><span><span class="hljs-subst">$w</span></span><span>) {
        </span><span><span class="hljs-subst">$acc</span></span><span> += </span><span><span class="hljs-subst">$w</span></span><span>;
        if (</span><span><span class="hljs-subst">$r</span></span><span> &lt; </span><span><span class="hljs-subst">$acc</span></span><span>) return </span><span><span class="hljs-subst">$i</span></span><span>;
    }
    return array_key_last(</span><span><span class="hljs-subst">$weights</span></span><span>); // ကာကွယ်စောင့်ရှောက်ရေး
}

// နမူနာ:ကျပန်း segment ပေးပါ 6 ပစ္စည်းများထည့်ပါ 3 အစွန်း“ရှားပါးအပိုဆု”,အလေးချိန်ဘက်လိုက်မှု 6 အချက်(သေတမ်းစာ)
</span><span><span class="hljs-subst">$weights</span></span><span> = [1,1,1,1,1,2.5];
</span><span><span class="hljs-subst">$bonus</span></span><span> = [0,0,0,0,0,0];
for (</span><span><span class="hljs-subst">$k</span></span><span> = 0; </span><span><span class="hljs-subst">$k</span></span><span> &lt; 3; </span><span><span class="hljs-subst">$k</span></span><span>++) {
    </span><span><span class="hljs-subst">$idx</span></span><span> = weighted_pick(</span><span><span class="hljs-subst">$weights</span></span><span>);
    </span><span><span class="hljs-subst">$bonus</span></span><span>[</span><span><span class="hljs-subst">$idx</span></span><span>] += 1;
}

5 ။ ထိန်းချုပ်မှုအတက်အကျ - "ခန့်မှန်းခြေအားဖြင့်ပုံမှန်" ကျပန်း (box-muller) ကိုသုံးပါ။

တစ်ခါတစ်ရံတွင်သင်သည်အများအားဖြင့်အလယ်အလတ်အများအားဖြင့်အလယ်အလတ်, Uniform ဖြန့်ဖြူးရေးကိုပုံမှန်ဖြန့်ဖြူးခြင်းသို့ပြောင်းလဲရန် Box-Muller ကိုသုံးပါ။

 
// ဖြစ်ပါှးစေ ~N(0,1)
function randn(): float {
    do {
        </span><span><span class="hljs-subst">$u</span></span><span> = mt_rand() / mt_getrandmax();
        </span><span><span class="hljs-subst">$v</span></span><span> = mt_rand() / mt_getrandmax();
    } while (</span><span><span class="hljs-subst">$u</span></span><span> == 0.0); // ရေှာင်ရှား log(0)
    return sqrt(-2.0 * log(</span><span><span class="hljs-subst">$u</span></span><span>)) * cos(2.0 * M_PI * </span><span><span class="hljs-subst">$v</span></span><span>);
}

// တည်နေ [min, max] အပေါ်ထုတ်ပေးသည်“ခေါင်းလောင်းပုံစံ”ဖြန့်ဝေခဲ့သည်
function randn_clamped(float </span><span><span class="hljs-subst">$min</span></span><span>, float </span><span><span class="hljs-subst">$max</span></span><span>, float </span><span><span class="hljs-subst">$mean</span></span><span>, float </span><span><span class="hljs-subst">$std</span></span><span>): float {
    </span><span><span class="hljs-subst">$x</span></span><span> = </span><span><span class="hljs-subst">$mean</span></span><span> + </span><span><span class="hljs-subst">$std</span></span><span> * randn();
    return max(</span><span><span class="hljs-subst">$min</span></span><span>, min(</span><span><span class="hljs-subst">$max</span></span><span>, </span><span><span class="hljs-subst">$x</span></span><span>));
}

Method: "စုစုပေါင်းအမြင့်မြတ်မှု" ကိုသေချာစေရန်ကျပန်းဖြတ်တောက်ခြင်းကိုပထမ ဦး စွာသုံးပါ

6 ။ ပြိုင်ဘက်များအပေါ် "မျှတသောဖြန့်ဖြူးခြင်း" - ပထမ ဦး ဆုံးနှင့်ထို့နောက်ပြ issue နာ

ဥပမာအားဖြင့် 4 ကစားသမား 4 ဦး သည်ကြိုတင်ထုတ်လုပ်ထားသော attribute templates များကိုဖမ်းယူနိုင်ခဲ့သည်။

  1. ဂိမ်းတစ်ခုလုံးကိုကြဲရန် matitidid ကို သုံးပါ။
  2. Pre-Generated Templates 4 အစုံ;
  3. Fisher-Yates သည် hash entry entry ကိုအလိုက်ရှာဖွေမှု အရလူတစ် ဦး အား "ထိုင်ခုံအားသာချက်" ရှောင်ရှားရန်လူတစ် ဦး အားသတ်မှတ်ထားသည်။
 
// Fisher–Yates သေးငယ်လိုက်:ဘက်မလိုက်
function shuffle_unbiased(array &amp;</span><span><span class="hljs-subst">$arr</span></span><span>): void {
    </span><span><span class="hljs-subst">$n</span></span><span> = count(</span><span><span class="hljs-subst">$arr</span></span><span>);
    for (</span><span><span class="hljs-subst">$i</span></span><span> = </span><span><span class="hljs-subst">$n</span></span><span> - 1; </span><span><span class="hljs-subst">$i</span></span><span> &gt; 0; </span><span><span class="hljs-subst">$i</span></span><span>--) {
        </span><span><span class="hljs-subst">$j</span></span><span> = mt_rand(0, </span><span><span class="hljs-subst">$i</span></span><span>);
        [</span><span><span class="hljs-subst">$arr</span></span><span>[</span><span><span class="hljs-subst">$i</span></span><span>], </span><span><span class="hljs-subst">$arr</span></span><span>[</span><span><span class="hljs-subst">$j</span></span><span>]] = [</span><span><span class="hljs-subst">$arr</span></span><span>[</span><span><span class="hljs-subst">$j</span></span><span>], </span><span><span class="hljs-subst">$arr</span></span><span>[</span><span><span class="hljs-subst">$i</span></span><span>]];
    }
}

// 预ဖြစ်ပါှးစေ模板 + သေးငယ်လိုက်分配
</span><span><span class="hljs-subst">$seed</span></span><span> = seed_from_context('ROOM-9F2A', 12, 'ALL'); // အသုံးပြု ALL ဂိမ်းတစ်ခုလုံးကိုကိုယ်စားပြုတယ်
mt_srand(</span><span><span class="hljs-subst">$seed</span></span><span>);
</span><span><span class="hljs-subst">$templates</span></span><span> = [];
for (</span><span><span class="hljs-subst">$t</span></span><span> = 0; </span><span><span class="hljs-subst">$t</span></span><span> &lt; 4; </span><span><span class="hljs-subst">$t</span></span><span>++) {
    </span><span><span class="hljs-subst">$templates</span></span><span>[] = random_partition_constrained(6, 30, 1, 10);
}
shuffle_unbiased(</span><span><span class="hljs-subst">$templates</span></span><span>);
// 之后按玩家顺序一人取一မရေွှးသော模板(或အသုံးပြု玩家ID再做一ဒုတိယနှုန်း稳定သေးငယ်လိုက်)

7 ။ "ရေရှည်မျှတမှု" ကိုစစ်ဆေးပါ။

အွန်လိုင်းမသွားမီ Monte Carlo ကိုစစ်ဆေးပါ။

  1. 10 နာရီပြေးသည့်အခင်းအကျင်းများ (အမျိုးမျိုးသောကစားသမားများ / ရာသီ / ရာသီ) များကိုပြင်ဆင်ပါ။
  2. ကိန်းဂဏန်းများအရဝါးသော,
  3. ကိုယ်အလေးချိန်ရွေးချယ်ခြင်းအတွက် Chi-Square Test (သို့မဟုတ်အကြိမ်ရေကွာဟမှုအတွက်အနည်းဆုံးယုံကြည်မှုကြားကာလ၏ခန့်မှန်းချက်),
  4. ဆက်နွယ်မှုကိုစစ်ဆေးပါ (ဥပမာကစားသမား ID မှ attribute တစ်ခု၏ attribute ကိုချုပ်ကိုင်ထားသည့်ချုပ်ကိုင်မှု) ကိုစစ်ဆေးပါ။
 
// ကြမ်းတမ်းတဲ့စာရင်းအင်းယုတ်(သိလိုခြင်း)
function simulate_means(int </span><span><span class="hljs-subst">$runs</span></span><span> = 100000): array {
    </span><span><span class="hljs-subst">$sum</span></span><span> = array_fill(0, 6, 0.0);
    for (</span><span><span class="hljs-subst">$i</span></span><span> = 0; </span><span><span class="hljs-subst">$i</span></span><span> &lt; </span><span><span class="hljs-subst">$runs</span></span><span>; </span><span><span class="hljs-subst">$i</span></span><span>++) {
        mt_srand(</span><span><span class="hljs-subst">$i</span></span><span>); // အမျိုးမျိုးသောအစေ့များ
        </span><span><span class="hljs-subst">$vals</span></span><span> = random_partition_constrained(6, 30, 1, 10);
        for (</span><span><span class="hljs-subst">$k</span></span><span> = 0; </span><span><span class="hljs-subst">$k</span></span><span> &lt; 6; </span><span><span class="hljs-subst">$k</span></span><span>++) { </span><span><span class="hljs-subst">$sum</span></span><span>[</span><span><span class="hljs-subst">$k</span></span><span>] += </span><span><span class="hljs-subst">$vals</span></span><span>[</span><span><span class="hljs-subst">$k</span></span><span>]; }
    }
    return array_map(fn(</span><span><span class="hljs-subst">$x</span></span><span>) =&gt; </span><span><span class="hljs-subst">$x</span></span><span> / </span><span><span class="hljs-subst">$runs</span></span><span>, </span><span><span class="hljs-subst">$sum</span></span><span>);
}

8 ။ အင်ဂျင်နီယာနှင့်လုံခြုံရေးကြိုတင်ကာကွယ်မှုများ

  • တစ်ချိန်ကလုပ်ငန်းစဉ်နှင့်မျိုးစေ့တစ်ကြိမ် - MT_SRAND ၏အကြိမ်ပေါင်းများစွာ () ကို ရှောင်ကြဉ်ပါ။
  • MT_rand () ကို လုံခြုံသောရည်ရွယ်ချက်များအတွက်မသုံးပါနှင့် - ၎င်းတွင်စီးပွားရေးတန်ဖိုး (Unlocing, အရောင်းအ 0 ယ ခြင်း,
  • Cross-Languation ရှေ့နောက်ညီညွတ်မှု - ဆာဗာနှင့် 0 န်ဆောင်မှုခံယူသူနှစ် ဦး စလုံးသည်ကျပန်းပါ 0 င်ပါက algorithm နှင့် parameters များကိုစည်းလုံးညီညွတ်စေရန်သို့မဟုတ်ဆာဗာပေါ်ရှိရလဒ်များကိုသာကျစေပြီး၎င်းတို့ကိုသာကျစေပြီး၎င်းတို့ကိုထုတ်ပေးသည်။
  • မူကွဲ soldification : မျိုးစေ့သည် "ဗားရှင်းနံပါတ်" နှင့်ရောနှောထားသောအဟောင်းကိုပြန်ဖွင့်ခြင်းမပြုဘဲအနာဂတ်တွင် algorithm ကိုပြုပြင်ရန် "ဗားရှင်းနံပါတ် " နှင့်ရောနှောထားသည်။

9 ။ ပေါင်းစည်းခြင်းဥပမာ (reproducible, fixed စုစုပေါင်းပမာဏ, အလေးချိန်နှင့်အတူအဆင်ပြေ)

 
function assign_attributes(string </span><span><span class="hljs-subst">$matchId</span></span><span>, int </span><span><span class="hljs-subst">$season</span></span><span>, string </span><span><span class="hljs-subst">$playerId</span></span><span>): array {
    // 1) မျိုးစေ့
    mt_srand(seed_from_context(</span><span><span class="hljs-subst">$matchId</span></span><span>, </span><span><span class="hljs-subst">$season</span></span><span>, </span><span><span class="hljs-subst">$playerId</span></span><span>, 'attr-v1'));

    // 2) အခြေခံ segmentation:6 အချက်、လုံးဝသော 30、တစ်ခုချင်းစီကို ittem [1, 10]
    </span><span><span class="hljs-subst">$attrs</span></span><span> = random_partition_constrained(6, 30, 1, 10);

    // 3) ရှားပါးအပိုဆု:ဦး စားပေး ဦး စားပေး 6 အချက်
    </span><span><span class="hljs-subst">$weights</span></span><span> = [1,1,1,1,1,2.5];
    for (</span><span><span class="hljs-subst">$i</span></span><span> = 0; </span><span><span class="hljs-subst">$i</span></span><span> &lt; 3; </span><span><span class="hljs-subst">$i</span></span><span>++) { </span><span><span class="hljs-subst">$attrs</span></span><span>[weighted_pick(</span><span><span class="hljs-subst">$weights</span></span><span>)] += 1; }

    // 4) zerosum ဒဏ်ငွေ tuning(保持လုံးဝသော和不变,ပုံသဏ္ဌာန်“အများဆုံးသာမန်”)
    </span><span><span class="hljs-subst">$mean</span></span><span> = array_sum(</span><span><span class="hljs-subst">$attrs</span></span><span>) / count(</span><span><span class="hljs-subst">$attrs</span></span><span>);
    </span><span><span class="hljs-subst">$delta</span></span><span> = 0.0;
    for (</span><span><span class="hljs-subst">$k</span></span><span> = 0; </span><span><span class="hljs-subst">$k</span></span><span> &lt; count(</span><span><span class="hljs-subst">$attrs</span></span><span>); </span><span><span class="hljs-subst">$k</span></span><span>++) {
        </span><span><span class="hljs-subst">$adj</span></span><span> = (int) round(randn() * 0.6); // အသေးစားအတက်အကျ,ချိန်ညှိစံသွေဖည်
        </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$k</span></span><span>] += </span><span><span class="hljs-subst">$adj</span></span><span>;
        </span><span><span class="hljs-subst">$delta</span></span><span> += </span><span><span class="hljs-subst">$adj</span></span><span>;
    }
    // 抵消လုံးဝသော和偏移(အညီအမျှ rounding အမှား)
    while (</span><span><span class="hljs-subst">$delta</span></span><span> != 0) {
        </span><span><span class="hljs-subst">$idx</span></span><span> = mt_rand(0, count(</span><span><span class="hljs-subst">$attrs</span></span><span>)-1);
        if (</span><span><span class="hljs-subst">$delta</span></span><span> &gt; 0 &amp;&amp; </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$idx</span></span><span>] &gt; 1) { </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$idx</span></span><span>]--; </span><span><span class="hljs-subst">$delta</span></span><span>--; }
        elseif (</span><span><span class="hljs-subst">$delta</span></span><span> &lt; 0) { </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$idx</span></span><span>]++; </span><span><span class="hljs-subst">$delta</span></span><span>++; }
    }

    // 5) သီးနှံ(ဖြတ်လျှင်,ထံမှတန်းတူပမာဏ/向其他အချက်借还,保持လုံးဝသော和)
    </span><span><span class="hljs-subst">$min</span></span><span> = 1; </span><span><span class="hljs-subst">$max</span></span><span> = 12;
    </span><span><span class="hljs-subst">$sumBefore</span></span><span> = array_sum(</span><span><span class="hljs-subst">$attrs</span></span><span>);
    </span><span><span class="hljs-subst">$attrs</span></span><span> = array_map(fn(</span><span><span class="hljs-subst">$v</span></span><span>) =&gt; max(</span><span><span class="hljs-subst">$min</span></span><span>, min(</span><span><span class="hljs-subst">$max</span></span><span>, </span><span><span class="hljs-subst">$v</span></span><span>)), </span><span><span class="hljs-subst">$attrs</span></span><span>);
    </span><span><span class="hljs-subst">$sumAfter</span></span><span> = array_sum(</span><span><span class="hljs-subst">$attrs</span></span><span>);
    // ပြန်လာသို့မဟုတ်ဖြည့်စွက်
    </span><span><span class="hljs-subst">$diff</span></span><span> = </span><span><span class="hljs-subst">$sumBefore</span></span><span> - </span><span><span class="hljs-subst">$sumAfter</span></span><span>;
    while (</span><span><span class="hljs-subst">$diff</span></span><span> != 0) {
        </span><span><span class="hljs-subst">$i</span></span><span> = mt_rand(0, count(</span><span><span class="hljs-subst">$attrs</span></span><span>)-1);
        if (</span><span><span class="hljs-subst">$diff</span></span><span> &gt; 0 &amp;&amp; </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$i</span></span><span>] &lt; </span><span><span class="hljs-subst">$max</span></span><span>) { </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$i</span></span><span>]++; </span><span><span class="hljs-subst">$diff</span></span><span>--; }
        elseif (</span><span><span class="hljs-subst">$diff</span></span><span> &lt; 0 &amp;&amp; </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$i</span></span><span>] &gt; </span><span><span class="hljs-subst">$min</span></span><span>) { </span><span><span class="hljs-subst">$attrs</span></span><span>[</span><span><span class="hljs-subst">$i</span></span><span>]--; </span><span><span class="hljs-subst">$diff</span></span><span>++; }
    }
    return </span><span><span class="hljs-subst">$attrs</span></span><span>;
}

10 ။ နိဂုံးချုပ်

"မျိုးစေ့" ၏ "မျိုးစေ့" () ဂိမ်းအခြေအနေနှင့်အတူ "မျိုးစေ့" နှင့်အတူ binding pseudo -erence ကိုဖြစ်ပေါ်စေနိုင်ပါတယ်။ ကျပန်းဖြတ်တောက်ခြင်း, အလေးချိန်နမူနာနှင့်သုညပေါင်းလန့်သုညသုညနှင့်သုညပေါင်းလဒ်ညှိခြင်းနှင့်အခြားနည်းလမ်းများကိုအသုံးပြုခြင်းကိုကျေနပ်ဖွယ်အကန့်အသတ်ဖြင့် ကျပန်းနှင့်မျှတသော attribute ခွဲဝေချထားပေးခြင်းကိုပြုလုပ်နိုင်သည်။ တန်ဖိုးဂိမ်းသို့မဟုတ်ခိုင်မာသောထိပ်တိုက်ရင်ဆိုင်မှုများပါ 0 င် ပါကကျပန်းကိုင်တွယ်ခြင်းနှင့်ပြန်ဖွင့်ခြင်းအတွက်သက်သေအထောက်အထားများကိုသက်သေပြရန် "algorithm version + input" ကိုထည့်သွင်းစဉ်းစားပါ။

HTML;