الگوریتم ژنتیکالگوریتم های تکاملیهوش مصنوعی

تابع برازش مسئله ۸ وزیر – قسمت سوم

در این مطلب قصد داریم مبحث مربوط به تابع برازش مسئله ۸ وزیر را نهایی کنیم. پیش از مطالعه ادامه متن نیاز است تا مطلب قبلی در مورد تابع برازش مسئله ۸ وزیر رو مرور کنید.

پیش از ادامه نگاهی دوباره به حرکت وزیر در صفحه شطرنج می اندازیم:

8 وزیر با الگوریتم ژنتیک

۸ وزیر با الگوریتم ژنتیک : حرکت های مجاز وزیر در صفحه شطرنج

در مطلب قبلی تهدید های مرحله اول در حالت مورب وزیر خونه (۳,۶) رو بررسی کردیم، و نتیجه زیر حاصل شد

8 وزیر با الگوریتم ژنتیک

۸ وزیر با الگوریتم ژنتیک : خانه های مورب مرحله اول

•    خونه (۲,۷): ۱ = |۳-۲| = |۶-۷|
•    خونه (۲,۵): ۱ = |۳-۲| = |۶-۵|
•    خونه (۷,۴): ۱ = |۳-۴| = |۶-۷|
•    خونه (۵,۴): ۱ = |۳-۴| = |۶-۵|

حال برای خونه های مرحله دو بررسی را انجام میدیم ( خونه های که در شکل زیر نمایش داده شده است.)

8 وزیر با الگوریتم ژنتیک

۸ وزیر با الگوریتم ژنتیک : خانه های مورب مرحله دوم

  • خونه (۱,۸): رابطه این با خونه  (۳,۶) چیه؟ اگر دقت کنید اگر از سطر دوتا کم کنیم (۳-۲) برابر ۱ میشه و اگر به ستون دوتا اضافه کنیم (۶+۲) میشه ۸٫ پس یک قانون رو پیدا کردیم
  • خونه (۱,۴) : رابطه این با خونه  (۳,۶) چیه؟ اگر دقت کنید اگر از سطر دوتا کم کنیم (۳-۲) برابر ۱ میشه و اگر از ستون دوتا کم کنیم (۶-۲) میشه ۴٫ پس یک قانون دیگه رو پیدا کردیم
  • خونه (۵,۸): رابطه این با خونه (۳,۶) چیه؟ اگر دقت کنید اگر به سطر دوتا اضافه کنیم (۳+۲) برابر ۵ میشه و اگر به ستون دوتا اضافه کنیم (۶+۲) میشه ۸٫ پس یک دیگه قانون رو پیدا کردیم
  • خونه (۵,۴): رابطه این با خونه (۳,۶) چیه؟ اگر دقت کنید اگر به سطر دوتا اضافه کنیم (۳+۲) برابر ۵ میشه و اگر از ستون دوتا کم کنیم (۶-۲) میشه ۴٫ پس یک قانون رو پیدا کردیم

در نتیجه اگر سطر و ستون همزمان دوتا کم شدن یا دوتا زیاد شدن اون خونه ها غیر مجاز هستن و وزیر نمی تونه در اونا قرار بگیره. به عبارت دیگر اگر سطر و ستون هم زمان دوتا واحد تغییر داشتن (مهم نیست که کم شده باشه یا زیاد شده باشه) وزیر ها هم رو تهدید میکنن. این مفهوم دقیقا برابر است با مفهوم قدر مطلق یعنی

•    خونه (۱,۸): ۲ = |۳-۱| = |۶-۸|
•    خونه (۱,۴): ۲ = |۳-۱| = |۶-۴|
•    خونه (۵,۸): ۲ = |۳-۵| = |۶-۸|
•    خونه (۵,۴): ۲ = |۳-۵| = |۶-۴|
با توجه به  نتیجه به دست آمده در این مطلب و مطلب قبلی، در نتیجه هر وقت قدر مطلب ستون ها و سطرهای دو وزیر با هم برابر باشد در نتیجه دو وزیر هم دیگر را تهدید می کنند. از این رو تابع برازش به صورت زیر خواهد شد.

Function FitnessFunction8Queen(Chromosome)
{
Sum = 0;

Sum = Sum + Count (Column Q1 ==  Column other Queen) + Count (|Col(Q1)-Col(Other Queen)| == |Row(Q1)- Row(Other Queen)| );

Sum = Sum + Count (Column Q2 ==  Column other Queen) + Count (|Col(Q2)-Col(Other Queen)| == |Row(Q2)- Row(Other Queen)| );

Sum = Sum + Count (Column Q3 ==  Column other Queen) + Count (|Col(Q3)-Col(Other Queen)| == |Row(Q3)- Row(Other Queen)| );

Sum = Sum + Count (Column Q4 ==  Column other Queen) + Count (|Col(Q4)-Col(Other Queen)| == |Row(Q4)- Row(Other Queen)| );

Sum = Sum + Count (Column Q5 ==  Column other Queen) + Count (|Col(Q5)-Col(Other Queen)| == |Row(Q5)- Row(Other Queen)| );

Sum = Sum + Count (Column Q6 ==  Column other Queen) + Count (|Col(Q6)-Col(Other Queen)| == |Row(Q6)- Row(Other Queen)| );

Sum = Sum + Count (Column Q7 ==  Column other Queen) + Count (|Col(Q7)-Col(Other Queen)| == |Row(Q&)- Row(Other Queen)| );

Sum = Sum + Count (Column Q8 ==  Column other Queen) + Count (|Col(Q8)-Col(Other Queen)| == |Row(Q8)- Row(Other Queen)| );

Return Sum;
}

(دقت داشته باشید کد بالا بهینه و مبتنی بر هیچ زبان برنامه نویسی خاصی نیست). فقط یک نمای کلی از کد نهایی تابع برازش مسئله ۸ وزیر است، می توان این کد را به هر زبانی بازنویسی کرد.

پرونده تابع برازش مسئله ۸ وزیر اینجا بسته شد. منتظر مطالب بعدی ما باشید.

برچسب ها

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن