<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>وبلاگ سیاوش محمودیان &#187; tutorial</title>
	<atom:link href="http://blog.syavash.com/fa/tag/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.syavash.com/fa</link>
	<description>خلق کن و به اشتراک بگذار...</description>
	<lastBuildDate>Fri, 30 May 2014 18:53:02 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>مقدمه ای بر شبکه های عصبی</title>
		<link>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%da%a9%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d8%b5%d8%a8%db%8c/</link>
		<comments>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%da%a9%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d8%b5%d8%a8%db%8c/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 05:24:00 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[ANN]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[neural network]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=287</guid>
		<description><![CDATA[<p>در مقدمه ای به هوش مصنوعی سه بخش اساسی در هوش مصنوعی رو بطور خیلی خلاصه گفتیم! حالا توی این بخش می خوایم بطور خلاصه به شبکه های عصبی بپردازیم. ببخشید؟  &#8221; آخه من که هنوز چیزی نگفتم که می خوای سوال کنی! سوالت چیه حالا؟ &#8220; من یادم رفت اون سه بخش اساسی چی بودن. می شه یک [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%da%a9%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d8%b5%d8%a8%db%8c/">مقدمه ای بر شبکه های عصبی</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<p>در <b><a href="http://www.syavash.com/portal/users/siavash/blogs/farsi-what-is-artificial-intelligence-fa">مقدمه ای به هوش مصنوعی</a></b> سه بخش اساسی در <b>هوش مصنوعی</b> رو بطور خیلی خلاصه گفتیم! حالا توی این بخش می خوایم بطور خلاصه به شبکه های عصبی بپردازیم.</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ببخشید؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آخه من که هنوز چیزی نگفتم که می خوای سوال کنی! سوالت چیه حالا؟ &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />من یادم رفت اون سه بخش اساسی چی بودن. می شه یک بار دیگه بگید؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; سه بخش عبارتند از:</p>
<ul>
<li><b>شبکه های عصبی</b> یا Neural Network</li>
<li>الگوریتم ژنتیک یا Genetic Algorithm</li>
<li>منطق فازی یا Fuzzy Logic</li>
</ul>
<p>البته به این راحتی نمیشه <b>هوش مصنوعی</b> رو دسته بندی کرد. منظورمون از این دسته بندی این هست که این روز ها روی این ۳ مبحث بیشتر بحث می شه. &#8220;</div>
</dd>
</dl>
<p>خوب کسی یادش هست شبکه های عصبی هدف و خاصیت هاش چی بود؟</p>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />من تا جایی که یادمه در <b>شبکه های عصبی مصنوعی</b> یا Artificial Neural Networks محققان قصد داشتند که طریقه ی عملکرد مغز انسان در به خاطر سپردن اطلاعات و یادگیری رو شبیه سازی کنند.<br />
محققان توی تحقیق هاشون دیدن که مغز انسان از تعداد خیلی زیادی عصب یا Neuron تشکیل شده که هر کدوم از این عصب ها به تعداد دیگه ای عصب متصل هستن و به همدیگه سیگنال هایی رو میفرستند. در بعضی شرایط عصب ها سیگنال رو از خودشون عبور میدن و اون رو تقویت می کنند و در بعضی شرایط هم از خودشون عبور نمیدن. با اینکه هر نورون ساختار خیلی پیچیده ای نداره مجموعه ی این نورون ها یک شبکه ی بسیار پیچیدرو تشکیل میده که قابلیت یادگیری و ذخیره کردن اطلاعات و تحلیل اون ها رو داره!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بسیار عالی! خیلی خوشحالم که خوب حرف های جلسه ی قبل یادت مونده! همونطوری که دوستمون گفتن مغز انسان تعداد خیلی زیادی نورون داره که حدودا ۱۰ به توان ۱۲ تا می شه. ولی هر نورون حدودا فقط به ۱۰ به توان ۳ نورون دیگه وصل هست که این نشون می ده ارتباطات بین این نورون ها انتخاب شده هست!<br />
خوب حالا کسی یادش هست که محققا به چه نحوی سعی کردند شبکه های عصبی رو شبیه سازی کنند؟ &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />تا جایی که من یادم هست گفتید اول نورون های مصنوعی رو تعریف می کنند به این صورت که هر نورون یه تعداد ورودی و خروجی داره و یک بایاس و هر ورودی هم یک وزن (Weight) داره.<br />
بعد این نورون ها رو توی چند لایه قرار می دن که به لایه ی اول لایه ی ورودی و به آخرین لایه لایه ی خروجی و به بقیه ی لایه ها لایه ی مخفی یا میانی میگن. تعداد نورون های لایه ی ورودی و خروجی بسته به تعداد ورودی و خروجی تعیین می شن اما تعداد لایه های میانی و نورون های هر لایه می تونه هر مقداری باشه که البته هر مقداری از اون نتیجه ی مطلوبی رو به ما نمیده و باید انتخاب شده باشه.</div>
</dt>
</dl>
<p>عالیه! ممنونم از همکاریتون!<br />
البته نورون ها فقط از بخش هایی که شما گفتید تشکیل نمی شن و ممکن هست بر حسب نوع شبکه پارامتر های دیگری هم داشته باشن که بعدا بهشون اشاره می کنیم.</p>
<h2>پرسپترون (Perceptron)</h2>
<p>تا اینجا از دور به ساختار نورون ها و <b>شبکه ی عصبی</b> نگاه کردیم. حالا می خوایم آسون ترین شکل نورون رو در ساده ترین حالت بررسی کنیم.</p>
<p><em id="__mceDel"><img class="alignleft" title="پرسپترون" alt="پرسپترون" src="http://www.syavash.com/portal/files/siavash/blogs/introduction-to-neural-network/1.gif" width="100px" height="119" /></em></p>
<p><b style="line-height: 1.714285714;">پرسپترون</b><span style="line-height: 1.714285714;"> یا Perceptron ساده ترین نوع مدلسازی نورون هست. از اونجایی که بررسی چند پرسپترون در لایه های مختلف کمی پیچیده هست برای شروع به بررسی یک عدد پرسپترون می پردازیم.</span><br />
پرسپترون دارای یک سری ورودی خارجی. یک ورودی داخلی به نام <i>بایاس</i> (bias). یک threshold و یک خروجی هست. که در شکل سمت چپ می تونید اون رو ببینید!</p>
<p>هر پرسپترون نشاندهنده و معرف یک نورون هست. ورودی پرسپترون ها معمولا از جنس boolean هست اما در کل می تونه هر عددی باشه ولی خروجی <b>همیشه</b> یک boolean هست!</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />ببخشید! منظورتون از boolean چی هست دقیقا؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; مثلا وقتی می گیم خروجی یک پرسپترون همیشه boolean یا بولین هست یعنی خروجی می تونه دو مقدار ۱ و ۰ داشته باشه! که ۱ معرف درست یا true و ۰ معرف غلط یا false هست. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />پس یعنی ورودی پرسپترون می تونه هر مقداری باشه اما معمولا یا ۰ یا ۱ هست و خروجی اون ۱۰۰٪ ۰ یا ۱ هست. درسته؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بله! کاملا درسته&#8230; &#8220;</div>
</dd>
</dl>
<p>در صورتی که خروجی یک پرسپترون یک باشه به اون پرسپترون می گیم <b>پرسپترون فعال</b> یا activated.<br />
تمام ورودی ها از جمله بایاس دارای یک وزن هستند که این وزن ضرب در مقدار ورودی می شه. معمولا وزن بایاس برابر ۱ هست.<br />
یکی از مهمترین عوامل هر نورون <b>تابع فعال کننده</b> یا Activation function اون نورون هست. تابع فعال کننده تعیین می کنه که با توجه به ورودی های نورون خروجی اون به چه شکل باشه. در پرسپترون ها ما یکی از ساده ترین توابع فعال کنندرو داریم. این تابع تمام ورودی های پرسپترون رو بعد از ضرب کردن اون ها در وزنشون با هم جمع می کنه. در صورتی که جمع اونا از <b>threshold</b> بیشتر یا مساوی بود خروجی ۱ خواهد بود یعنی پرسپترون فعال خواهد شد و در غیر این صورت پرسپترون غیر فعال خواهد شد. پس در صورتی که شرط زیر برقرار باشه یک پرسپترون فعال خواهیم داشت:</p>
<div><img title="" alt="" src="http://www.syavash.com/portal/files/siavash/blogs/introduction-to-neural-network/2.gif" /></div>
<p>در اصل threshold مثل یک دیوار می مونه. اگر سیگنال انرژی کافی برای رد شدن از دیوار رو داشته باشه از روی اون عبور می کنه. در غیر این صورت پشت دیوار می مونه.</p>
<h3>یادگیری در پرسپترون</h3>
<p>از خصیصه های اصلی پرسپترون ها قابلیت <b>یادگیری</b> یا train شدن هست. این یادگیری در پرسپترون ها supervised هست. به این مفهوم که ما باید تعدادی ورودی به همراه خروجی صحیح داشته باشیم تا پرسپترون بتونه اون رو تقلید کنه.<br />
یادگیری پرسپترون ها با این صورت هست:</p>
<ol>
<li>یک خروجی تولید می کنند.</li>
<li>خروجی رو با خروجی که باد می بوده مقایسه می کنند.</li>
<li>خودشون رو کمی تنظیم می کنند تا به خروجی نزدیک تر بشن.</li>
</ol>
<p>بعد از تکرار شدن این مراحل به تعداد کافی پرسپترون اصتلاحا به رفتار صحیح همگرا یا converge میشه!<br />
به این روش یادگیری <b>delta rule</b> یا قانون دلتا می گن. در این روش یادگیری تغییر وزن در هر مرحله به صورت زیر محاسبه می شه:</p>
<div><img title="" alt="" src="http://www.syavash.com/portal/files/siavash/blogs/introduction-to-neural-network/3.gif" /></div>
<p>که دلتا در اون تفاوت خروجی مورد نظر و خروجی نورون بوده و xi مقدار ورودی هست.</p>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />پس یعنی <i>مقدار جدید وزن</i> هر نورون می شه تفاوت خروجی مورد نظر و خروجی نورون ضرب در مقدار ورودی اون نورون؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; به جز قسمت اول بقیه ی حرفت درسته. این مقدار وزن جدید نیست بلکه <b>به وزن قبلی</b> اضافه میشه! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />پس یعنی مقداری که بدست میاد میزان تغییرات در وزن قبلی هست! الآن متوجه شدم.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بسیار عالی. &#8220;</div>
</dd>
</dl>
<h3>مثال تابع OR</h3>
<p>یک پرسپترون قابلیت جدا کردن فضا به <b>دو</b> بخش رو داره. پس ما با یک پرسپترون فقط می تونیم توابعی رو به درستی بدست بیاریم که در فضا بتونیم قسمت های مثبت خروجی و منفی اون رو به دو قسمت تقسیم کنیم.<br />
در شکل زیر تونستیم به یک پرسپترون تابع OR رو یاد بدیم.</p>
<div><img title="" alt="" src="http://www.syavash.com/portal/files/siavash/blogs/introduction-to-neural-network/4.gif" /></p>
</div>
<p>دو محور دو ورودی پرسپترون هستند. همونطور که می بینید پرسپترون فضا رو به دو قسمت مجزا کرده به این صورت که فضای بالای خط سبز رنگ خروجی + یا ۱ خواهند داشت و فضای پایین خط خروجی &#8211; یا ۰. پس در صورتی که ورودی ها ۱ و ۱ یا ۰ و ۱ یا ۱ و ۰ باشند خروجی ما + یا ۱ خواهد بود و در صورتی که ورودی ها ۰ و ۰ باشند خروجی &#8211; یا &#8211; خواهد بود! پس تونستیم با یک پرسپترون ساده تابع OR رو بخوبی در بیاریم.</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />ببخشید معادله ی این خط رو ما بهش دادیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه! اگر معادله ی خط رو ما می دادیم که دیگه یادگیری در کار نبود! ما برای پرسپترون چندین بار مثال زدیم و پروسه ی یادگیری که بالا توضیح دادم به همون تعداد دفعه اجرا شده. یعنی مثلا دو ورودی رو ۱ دادیم و گفتیم خروجی باید ۱ باشه. بعد یک ورودی ۱ و یک ورودی ۰ دادیم و گفتیم خروجی باید ۱ باشه و بعد دو ورودی ۰ دادیم و گفتیم خروجی باید &#8211; باشه! و همین کار رو چندین بار تکرار کردیم. و پرسپترون با استفاده از تابع یادگیری فضا رو به دو قسمت مثبت و منفی تقسیم کرده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />خوب کل حالات OR ۴ حالت بیشتر نمیشن! اینطور که شما میگید ما بیشتر از ۴ مثال برای پرسپترون می زنیم. یعنی ممکنه چندین بار یک مثال رو برای پرسپترون بزنیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بله! برای اینکه پرسپترون بهتر یاد بگیره ممکن هست مثلا ورودی ۱ و ۱ با جواب ۱ رو چندین بار برای اون مثال بزنیم تا این ورودی ها به همراه خروجی چندین بار داخل تابع یادگیری برن و اطمینان پیدا کنیم پرسپترون همگرا شده! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />من نمی فهمم! خوب این چه کاریه. می تونستیم جای اینکه ۱۰۰ تا مثال بزنیم از اول ۴ تا حالت رو تعریف کنیم! اونطوری نیازی به همگرایی و این جور چیزا هم نبود!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; در مورد این مثال که ۴ حالت بیشتر نیست درست میگید! اما این فقط یک مثال ساده هست برای اینکه مطلب جا بیفته! برای کار های سخت تر مثل شناسایی دست خط تعداد حالات ۴ عدد نیست! نکته ی اصلی این هست که در شبکه های عصبی ما یادگیری داریم! مثلا می تونیم با چند بار نوشتن حرف ب و چند بار نوشتن حرف ج به کامپیوتر یاد بدیم این دو حرف با هم فرق دارند و اولی ب و دومی ج هست! در جلسات بعدی احتمالا همچین مثالی رو نشونتون خواهم داد. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />یک سوال دیگه! پس با یک پرسپترون ما می تونیم تابع AND رو هم در بیاریم! درسته؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; کاملا درسته! چون تابع AND هم قابل تقسیم به دو بخش در فضا هست. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />XOR چطور؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه! XOR رو نمیشه با یک پرسپترون در آورد! چون XOR با تقسیم فضا به دو بخش مثبت و منفی در نمیاد.<br />
در XOR ورودی و خروجی به این صورته:</p>
<ul>
<li>به ازای ۰ و ۰ خروجی ۰ داریم.</li>
<li>به ازای ۰ و ۱ خروجی ۱ داریم.</li>
<li>به ازای ۱ و ۰ خروجی ۱ داریم.</li>
<li>به ازای ۱ و ۱ خروجی ۰ داریم.</li>
</ul>
<p>یعنی با توجه به شکل آخر بالا سمت راست و پایین سمت چپ خروجی باید + بشه و در بالا سمت چپ و پایین سمت راست باید منفی بشه! ما نمی تونیم هیچ خط راستی رسم کنیم که فضا رو به این صورت تقسیم کنه پس هیچ وقت پرسپترون همگرا نخواهد شد! &#8220;</p></div>
</dd>
</dl>
<p>پس فهمیدیم یک پرسپترو محدود هست. اما با ترکیب همین پرسپترون های خیلی محدود در لایه های مختلف می تونیم توابعی مثل XOR و توابع خیلی پیچیده تر از اون رو هم در بیاریم.<br />
انشاالله در جلسات بعدی مثال های بیشتری در ارتباط با شبکه های عصبی خواهیم دید. دیگه خیلی حرف زدم!<br />
در صورتی که سوالی در ارتباط با هوش مصنوعی داشتید می تونید اون رو در <b><a href="http://artificial.ir/">انجمن تخصصی هوش مصنوعی</a></b> مطرح کنید.<br />
موفق باشید.</p>
<h2>لینک های داخلی</h2>
<ul>
<li><a href="http://www.syavash.com/portal/users/siavash/blogs/farsi-what-is-artificial-intelligence-fa">مقدمه ای بر هوش مصنوعی</a></li>
<li><a href="http://www.syavash.com/portal/users/siavash/blogs/artificial-intelligence-in-robotics-fa">هوش مصنوعی در رباتیک</a></li>
<li><a href="http://www.syavash.com/portal/users/siavash/blogs/installing-robocup-soccer-simulation-fa">مقدمه ای بر شبیه سازی فوتبال</a></li>
</ul>
<h2>لینک های خارجی</h2>
<ul>
<li><a href="http://artificial.ir/">انجمن تخصصی هوش مصنوعی</a></li>
</ul>
<h2>References</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Artificial_inteligence">http://en.wikipedia.org/wiki/Artificial_inteligence</a></li>
<li><a href="http://en.wikipedia.org/wiki/Neural_network">http://en.wikipedia.org/wiki/Neural_network</a></li>
<li><a href="http://www.artificial-neural-networks.info/">http://www.artificial-neural-networks.info</a></li>
</ul>
<p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%da%a9%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d8%b5%d8%a8%db%8c/">مقدمه ای بر شبکه های عصبی</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%da%a9%d9%87-%d9%87%d8%a7%db%8c-%d8%b9%d8%b5%d8%a8%db%8c/feed/</wfw:commentRss>
		<slash:comments>43</slash:comments>
		</item>
		<item>
		<title>ساخت روبات یاهو مسنجر &#8211; قسمت دوم</title>
		<link>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/</link>
		<comments>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 02:06:28 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[messenger]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=273</guid>
		<description><![CDATA[<p>توجه در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به اینجا مراجعه کرده و سورس کد یک بات پایه یاهو! مسنجررا به زبان Visual Basic دریافت نمایید. جلسه دوم خیلی خوب با نام خدا جلسه دوم آموزش ساختن روبات یاهو! مسنجر رو [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/">ساخت روبات یاهو مسنجر &#8211; قسمت دوم</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<h2>توجه</h2>
<p>در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">اینجا</a> مراجعه کرده و سورس کد یک <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">بات پایه یاهو! مسنجر</a>را به زبان Visual Basic دریافت نمایید.</p>
<h2>جلسه دوم</h2>
<p>خیلی خوب با نام خدا جلسه دوم آموزش ساختن <b>روبات یاهو! مسنجر</b> رو شروع می کنیم&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ایول ایول&#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; به به میببنم که این جلسه خیلی سر حالی&#8230; &#8220;</div>
</dd>
</dl>
<p>خوب جلسه پیش به طور خلاصه توضیح دادیم که <b>یاهو مسنجر</b> چطوری به سرور کانکت میشه و چطوری ما به وسیله یاهو! مسنجر لاگین میشیم. جالا این جلسه میخوایم یه سری تعریفای مقدماتی مثل آی پی (IP) و پورت (Port) و سوکت (Socket)، و یه سری مفاهیم مثل طریقه فرستادن اطلاعات تو شبکه و انواع اون رو بگیم. چون اینا برای درست کردن یک <b>روبات یاهو! مسنجر</b> نیاز میشن!</p>
<h2>تعاریف مقدماتی</h2>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" /> آقا اجازه؟ این<i> آی پی</i> چیه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خودم الان داشتم می گفتم&#8230; یکم گوش بده چی می گم بعد سوال بپرس&#8230; &#8220;</div>
</dd>
</dl>
<h3>تعریف آی پی و پورت</h3>
<p>خوب. اولین تعریفها <b>آی پی</b> و <b>پورت</b> هستن. بذارید معنی اینا رو با مثال توضیح بدم. ببینید توی یه شهر کلی خونه هست که هر کدوم از خونه ها یه آدرس و پلاک مخصوص خودشونو دارن&#8230; مثلا میگیم تهران. خ شریعتی &#8230;. پلاک ۹٫۱٫ آدرس همیشه منحصر به فرد هست یعنی دو تا خونه وجود ندارن که آدرسشون یکی باشه&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />کی گفته آقا ما یه دوست داریم پلاک خونشون با پلاک خونه بقلیشون یکیه!!!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ببین من منظورم یه شهر قانونمند بود تهران رو نمیگفتم&#8230; &#8220;</div>
</dd>
</dl>
<p>خوب داشتم می گفتم. آدرس منحصر به فرد هست. این آدرس توی شهر همون آی پی هست توی شبکه. یعنی توی اینترنت (و کلا توی شبکه) هر کامپیوتری یه آدرس داره که بهش میگن <b>آی پی</b>.<br />
حالا مثلا به دوستتون آدرس میدین بعد میگین رسیدی به خونمون از در جلو بیا تو یا از مثلا از در عقب بیا. یا اصلا میگی از پنجره بیا تو. به این میگن پورت. در اصل<b>پورت</b> یعنی از چه راهی به اون آدرس وصل بشیم. شاید این مثال بهتری باشه. آی پی آدرس هست و پورت جاده. از جاده های مختلف می شه با یه آدرس رسید.</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />آقا اجازه ما یه دوست دیگه داریم&#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ساکت!!! میدونم چی میخوای بگی. تو شهری که من گفتم بین هر دو تا خونه حداقل چند تا راه هست&#8230; &#8220;</div>
</dd>
</dl>
<p>حالا که مفهوم <i>آی پی</i> و <i>پورت</i> رو فهمیدیم یکم در باره شکل ظاهری اونا توضیح میدم.<br />
آی پی به شکل ###.###.###.### هستش که به جای هر کدوم از #ها یک عدد قرار میگیره. مثلا ۸۴٫۲۴۱٫۳۲٫۶۴<br />
پورت هم به طور معمول یک عدد هستش بین ۱ تا ۶۵۵۳۶ (۲ به توان ۱۶) و پورت های کوچک هم (زیر ۱۰۲۴) معمولا رزرو شده هستن یعنی معلومه مخصوص چه کاری هستن. مثلا پورت ۸۰ برای http هست یعنی وقتی میرید تو یه سایت اطلاعات اون سایت از طریق این پورت فرستاده میشه یا مثلا پورت ۲۱ برای FTP هست. بعدا بیشتر درباره پورت توضیح میدم. قاعدتا الان زیاد نباید چیزی ازش فهمیده باشین.</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" /> آقا اجازه؟ ما فکر کنیم شما دارین آی پی پورت رو اشتباه تعریف می کنین. آی پی پورت از اون چیزاییه که وارد می کنیم بعد از فیلتر باهاش رد میشیم. همین دیروزم دوستم یه آی پی پورت حدید بهم داد.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ای بابا&#8230; چه ربطی داره! بذار برات توضیح بدم. ببین اول مختصرا باید بدونی چطوری سایتا رو فیلتر میکنن. شما وقتی میرید تو یه سایت اول براوزرتون (Browser) یه پیغام به آی اس پی (Internet Service Provider) میفرسته که من این سایت رو میخوام بعد آی اس پی آدرس رو چک می کنه اگه آدرس سایت جزو لیستی که باید فیلتر شه باشه اون صفحرو با اکسس بلاکد (Access Blocked) یا هر چیزی که براش تنظیم کرده باشن عوض میکنه و اونو بجای صفحه اصلی براتون میفرسته.<br />
اون آی پی و پورتی که شما وارد میکنید آی پی و پورت یه <b>پراکسی سرور</b> (Proxy Server) هستش. کار پراکسی سرور اینه که اطلاعات رو بصورت غیر مستقیم بفرسته. یعنی وقتی شما اون آدرس رو وارد میکنید از اون به بعد میرید تو هر سایتی به جای اینکه براوزر به آی اس پی مستقیم بگه من این سایتو میخوام به پراکسی سرور میگه اون صفحرو بگیره بعد برای شما بفرسته. اینطوری در واقع گول می خوره آی اس پی.<br />
پس شما اینو درست گفتین که اونا آی پی و پورت هستن ولی تعریف آی پی و پورت نیستن بلکه آی پی و پرت یا آدرس اون پراکسی سرور هستن. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />آهان پس اینطوریه.</div>
</dt>
</dl>
<p>خوب. یه قرار دادم میگم حالا. اگه یکی به شما بگه برو به فلان آی پی وصل شو معنی نداره. چون معلوم نیست از کدوم راه باید بهش وصل بشی. چون پورت رو مشخص نکرده. عین اینه که یه تک سیم به شما بدن بعد بگن اینو بزن به پریز و نگن به فاز بزن یا نول.<br />
برای اینکه هی نگن به فلان <b>آی پی</b> با فلان <b>پرت</b> وصل شو یه قرار داد گذاشتن. میگن به IP:Port وصل شو. یعنی آی پی رو میگن و بعدش یه دو نقطه میذارن و بعد پورت رو میگن، مثلا: ۸۴٫۲۴۱٫۳۲٫۶۴:۲۱</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ببخشید ما نفهمیدیم این فاز و نول چین؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; هیچی ولش کن. اونارو ندونیم می تونی روبات یاهو! مسنجر بسازی. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />آقا آی پی خودمونو از کجا میتونیم پیدا کنیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اگر ویندوزتون XP باشه که خیلی راحت میتونن دوبار کلیک (Double Click) کنید روی عکس دو تا کامپیوترا که وقتی به نت وصل میشید میان بعد بزنید رو Details و آی پی که جلوی Client Address نوشته شده آی پی شماست. راه دیگشم اینه که برید تو Start-&gt;Run و بعد بنویسید cmd و اینتر (Enter) کنید تا Command Prompt باز شه و بعد بنویسید ipconfig و اینتر کنید. جلوی IP Address آی پی شما رو نوشته. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />ببخشید من وقتی تو کامپیوترم ipconfig رو میزنم دو تا IP Address میاد. ماجرا چیه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; شما کامپیوترتون به شبکه داخلی هم وصله. درست عین اینه که دو تا خونه داشته باشی. حالا اینجا شاید سوال پیش باید بالاخره آدرس من کدومه؟ جوابشم اینه که شما تو شبکه داخلی (مثلا LAN) یک آدرس دارین و تو اینترنت هم یه آدرس دیگه. فهمیدن این هم که کدوم آدرس داخلیه و کدوم آدرس اینترنته معمولا آسونه چون آی پی داخلی معمولا با ۱۹۲٫۱۶۸ شروع میشه. در ضمن بالای هر آدرس نوشته مربوط به کجاست مثلا اگه اینترنتتون دیال آپ (Dial Up) باشه بالای آدرس اینترنتتون نوشته PPP adapter. &#8220;</div>
</dd>
</dl>
<h3>تعریف سوکت</h3>
<p>خوب حالا میگیم سوکت چیه! سوکت یه مکانیسم ارتباط هست که اولین دفه روی ورژن BSD از سیستم عامل یونیکس ارائه داده شد. ما زیاد به این تعریفش کاری نداریم. شما در این حد بدونید که با استفاده از سوکت می تونیم اطلاعات رو تو اینترنت و کلا تو شبکه انتقال بدیم.<br />
میشه به دو طریق با سوکت اطلاعات رو روی شبکه انتقال داد: TCP و UDP<br />
که ما در بیشتر مراحل ساختن روبات باهو! مسنجر (به جز Voice Chat و Webcam) به نوع اول یعنی TCP نیاز داریم.<br />
مختصرا توضیح میدم فرق این دو تا چیه:</p>
<ul>
<li><b>TCP</b> که مخفف Transmission Control Protocol هستش یه تیکه از اطلاعات رو میفرسته و بعدش منتظر میشه ببینه تمام اطلاعات کامل رسیده یا نه و اطلاعاتی که نرسیدرو دوباره میفرسته و دوباره همین کارو تکرار می کنه. خوبیشم اینه که تمام اطلاعات مطمعنا فرستاده میشه و بدیشم اینه که سرعتش کمتره نسبت به UDP چون کلی اطلاعات اضافی ردو بدل میشه برای اینکه چک بشه تمام اطلاعات کامل منتقل شده یا نه.</li>
<li><b>UDP</b> که مخفف User Datagram Protocol هست دقیقا برعکس TCP هست یعنی پشت سر هم اطلاعات فرستاده میشه و چک نمیشه که همش رسیده.</li>
</ul>
<p>وقتی شما دارین یه فایل رو <i>دانلود</i> (Download) میکنید از TCP استفاده میشه چون باید تمام اطلاعات به طور کامل دریافت شه اما وقتی مثلا ویس چت (Voice Chat) میکنید از UDP استفاده میشه چون مهم اینه چیزی که الان گفته میشه برسه برای همینه بعضی اوقات صدا قطع و وصل میشه. در ضمن ترتیب رسیدن هم معلوم نیست تو UDP یعنی ممکنه وقتی abc فرستاده میشه acb دریافت بشه برای همینه بعضی اوقات تو ویس چت صدا روباتی یا شطرنجی میشه.<br />
خوب دیگه برای این جلسه کافیه! جلسه دیگه یاد میگیریم چطوری بفهمیم یه برنامه چه اطلاعاتی رو داخل شبکه ردو بدل می کنه و بعد میریم سراغ یاهو! مسنجر که ببینیم چیا میفرسته و دریافت میکنه تا بتونیم اصل روبات ساختن رو شروع کنیم.</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />خوب آقا&#8230; آخه خوب&#8230; خوب نمیشه الان بگین؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اولا که ادا منو در نیار. دست خودم نیست میخوام حرفمو شروع کنم باید خوب رو بگم. دوما تو که تمام مدت داشتی میشمردی من چند بار خوب گفتم. چه فرقی برات میکنه بقیشو الان بگم یا نگم وقتی اصلا گوش نمیکنی. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />آخه تا الان شده ۶ تا خوب اگه بقیشم الان بگید ممکنه بشه ۱۰ تا خوب تو یه جلسه. اونطوری بهتره.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ببین شوخی بسه. خودتونو آماده کنید برای جلسه دیگه. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />ببخشید میشه به آقای <img alt="Question level 4" src="http://www.syavash.com/portal/images/blog/q4.gif" /> بگید آی پی پورت پراکسی سرورو بلند بخونه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه. بعد از کلاس خودتون ازش بپرسین. &#8220;</div>
</dd>
</dl>
<p>خوب دیگه بسه دیگه. خداحافظ.</p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/">ساخت روبات یاهو مسنجر &#8211; قسمت دوم</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>ساخت روبات یاهو مسنجر &#8211; قسمت اول</title>
		<link>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/</link>
		<comments>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/#comments</comments>
		<pubDate>Mon, 31 Dec 2007 22:20:11 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[messenger]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=270</guid>
		<description><![CDATA[<p>توجه در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به اینجا مراجعه کرده و سورس کد یک بات پایه یاهو! مسنجررا به زبان Visual Basic دریافت نمایید. جلسه اول در این سری از نوشته ها ما می خوایم یاد بگیریم [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">ساخت روبات یاهو مسنجر &#8211; قسمت اول</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<h2>توجه</h2>
<p>در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">اینجا</a> مراجعه کرده و سورس کد یک <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">بات پایه یاهو! مسنجر</a>را به زبان Visual Basic دریافت نمایید.</p>
<h2>جلسه اول</h2>
<p>در این سری از نوشته ها ما می خوایم یاد بگیریم که چطوری یه <b>روبات</b> (bot) <b>یاهو مسنجر</b> بسازیم.<br />
بذارید اول چند تا از دانش پژوهان رو معرفی کنم:</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />یه دانش پژوه نرمال که تا حدودی کار با کامپیوتر رو بلده.</div>
</dt>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />یه دانش پژوه گیر که کار با کامپیوتر رو خوب بلده و سر هر چیزی گیر میاد سوال میکنه.</div>
</dt>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />یه دانش پژوه تیز که کار با کامپیوتر رو خیلی خوب بلده اما برنامه نویسی با ویژوال بیسیک رو بلد نیست.</div>
</dt>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />یه دانش پژوه خیلی قوی از نظر کامپیوتر که زبان برنامه نویسی ویژوال بیسیک رو کاملا بلده.</div>
</dt>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />این دانش پژوه کلا چیزی بلد نیست فقط بلده تیکه بپرونه و شیطونی کنه.</div>
</dt>
</dl>
<h2>روبات یاهو مسنجر چیست؟</h2>
<p>خوب حالا باید بدونیم یک <b>ربات یاهو</b> چی هست اصلا! یعنی مثلا چطوری آنلاین می شه و چه فرقی با یه آی دی (ID) معمولی دار.<br />
در اصل آی دی یه <b>روبات یاهو مسنجر</b> هیچ فرقی با آی دی های دیگه نداره فقط نحوه لاگین (Login) کردنش فرق میکنه. یعنی بر عکس من و شما که با <b>یاهو! مسنجر</b> (Yahoo! Messenger) لاگین می کنیم یه <i>روبات</i> با یاهو! مسنجر لاگین نمی کنه و با یه برنامه ی دیگه که بهش اصطلاحا میگن شبیه سازی شده یاهو! مسنجر (Yahoo! Messenger Clone) لاگین می کنه! کار ما هم برای <b>روبات ساختن</b> دقیقا همینه یعنی باید یه <b>یاهو مسنجر</b> کلون بسازیم.</p>
<h2>یاهو! مسنجر چگونه لاگین می شود؟</h2>
<p>خوب برای اینکه بتونیم یه چیزی عین یاهو! مسنجر بسازیم اول باید ببینیم یاهو! مسنجر وقتی ما دکمه Sign In رو می زنیم چیکارا میکنه&#8230;<br />
فعلا یه توضیح مختصر میدم بعدا سعی میکنم هر تیکشو به طور مفصل توضیح بدم:<br />
یاهو! مسنجر اول میاد به <b>سرور یاهو</b>! پیغام میفرسته که میخوام بهت کانکت (Connect) بشم.<br />
سوال دارین بکنین&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />ببخشید، سرور چیه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; کلا به هر کامپیوتری که هر نوع سرویسی بده میگن سرور! مثلا توی شبکه داخلی (LAN) به اون کامپیوتری که همه کامپیوترا بهش کانکت میشن رو میگن سرور!<br />
اما تو اینترنت وقتی صحبت از سرور میشه منظور یه کامپیوتره که همیشه آنلاینه! (معنی اصلیش اونیه که بالا گفتما! بعدا نگی این سیاوش همه چیو اشتباه میگه) &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" /> این سرور که <b>یاهو! مسنجر</b> یهش وصل میشه ربطی به همون وب سرور (Web Server) اینا داره که روش سایت می ریزن؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه عزیز من! این سرورا اصلابرنامه وب سرور (Web Server) روش نصت نیست. بجاش تمام یوزرنیم (Username) ها و پسورد های آی دی های یاهو روی این کامپیوترا ذخیره هستن&#8230; روی این سرورا یه برنامه نصب هست که کارش اینه که وقتی یاهو! مسنجر بهش خواست وصل شه اول بهش اجازه وصل شدن بده و بعد یه سری از اطلاعات (مثل یوزرنیم و پسوورد) رو چک کنه و اگه درست نبود ارتباط رو قطع کنه.<br />
دز ضمن تقریبا تمام پی ام (PM) هایی هم که میفرستین اول میاد تو این سرورا و بعد به وسیله همین برنامه از سرور به اون شخصی که قرار بوده پی ام بهش برسه فرستاده میشه! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید شما چرا تو جوابتون گفتین سرورا؟ مگه بیشتر از یکین؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آفرین! خوشم میاد تیزی! یک سرور برای این که این همه اطلاعات رو چک کنه و دریافت کنه و بفرسته کمه&#8230; یعنی اصلا نمی کشه. در نتیجه <i>یاهو</i>! اومده این کار رو بین کلی کامپیوتر تقسیم کرده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />پس چرا آخرش گفتین از سرور به اون شخص میفرسته به جای از سرورا؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; یه بار گیر دادی ازت تعریف کردم. حالا دیگه گیر ملا لغتی نده. منظورم اون سرور خاص بود که پیغام رو دریافت کرده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" /> اونوقت یه سوال دیگه! چرا گفتین تقریبا تمام پی ام ها اول میرن تو سرور بعد از اونجا فرستاده میشن؟ چرا نگفتین همشون؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; انگار جو گرفتتا! تو قرار نیست پشت سر هم سوال کنی. آقای <img alt="Question level 1" src="http://www.syavash.com/portal/images/blog/q1.gif" /> قراره اینطوری باشه!<br />
برای این گفتم تقریبا چون بعضی اوقات که یاهو ببینه ترافیک زیاده ارتباط مستقیم (Direct Connection) بر قرار می کنه یعنی پی ام ها دیگه به سرور نمی رن و مستقیم سند (Send) میشن به کسی که قراره بگیردش.<br />
بعضی از برنامه های مسنجر مثل AOL همیشه ارتباط مستقیم بین کاربراشون بر قرار میکنن اینطوری هم سرورا زیاد بارشون سنگین نمیشه هم اگه مثلا اگر لاگ اوت (Logout) کنین خود AOL رو، می تونین به چتتون ادامه بدین چون برای ادامه چت نیازی به سرور نیست. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید، ما میتونیم بفهمیم کی ارتباط غیر مستقیمه کی مستقیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آره! وقتی تو مسنحر داری چت می کنی بالای هر پنجره چت اسم تو و کسی که داری باهاش چت می کنی رو نوشته و یه &#8211; (dash) بینشون گذاشته. اگه به جای یک &#8211; دو تا دش ( &#8212; ) اومد بینشون یعنی ارتباط مستقیم بر قرار شده.<br />
خوب سوال دیگه بسه &#8230; از موضوع اصلی خیلی دور شدیم. داشتیم میگفتیم یاهو! مسنجر اول به یکی از سرور پیغام میفرسته که میخوام کانکت شم. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید &#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بسه دیگه. الان سوال نکن. یه ذره وایسا این تیکرو گفتم دوباره سوال کن. &#8220;</div>
</dd>
</dl>
<p>خلاصه بعد <b>سرور یاهو</b>! قبول میکنه و کانکت میشن&#8230; اینجا باید دقت کنید که منظور از کانکت شدن لاگین شدن نیست. بلکه فقط کانکت شدن که اطلاعات بتونن به هم بفرستن. خوب حالا یاهو! مسنجر یوزرنین (Username) رو میفرسته و سرور بر حسب یوزرنیم و زمان یه اطلاعاتی رو میفرسته که به اون Seed میگن. حالا یاهو! مسنجر با توجه به Seed و یوزرنیم، پسورد رو encrypt میکنه و میفرسته به سرور یاهو!!! این تیکه مشکل ساز ترین قسمت برای ساختن یه یاهو! مسنجر کلون (Clone) هست. چون باید بفهمیم پسورد رو <b>یاهو! مسنجر</b> چطوری با توجه به یوزرنیم و سید، encrypt میکنه. این کار خیلی سخت هست و کار من و شما نیست در نتیجه ما برای این قسمت از یک DLL استفاده می کنیم که عمل encrypt کردن پسورد رو مثل یاهو مسنجر انجام میده (این DLL رو مدیون پروژه گیم (Gaim Project) هستیم! از همینجا از تمام دست اندر کاران این پروژه تشکر میکنم&#8230;)<br />
حالا اگر سوالی دارین بپرسین&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />ببخشید، من نفهمیدم encrypt چیه اصلا.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خوب حق داری. ببین عزیز من معمولا برای امنیت بیشتر پسورد ها و اطلاعاتی که به راحتی نباید درز کنرو رمز میکنن. رمز کردن بطور کلی به دو دسته تقسیم میشه:<br />
دسته اول encrypt یا encode کردن هست. مثل base64 encoding<br />
این دسته همیشه دوطرفه هستن یعنی میشه از رمز شده دوباره به اصلش برگشت.<br />
بعضی encrypt ها هم یک یا چند پارامتر به عنوان key میگیرن. یعنی با توجه به اون اطلاعات encrypt میکنن.<br />
مثلا encrypt کردن کلمه syavash به وسیله الگوریتم Blowfish با کی a1 میشه No0ICOlDP6E= و با کی b2 میشه cu/FsS9kwvg= و مینونیم با داشتن کی (key) دوباره این دو تا رو به syavash برگردوند.<br />
encryption پسورد یاهو! مسنجر هم تقریبا همینطوریه&#8230; یعنی چند تا پارامتر مثل Seed و یوزرنیم رو میگیده و پسورد رو encrypt میکنه!<br />
دسته دوم رو hash بهشون میگن. در این مدل رمز کردن، ممکنه رمز برگشت پذیر نباشه چون تابع یک به یک نیست. برای مثال وقتی syavash رو با الگوریتم md5 هش میکنیم این شکلی میشه : ۰۷fcf2ae7ef576f7d31d845e91001097<br />
حالا از همین رمزی که بالا در اومده امکان نداره بشه به syavash رسید. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />یاهو برای چی اصلا Seed رو میفرسته؟ خوب بر حسب یوزرنیم و پسورد این کارو انجام میداد.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; دلیل اصلی اینه که زمان هم در اون تاثیر داشته باشه. چون اگه اینطوری نباشه یکی راحت میتونه encrypt شده پسورد یکی دیگرو رو به وسیله یه sniffer (بعدا دربارش توضیح میدم) بدست بیاره و بعدا هر وقت خواست با آی دی اون لاگین کنه. اما اگر زمان هم توش اثر داشته باشه فقط در همون لحظه (که دیگه تکرار نخواهد شد) از اون پسورد encrypt شده استفاده می شه کرد. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />DLL چیه دیگه؟ ربطی به download داره؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه&#8230; DLL مخفف <b>D</b>ynamic <b>L</b>ink <b>L</b>ibrary هست و یه سری فرمان های اجرایی توش قرار دارن که میشه ازشون در هر برنامه ای استفاده کرد. فقط باید به این توجه داشته باشیم که DLL ها فقط برای ویندوزن و تو بقیه سیستم عامل ها نمیشه ازشون استفاده کرد.<br />
کار DLL ای که بالا دربارش توضیح دادم اینه که پسورد رو همونطوری که یاهو! مسنجر رمز میکنه، رمز کنه! &#8220;</div>
</dd>
</dl>
<p>آقای <img alt="Question level 4" src="http://www.syavash.com/portal/images/blog/q4.gif" /> انگار سوال داشتی؟</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />اممم&#8230; یادم رفت&#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; باشه پس وقتی یادت اومد بگو. &#8220;</div>
</dd>
</dl>
<p>خوب وقتی ما این اطلاعات رو فرستادیم سرور یاهو! چک میکنه اطلاعاتی که بهش دادیم (همون یوزرنیم و پسورد) درست هستن یا نه. در صورتی که غلط باشن برای یاهو! مسنجر یه پیغام میفرسته که پسورد و یوزرنیم مطابقت ندارن و قطع میکنه ارتباط رو. در صورتی هم که درست باشه یه پیغام میفرسته که لاگین انجام شد و دقیقا در همون لحظست که چراغ آی دی شما تو یاهو! مسنجر دوستاتون روشن میشه و بعدشم لیست دوستان (Friend List) و سایر اطلاعات فرستاده میشه.<br />
خوب! برای این جلسه بسه دیگه&#8230; این دفعه فقط همینطوری فهمیدیم چه اتفاقی میوفته که ما از طریق <b>یاهو مسنجر</b> <b>آنلاین</b> میشیم. جلسه ی دیگه میبینیم دقیقا چه اطلاعاتی فرستاده و دریافت میشن و چطوری میتونیم یه برنامه درست کنیم که دقیقا همون کارارو بکنه.<br />
خوب دیگه سوالی نیست؟</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" /><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" /><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" /><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" /><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />&#8230;</div>
</dt>
</dl>
<p>عجیبه این جلسه خانوم <img alt="Question level 2" src="http://www.syavash.com/portal/images/blog/q2.gif" /> چیزی نگفت&#8230; انشالله از جلسه دیگه حضور فعالانشونو میبینیم.</p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">ساخت روبات یاهو مسنجر &#8211; قسمت اول</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/feed/</wfw:commentRss>
		<slash:comments>136</slash:comments>
		</item>
		<item>
		<title>طراحی شبکه ی دیده بانی کیفیت آب توسط الگوریتم ژنتیک</title>
		<link>http://blog.syavash.com/fa/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%db%8c-%d8%af%db%8c%d8%af%d9%87-%d8%a8%d8%a7%d9%86%db%8c-%da%a9%db%8c%d9%81%db%8c%d8%aa-%d8%a2%d8%a8-%d8%aa%d9%88%d8%b3%d8%b7-%d8%a7%d9%84%da%af/</link>
		<comments>http://blog.syavash.com/fa/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%db%8c-%d8%af%db%8c%d8%af%d9%87-%d8%a8%d8%a7%d9%86%db%8c-%da%a9%db%8c%d9%81%db%8c%d8%aa-%d8%a2%d8%a8-%d8%aa%d9%88%d8%b3%d8%b7-%d8%a7%d9%84%da%af/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 01:02:23 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[genetic algorithm]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[water]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=259</guid>
		<description><![CDATA[<p>در این پست مثالی در ارتباط با الگوریتم ژنتیک را می خواهیم بررسی کنیم. این مثال از مقاله ای با نام طراحی شبکه ی دیده بانی کیفیت آب در رودخانه های بزرگ به کمک ژنتیک الگوریتم انتخاب شده که در سایت ELSEVIER به چاپ رسیده که به اعتبار آن می افزاید. در طراحی شبکه های دیده بانی [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%db%8c-%d8%af%db%8c%d8%af%d9%87-%d8%a8%d8%a7%d9%86%db%8c-%da%a9%db%8c%d9%81%db%8c%d8%aa-%d8%a2%d8%a8-%d8%aa%d9%88%d8%b3%d8%b7-%d8%a7%d9%84%da%af/">طراحی شبکه ی دیده بانی کیفیت آب توسط الگوریتم ژنتیک</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<p>در این پست مثالی در ارتباط با الگوریتم ژنتیک را می خواهیم بررسی کنیم. این مثال از مقاله ای با نام <a href="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/water-quality-monitoring-network-using-genetic-algorithm.pdf"><i>طراحی شبکه ی دیده بانی کیفیت آب در رودخانه های بزرگ به کمک ژنتیک الگوریتم</i></a> انتخاب شده که در سایت ELSEVIER به چاپ رسیده که به اعتبار آن می افزاید.<br />
در طراحی شبکه های دیده بانی کیفیت آب، نقاطی که از آنها آب نمونه برداری می شود از اهمیت بسیار زیادی برخوردارند در نتیجه ایستگاه ها باید با دقت انتخاب شوند که تمام اهداف مورد نظر را برآورد کنند. این ایستگاه ها باید خاصیت های زیر را داشته باشند:</p>
<ul>
<li>نمایانگر حوزه ی آبگیر</li>
<li>نظارت کننده ی منابع آلودگی</li>
<li>نشان دهنده ی نیاز آبی</li>
<li>برآورد کننده ی استاندارد های کیفیت آب</li>
<li>تست تغییرات کیفیت آب</li>
<li>براورد کننده ی بار آلودگی</li>
</ul>
<p>در گذشته طراحی این شبکه ها بر اساس تجربه ی متخصصان بوده. قصد این مقاله استفاده از روش های نوینی مانند الگوریتم ژنتیک برای بهینه سازی این شبکه ها می باشد.</p>
<h2>تشریح محدوده</h2>
<p>در این مقاله محدوده ی رودخانه ی Nakdong بررسی شده که دومین رودخانه ی کره از نظر بزرگی است. شاخه ی اصلی این رودخانه ۵۲۱٫۵ کیلومتر طول دارد.</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/2.jpg" /></div>
<h2>ارتباط GIS و GA</h2>
<p>مراحل کلی فرایند ژنتیک الگوریتم:</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/1.jpg" /></div>
<p>برای این بهینه سازی باید یک سیستم اطلاعات جغرافیایی (<b>G</b>eographic <b>I</b>nformation <b>S</b>ystem) داشته باشیم که در اینجا از ArcView 3.2 به عنوان GIS استفاده شده. همچنین از library به نام GAlib و محیط برنامه نویسی VC++ برای اجرای عملیات الگوریتم ژنتیک استفاده شده.به منظور بهینه سازی هر مدلی توسط الگوریتم ژنتیک ابتدا باید موارد زیر به دقت تعیین شوند:</p>
<ul>
<li>ژن ها چه چیزی را نشان می دهند؟</li>
<li>کرومزوم به چه شکل است و طولش چقدر می باشد؟</li>
<li>تابع fitness چیست؟</li>
</ul>
<p>در این مقاله ابتدا منطقه ی مورد نظر را توسط ابزاری در ArcView جدول بندی کرده و به هر یک از خانه ها یک عدد یکتا داده شده است.</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/3.jpg" /></div>
<p>هر ژن می تواند یکی از آن عدد های یکتا باشد. مجموعه ای از این ژن ها یک کرومزم را تشکیل می دهند. تعداد ژن های هر کرومزم بستگی به تعداد ایستگاه هایی دارد که می خواهیم داشته باشیم. به عنوان مثال در این مقاله می خواهیم ۱۱۰ ایستگاه داشته باشیم، پس تعداد ژن های هر کرومزم ۱۱۰ عدد می باشد.<br />
هر کرومزوم دارای یک fitness می باشد. هر چه این fitness بالاتر باشد نشان دهنده ی نزدیک تر بودن آن به حالت مورد نظر ما می باشد.</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید! شما گفتید که کل نقشه را جدول بندی می کنیم! که شامل رودخانه و خشکی می شود. اما اینطوری که من متوجه شدم ایستگاه ها حتما باید در کنار رودخانه باشند پس به نظر من درست این بود که فقط قسمت هایی که رودخانه در آن قرار دارد را شماره دهی کنیم!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نکته ی خیلی خوبی را اشاره کردید. یکی از راه ها برای حل این مشکل راهی بود که شما به آن اشاره کردید که کمی سخت است. در این مقاله به جای این کار در قسمت fitness دهی به خانه هایی که رودخانه در آنها نیست ضریب صفر داده می شود و در نتیجه به خاطر سلامتی صفر خود به خود حذف خواهند شد! &#8220;</div>
</dd>
</dl>
<p>پس هر کرومزوم نشان دهنده ی مکان تمامی ایستگاه ها و هر ژن نشان دهنده ی مکان یک ایستگاه می باشد! حال باید تابع fitness را تعریف کنیم.در بالا گفته شد هر ایستگاه باید دارای ۶ خاصیت باشد. تابع سلامت باید هر شش خاصیت را بپوشاند. در این مقاله ۶ خاصیت در ۴ تابع گنجانده شده و تابع سلامت هر ژن به صورت مجموع این چهار تابع با یک وزن مشخص تعیین گردیده:</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/4.jpg" /></div>
<p>و در نهایت سلامت هر کرومزوم از مجموع سلامت تمامی ژن ها بدست می آید. چهار تابع سلامت به صورت زیر تعریف شده است:</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/5.jpg" /></div>
<div></div>
<p>در الگوریتم ژنتیک همیشه یک سری کرومزم به عنوان جمعیت اولیه داریم که پس از محاسبه ی سلامت هر یک از آنها عملیات ترکیب و جهش روی آنها انجام شده و جمعیت جدید بوجود می آید.<br />
همانطور که می دانیم کرومزومی که سلامت بیشتری دارد امکان ترکیب و بقایش بیشتر می باشد.<br />
ترکیب بصورت تعویض چند ژن در دو کرومزم و جهش با تغییر تصادفی یک ژن صورت می گیرد. در هر نسل تعدادی جمعیت در فرایند ترکیب بوجود آمده و ما بقی مانند جمعیت اولیه تولید می شوند.<br />
اینجا سوال پیش می آید که تعداد جمعیت اولیه و درصد ترکیب و جهش در هر دوره چه مقدار باشد تا بهترین نتیجه حاصل شود!<br />
معمولا بهترین حالت برای این موارد با آزمایش و خطا بدست می آید. تجربه نشان داده که بهترین حالت معمولا با درصد ترکیب بالا و درصد جهش پایین بدست می آید.<br />
در این مقاله چهار حالت زیر امتحان شده و پس از گذشت ۴۰۰۰ نسل بهترین نتیجه در مورد دوم با جمعیت اولیه ی ۳۰۰ و در صد ترکیب و جهش به ترتیب ۸۰% و ۱% مشاهده شده.</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/6.jpg" /></div>
<div></div>
<p>در زیر نمودار سلامت کرومزم های هر چهار حالت را مشاهده می کنید:</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/7.jpg" /></div>
<div></div>
<p>در زیر نتیجه ی نهایی این مقاله (در سمت راست) و حالت فعلی قرار گیری ایستگاه ها (در سمت چپ) را می توانید ببینید:</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/8.jpg" /></div>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/9.jpg" /></div>
<div></div>
<p>در این ۱۱۰ ایستگاه محل ۳۵ ایستگاه بین حالت بدست آمده و حالت موجود یکی می باشد و بقیه ی آنها با هم متفاوت می باشد که به این معنا است که برای بهبود سودمندی شبکه باید در بقیه ی آنها تغییر مکان ایجاد شود.<br />
در نهایت نتیجه ی این مقاله در صورتی که تعداد ایستگاه ها ۱۳۰، ۱۵۰، ۱۷۰، ۱۹۰ و ۲۱۰ عدد می بود ارائه شده که به شکل زیر می باشد:</p>
<div><img alt="" src="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/10.jpg" /></div>
<h2>لینک های داخلی</h2>
<ul>
<li><a href="http://www.syavash.com/portal/files/siavash/blogs/design-of-a-water-quality-monitoring-network-using-genetic-algorithm/water-quality-monitoring-network-using-genetic-algorithm.pdf">Design of a water quality monitoring network in a largeriver system using the genetic algorithm</a></li>
<li><a href="http://www.syavash.com/portal/users/siavash/blogs/farsi-what-is-artificial-intelligence-fa">مقدمه ای بر هوش مصنوعی</a></li>
</ul>
<h2>لینک های خارجی</h2>
<ul>
<li><a href="http://www.elsevier.com/">سایت رسمی الزویر</a></li>
<li><a href="http://sciencedirect.com/">سایت رسمی ساینس دایرکت</a></li>
<li><a href="http://artificial.ir/intelligence/">انجمن هوش مصنوعی ایران</a></li>
</ul>
<p>نوشته <a href="http://blog.syavash.com/fa/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%db%8c-%d8%af%db%8c%d8%af%d9%87-%d8%a8%d8%a7%d9%86%db%8c-%da%a9%db%8c%d9%81%db%8c%d8%aa-%d8%a2%d8%a8-%d8%aa%d9%88%d8%b3%d8%b7-%d8%a7%d9%84%da%af/">طراحی شبکه ی دیده بانی کیفیت آب توسط الگوریتم ژنتیک</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d8%b7%d8%b1%d8%a7%d8%ad%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%db%8c-%d8%af%db%8c%d8%af%d9%87-%d8%a8%d8%a7%d9%86%db%8c-%da%a9%db%8c%d9%81%db%8c%d8%aa-%d8%a2%d8%a8-%d8%aa%d9%88%d8%b3%d8%b7-%d8%a7%d9%84%da%af/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
