آخرین اخبار : 

حل پازل ۸ تایی توسط الگوریتم *A آ استار A Star با کدهای سی شارپ

 

تخفیف برای خرید این پروژه: زیر دکمه خرید، در پایین همین صفحه

حل پازل ۸ تایی توسط *A آ استار A Star کدهای سی شارپ

قیمت :   ۱۰۵۰۰ تومان ( ده هزار و پانصد تومان)

رشته :

کامپیوتر – هوش مصنوعی

نوع فایل:

سی شارپ .CS

توضیحات:

این پروژه در ویژوال استودیو پیاده سازی و اجرا گردیده است.


توضیحات :

پروژه حل پازل ۸ تایی توسط الگوریتم (*A) آ استار A Star  همراه با داکیومنت فارسی توضیحات سورس کدهای پروژه . 

همانطور که می دانید این مسئله یکی مسایل هوش مصنوعی می باشد که در اینجا حل پازل بروش هوشمند و توسط الگوریتم آ استار *A انجام شده است . 

مبحث جست و جوی آگاهانه و نا آگاهانه درهوش مصنوعی برای حل مسائل مطرح است. در جست و جوی ناآگاهانه گونه اطلاعاتی درباره حالت های مسئله نداریم و به همین دلیل ناآگاهانه نامیده شده اند. در جست و جوی آگاهانه یا هیورستیک از دانش خاص مسئله برای حل آن استفاده می شود: جست وجوی اول بهترین یا حریصانه: در آن نود ها برای گسترش براساس تابع ارزیابی مثل(f(n انتخاب می شوند و در هر مرحله نودی که کمترین مقدار fرا دارد گسترش می یابد. معروف ترین فرم جست وجوی اول بهترین ،الگوریتم A* است که نودها را با ترکیب تابع(g(nو(h(nارزیابی می کند یعنی (g(n) + h(n) = f(nکه (g(n،هزینه مسیر از نود شروعتانود n و (h(n، هزینه تخمینی ارزان ترین مسیر ازنود n تا هدف میباشد.و نود با کمترین مقدارf انتخاب شده و گسترش می یابد.با کاربرد این الگوریتم مسئله ۸ پازل حل شده است.

مشاهده تصاویری از این پروژه :

برای مشاهده تصویر با اندازه اصلی روی آن کلیک کنید

برای مشاهده تصویر با اندازه اصلی آن کلیک کنید

 

مشاهده سورس کد سی شارپ فرم اصلی این پروژه :

//توابع کتابخانه ای سی شارپ
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace _8_Puzzle
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
//تعریف متغیرهای
public bool initialopen = false;
internal char[] rep = {‘d’, ‘u’, ‘l’, ‘r’};
internal int[] notvalid1 = {6, 0, 0, 2};
internal int[] notvalid2 = {7, 1, 3, 5};
internal int[] notvalid3 = { 8, 2, 6, 8 };
internal int[] applyparam = { +3, -3, -1, +1};
internal int[] goal_Puzzle = {0, 1, 2, 3, 4, 5, 6, 7, 8}; //حالت نهایی پازل
public int[] initialPuzzle = {0, 1, 2, 3, 4, 5, 6, 7, 8};
//تعریف حد اکثر عمق جستجو برای یافتن جواب نهایی پازل
internal int maxdepth = 40;
internal elementstruct top;

private System.Windows.Forms.Button[] buttonArray = new Button[9];
private System.Windows.Forms.Button button_play;
private System.Windows.Forms.Button button_initial;

/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//سورس کد طراحی فرم و دکمه های برنامه
for(int i = 0;i < buttonArray.Length;i++)
{
this.buttonArray[i] = new System.Windows.Forms.Button();
this.buttonArray[i].Font = new System.Drawing.Font(“Microsoft Sans Serif”, 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(178)));
this.buttonArray[i].Location = new System.Drawing.Point(25+(i%3)*62,30+(i/3)*42);
this.buttonArray[i].Name = “buttonArray”;
this.buttonArray[i].Size = new System.Drawing.Size(60, 40);
this.buttonArray[i].TabIndex = i;
if(i != 8)
{
this.buttonArray[i].Text = “”+(i+1);
this.buttonArray[i].BackColor = System.Drawing.SystemColors.Control;
}
else
{
this.buttonArray[i].Text = “”;
this.buttonArray[i].BackColor = System.Drawing.SystemColors.ControlDarkDark;
}
this.buttonArray[i].Click += new System.EventHandler(this.buttonArray_Click);
this.Controls.Add(this.buttonArray[i]);
}

//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support – do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button_play = new System.Windows.Forms.Button();
this.button_initial = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button_play
//
this.button_play.Font = new System.Drawing.Font(“Microsoft Sans Serif”, 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
this.button_play.Location = new System.Drawing.Point(250, 210);
this.button_play.Name = “button_play”;
this.button_play.Size = new System.Drawing.Size(80, 25);
this.button_play.TabIndex = 0;
this.button_play.Text = “Play”;
this.button_play.Click += new System.EventHandler(this.button_play_Click);
//
// button_initial
//
this.button_initial.Font = new System.Drawing.Font(“Microsoft Sans Serif”, 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
this.button_initial.Location = new System.Drawing.Point(160, 210);
this.button_initial.Name = “button_initial”;
this.button_initial.Size = new System.Drawing.Size(85, 25);
this.button_initial.TabIndex = 1;
this.button_initial.Text = “Initial…”;
this.button_initial.Click += new System.EventHandler(this.button_initial_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackColor = System.Drawing.SystemColors.ControlDarkDark;
this.ClientSize = new System.Drawing.Size(342, 261);
this.Controls.Add(this.button_initial);
this.Controls.Add(this.button_play);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = “Form1”;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = “a star search”;
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
//تابع اصلی برنامه
static void Main()
{
Application.Run(new Form1());
}

//تابع الگوریتم جستجوی پروژه
public void Astarsearch(int[] Puzzle)
{
top = new elementstruct(maxdepth);
for (int i = 0; i < 9; i++)
top.Puzzle[i] = Puzzle[i];
top.totalcost = heur(Puzzle);
elementstruct newnode = new elementstruct(maxdepth);
while (true)
{
elementstruct node = bestnodefromqueue();
if (node == null)
{

MessageBox.Show(this,”There is no solution to this of less than”+maxdepth,”Failed”);
break;
}
else if (goal(node.Puzzle))
{
int[] Puzzle2 = new int[9];
for (int i = 0; i < node.pathcost; i++)
{
try
{
System.Threading.Thread.Sleep(1000);
}
catch {}
print_Puzzle(Puzzle);
apply(Puzzle2, Puzzle, op(node.str[i]));
for (int j = 0; j <= 8; j++)
Puzzle[j] = Puzzle2[j];
}
try
{
System.Threading.Thread.Sleep(1000);
}
catch {}
print_Puzzle(Puzzle);
Console.WriteLine(“\nGraphical Display Complete.\nThe steps taken were: (Move blank u=up, d=down, l-left, r=right)\n”);
Console.WriteLine(node.str);
Console.WriteLine(“\n”);
break;
}

if (node.totalcost > maxdepth)continue;
for (int i = 0; i <= 3; i++)
{
if (apply(newnode.Puzzle, node.Puzzle, i) == -1)
continue;

if (notonqueue(newnode.Puzzle))
{
prepend(newnode, node, i);
newnode = new elementstruct(maxdepth);
if (newnode == null)
{
Console.WriteLine(
“ERROR!! insufficient memory!! Try decreasing depth!”);
}
}
}
}
}

//تابع هوشمندی برنامه و حل پازل
static int heur(int[] Puzzle)
{
int to_return = 0;
for (int i = 0; i < 9; i++)
{
to_return += Math.Abs((i / 3) – (Puzzle[i] / 3));
to_return += Math.Abs((i % 3) – (Puzzle[i] % 3));
}
return to_return;
}

//تابع مدهای برنامه در حالات مختلف
void prepend(elementstruct newnode, elementstruct oldnode, int op)
{
newnode.next = top;
top = newnode;
for (int i = 0; i < newnode.str.Length; i++)
newnode.str[i] = oldnode.str[i];
newnode.str[oldnode.pathcost] = rep[op];
newnode.str[oldnode.pathcost + 1] = ‘0’;
newnode.pathcost = oldnode.pathcost + 1;
newnode.totalcost = newnode.pathcost + heur(newnode.Puzzle);
if (newnode.totalcost < oldnode.totalcost)
newnode.totalcost = oldnode.totalcost;
}

//تابع بررسی وضعیت پایان بازی یا عدم پایان آن
bool goal(int[] Puzzle)
{
for (int i = 0; i < 9; i++)
if (Puzzle[i] != goal_Puzzle[i])
return false;

return true;
}

//تابع بررسی وضعیت صف برنامه
bool notonqueue(int[] Puzzle)
{
int i;
elementstruct t = top;
while (t != null)
{
for (i = 0; i < 9; i++)
if (t.Puzzle[i] != Puzzle[i])
break;
if (i == 9)
return false;
t = t.next;
}
return true;
}

//تابع یافتن بهترین گره برای حرکت بعدی
elementstruct bestnodefromqueue()
{
elementstruct t = top;
int min_totalpathcost = 1000;
//int totalpathcost;
elementstruct to_return = null;
while (t != null)
{
if (t.valid == 1 && t.totalcost < min_totalpathcost)
{
min_totalpathcost = t.totalcost;
to_return = t;
}
t = t.next;
}

if (to_return != null)
to_return.valid = 0;
return to_return;
}

int apply(int[] newstate, int[] oldstate, int op)
{
int j;
int blank = 0;

for (j = 0; j < 9; j++)
if (oldstate[j] == 8)
{
blank = j;
break;
}

if (blank == notvalid1[op] || blank == notvalid2[op] ||
blank == notvalid3[op])
return -1;

for (j = 0; j < 9; j++)
newstate[j] = oldstate[j];

newstate[blank] = newstate[blank + applyparam[op]];
newstate[blank + applyparam[op]] = 8;

return 1;
}

//تابع چاپ پازل
public void print_Puzzle(int[] Puzzle)
{
for (int i = 0; i < Puzzle.Length; i++)
{
if (Puzzle[i] != 8)
{
buttonArray[i].Text = “”+(Puzzle[i] + 1);
buttonArray[i].BackColor = System.Drawing.SystemColors.Control;
buttonArray[i].Refresh();
}
else
{
buttonArray[i].Text =””;
buttonArray[i].BackColor = System.Drawing.SystemColors.ControlDarkDark;
buttonArray[i].Refresh();
}
}
}

//تابع بررسی حرکات صحیح در پازل
public static bool isvalid(int sou,int des)
{
switch(sou)
{
case 0:
if(des == 1 || des == 3)
return true;
else
return false;
case 1:
if(des == 0 || des == 2 || des == 4)
return true;
else
return false;
case 2:
if(des == 1 || des == 5)
return true;
else
return false;
case 3:
if(des == 0 || des == 4 || des == 6)
return true;
else
return false;
case 4:
if(des == 1 || des == 3 || des == 5 || des == 7)
return true;
else
return false;
case 5:
if(des == 2|| des == 4 || des == 8)
return true;
else
return false;
case 6:
if(des == 3 || des == 7)
return true;
else
return false;
case 7:
if(des == 4 || des == 6 || des == 8)
return true;
else
return false;
case 8:
if(des == 5 || des == 7 )
return true;
else
return false;
default:
return false;
}
}

char to_char(int i)
{
if (i >= 0 && i <= 7)return (char) (i + ‘1’);
else return ‘x’;
}

//قطعه کد حرکات بالا پایین چپ یا راست
int op(char i)
{
switch (i)
{
case ‘d’:
return 0;
case ‘u’:
return 1;
case ‘l’:
return 2;
case ‘r’:
return 3;
default:
Console.WriteLine(“ERROR!”);
return -1;
}
}

//تابع مربوط به کلیک دکمه های پازل
private void buttonArray_Click(object sender, System.EventArgs e)
{
Button temp = (Button)sender;
if(temp.Text !=””)
{
int space;
for(space = 0;space <initialPuzzle.Length;space++)
{
if(initialPuzzle[space] == 8)
break;
}
int clickon;
for(clickon = 0;clickon < buttonArray.Length;clickon++)
{
if(buttonArray[clickon] == temp)
break;
}
// if(isvalid(clickon,space))
// {
buttonArray[space].BackColor = System.Drawing.SystemColors.Control;
buttonArray[space].Text = temp.Text;
initialPuzzle[space] = Convert.ToInt32((temp.Text))-1;
temp.BackColor = System.Drawing.SystemColors.ControlDarkDark;
temp.Text = “”;
temp.Refresh();
buttonArray[space].Refresh();
initialPuzzle[clickon] = 8;
// }
}
}

//تابع مربوط به کلیک دکمه آغاز و فراخوانی الگوریتم جستجو
private void button_play_Click(object sender, System.EventArgs e)
{
this.Astarsearch(initialPuzzle);

}

دانلود  حل پازل ۸ تایی توسط الگوریتم *A آ استار A Star با کدهای سی شارپ به همراه توضیحات فارسی کدهای پروژه 

در تمامی ساعات شبانه روز >> پرداخت آنلاین و دانلود آنی فایل پس از پرداخت. 

 

 پذیرش و انجام سفارشات پروژه های شما
شماره تماس پشتیبانی سایت : ۰۹۳۹۲۷۶۱۶۳۰

 

تخفیف بسیار ویژه ۳۰ درصدی : دوست عزیز سعی ما این بوده که پروژه ها را با کمترین قیمت ممکن (مقایسه کنید با قیمت سایر سایتها) در اختیار شما قرار دهیم اما اگر دوستی هست که واقعا این مبلغ نیز برایش مقدور نیست می توانید از طریق دکمه پرداخت زیر به مقدار ۳۰ درصد از وجه این پروژه یا مقاله را محاسبه و کسر کنید و سپس آن را از طریق لینک زیر پرداخت کنید. (با توجه به هزینه های زیاد سرور و نگهداری سایت برای ما، خود شما و وجدانتان را قاضی کرده ایم/ پس دوست من با قضاوت وجدان خودت اگر واقعا از عهده مبلغ قید شده بر نیامدید از لینک تخفیف ویژه استفاده کنید!) متشکرم.پاسخگویی از ۸ صبح لغایت ۳۰: ۲۳ شب.

============

Related posts

, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

پاسخ دهید

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

Translate »