نمایش نتایج 1 تا 16 از 16

نام تاپیک: بازی چکرز با الگوریتم minimax با یک عمق برای یادگیری

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #16

    نقل قول: بازی چکرز با الگوریتم minimax با یک عمق برای یادگیری

    اینجا میخوام بگم
    بیا تو حالت اول بین همه اون هایی که این شرایط را دارن

    $data===2 && $db===1 && $dbb===0

    کوچکترین را انتخاب کن بزار $vj1
    بعد متغیر های w را طبق مقدار vj1 به روز کن که برای اینکار نیاز داریم که vj1 را از v اولیه کم کنیم ولی متغیر v را تغییر نباید تغییر بدیم
    بعدش بین اونایی که این شرایط را دارند

    $data===2 && $db===0

    کوچکترین را انتخاب کن بزار $vj2
    بعد متغیر های w را طبق مقدار vj2 به روز کن که برای اینکار نیاز داریم که vj2 را از v اولیه کم کنیم ولی متغیر v را تغییر نباید تغییر بدیم
    بعد بین این $vj1 و $vj2 هر کدام کوچکتر بود حرکت مربوط به اونو انجام بده
    از متغیر global هم استفاده کردم ولی نشد
    $vj1 را با $vj2 برابر میدونه در واقع نیست $vj1 باید کمتر باشه
    تو آرایه a هم هیچ تغییری ایجاد نمیکند

    چرا نمیدونم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟





    <?php
    $a = [
    [0,2,0,2,0,2,0,2],
    [2,0,2,0,2,0,2,0],
    [0,2,0,2,0,2,0,2],
    [0,0,1,0,0,0,0,0],
    [0,0,0,0,0,0,0,0],
    [1,0,1,0,1,0,1,0],
    [0,1,0,1,0,1,0,1],
    [1,0,1,0,1,0,1,0],
    ];

    $red = $blue = 0;
    array_walk_recursive($a, function($t) use(&$red, &$blue)
    {
    if($t==1) {++$blue;}
    elseif($t==2) {++$red;}
    });
    global $w0j1;
    global $w1j1;
    global $w2j1;
    global $w0j2;
    global $w1j2;
    global $w2j2;
    global $vj1;
    global $vj2;
    global $w0;
    global $w1;
    global $w2;
    $w0=-10;
    $w1=50;
    $w2=-30;
    global $v;
    $v=$w0+($w1*$blue)+($w2*$red);
    global $vj1;
    global $vj2;
    $move = [];
    $move1 = [];
    $move2 = [];

    foreach($a as $i=>$row){
    foreach($row as $j=>$data){
    if(isset($a[$i+1][$j+1]))
    {
    $db=$a[$i+1][$j+1];
    }
    if(isset($a[$i+2][$j+2]))
    {
    $dbb=$a[$i+2][$j+2];
    }
    if($data===2 && $db===1 && $dbb===0){
    if(isset($a[$i+2][$j+2]))
    {
    //چون نباید بورد اصلی تغییر کند و این حرکت تنها جهت محاسبه وی است بورد را در یک متغییر موقت میریزیم
    $tmp1 = $a;
    $tmp1[$i+2][$j+2]=2;
    $tmp1[$i+1][$j+1]=0;
    $tmp1[$i][$j]=0;


    //توجه کنید که در هر حرکت ممکن است تعداد مهره ها تغییر کنید پس باید دوباره شمرده شود
    $red = $blue = 0;
    array_walk_recursive($tmp1, function($t) use(&$red, &$blue)
    {
    if($t==1) {++$blue;}
    elseif($t==2) {++$red;}

    });

    $vj1=$w0+($w1*$blue)+($w2*$red);
    if($vj1 < $v || ($vj1 == $v && rand(0,1)))
    {
    $error=$vj1-$v;
    $w0j1=$w0+0.1*1*$error;
    $w1j1=$w1+0.1*$blue*$error;
    $w2j1=$w2+0.1*$red*$error;
    //ذخیره اطلاعات مربوط به حرکت تا بعدا روی بورد اصلی این حرکت پیاده شود
    $move1 = [$i, $j, $i+1, $j+1,$i+2,$j+2];

    }

    }


    }



    if($data===2 && $db===0){
    if(isset($a[$i+1][$j+1]))
    {
    //چون نباید بورد اصلی تغییر کند و این حرکت تنها جهت محاسبه وی است بورد را در یک متغییر موقت میریزیم
    $tmp2 = $a;
    $tmp2[$i+1][$j+1]=2;
    $tmp2[$i][$j]=0;


    //توجه کنید که در هر حرکت ممکن است تعداد مهره ها تغییر کنید پس باید دوباره شمرده شود
    $red = $blue = 0;
    array_walk_recursive($tmp2, function($t) use(&$red, &$blue)
    {
    if($t==1) {++$blue;}
    elseif($t==2) {++$red;}
    });

    $vj2=$w0+($w1*$blue)+($w2*$red);
    if($vj2 < $v || ($vj2 == $v && rand(0,1)))
    {
    $error=$vj2-$v;
    $w0j2=$w0+0.1*1*$error;
    $w1j2=$w1+0.1*$blue*$error;
    $w2j2=$w2+0.1*$red*$error;
    //ذخیره اطلاعات مربوط به حرکت تا بعدا روی بورد اصلی این حرکت پیاده شود
    $move2 = [$i, $j, $i+1, $j+1];
    }

    }

    }

    //انتخاب j1
    if($vj1<$vj2 || $vj2===null)
    {
    if($move1)
    {
    $v=$w0j1+($w1j1*$blue)+($w2j1*$red);
    // جای دو خانه را با هم عضو کن خانه وسط را صفر کن
    $tmp1 = $a[$move1[0]][$move1[1]];
    $a[$move1[0]][$move1[1]] = $a[$move1[4]][$move1[5]];
    $a[$move1[2]][$move1[3]] = 0;
    $a[$move1[4]][$move1[5]] = $tmp1;


    unset($tmp1);
    }
    }

    //انتخاب j2
    elseif($vj2<$vj1 || $vj1===null)
    {
    if($move2)
    {
    $v=$w0j2+($w1j2*$blue)+($w2j2*$red);
    //جای دو خانه را با هم عضو کن
    $tmp2 = $a[$move2[0]][$move2[1]];
    $a[$move2[0]][$move2[1]] = $a[$move2[2]][$move2[3]];
    $a[$move2[2]][$move2[3]] = $tmp2;


    unset($tmp2);

    }
    }



    }

    }

    var_dump($v);
    var_dump($vj1);
    var_dump($vj2);
    var_dump($move2);
    var_dump($move1);


    var_dump($a);


    ?>






    ممنون میشم کمکم کنید
    آخرین ویرایش به وسیله Salazar.mi : جمعه 10 آبان 1398 در 21:23 عصر

تاپیک های مشابه

  1. الگوریتم minimax برای بازی دوز
    نوشته شده توسط zt1990 در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 1
    آخرین پست: یک شنبه 08 تیر 1393, 22:58 عصر
  2. سوال: طریقه پیاده سازی الگوریتم minimax با C++‎
    نوشته شده توسط Rezvane.R در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: یک شنبه 08 بهمن 1391, 12:57 عصر
  3. سوال: پیاده سازی بازی Reversi با الگوریتم Minimax
    نوشته شده توسط -Azure- در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 0
    آخرین پست: شنبه 08 اسفند 1388, 17:05 عصر
  4. روش ایجاد یک درخت مینی ماکس MiniMax
    نوشته شده توسط hbi در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 1
    آخرین پست: پنج شنبه 18 بهمن 1386, 01:45 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •