خب آخرش نگفتید وقتی هنوز بازی شروع نشده چه مقداری برای v w0 w1 w2 باید در نظر بگیریم و چرا؟ چون v وابسته به مقادیر w0 w1 w2 می باشد.
تا جایی که من متوجه شدم اول بازیکن آبی شروع می کنه (یک انسان) حالا برنامه (قرمز) قراره بهترین حرکت مناسب را پیدا کنه (برای سادگی تنها یک عمق در نظر گرفته شده است). فرض کنیم بازیکن قرمز 8 حرکت مجاز دارد برای هر حرکت مقدار V را محاسبه می کنیم و بزرگترین آن را پیدا می کنیم اگر چند حرکت V برابر داشتند رندوم یکی را انتخاب کنه. مثلا ممکنه برای دو حرکت مقدار V = 10 باشد و برای 6 حرکت دیگر برابر 5 باشد لذا باید از بین دو حرکت یکی بصورت دندوم انتخاب شود.
اگر اینطور باشه شما می توانید تمامی حرکات با V برابر را در یک آرایه بریزید و بعد یکی را بصورت رندوم انتخاب کنید. یا اینکه دو به دو یکی را رندوم انتخاب کنید.یعنی اینجوری:
if($vj > $v || ($vj == $v && rand(0,1)))
{
$error=$vj-$v;
$w1=$w1+0.1*$blue*$error;
$w2=$w2+0.1*$red*$error;
$v = $vj;
//ذخیره اطلاعات مربوط به حرکت تا بعدا روی بورد اصلی این حرکت پیاده شود
$move = [$i, $j, $i+1, $j+1];
}
فرض کنیم اولین حرکت انتخاب شده است برای حرکت مجاز بعدی وی را محاسبه می کنیم و برابر وی قبلی می شود. rand(0,1) - یا صفر است یا یک - اگر یک بود حرکت منتخب را عوض می کند و اگر صفر بود همان حرکت قبلی را نگه می دارد. اگر وی حرکت سوم نیز برابر شد تنها بین حرکت منتخب با این حرکت جدید دوباره یکی را بصورت رندوم انتخاب می کنیم و الی آخر. این حالت پیاده سازیش خیلی راحت تره ولی دقت کنید که میزان شانس انتخاب عناصر با این روش برابر نیست.
سوالم من اینه:
الان قرمز (کامپیوتر) حرکت منتخب را انجام میدهد و نوبت بازیکن آبی هست که یک شخص آن را انجام میدهد و دوباره نوبت برنامه می شود درسته؟
حالا که نوبت برنامه شد آیا از V حرکت قبلی بازیکن قرمز برای یافتن حرکت جدید استفاده می کنیم یا نه؟