بایگانی برچسب: s

مقدمه ای بر PHP – قسمت دوم

توی این قسمت میخوایم یکی از ساده ترین مفاهیم اکثر زبان های برنامه نویسی رو درک کنیم.
مفهوم اگر یا if رو تقریبا شما هر روز بار ها توی حرف زدنتون استفاده می کنید! این مفهوم تو اکثر زبان های برنامه نویسی هم وجود داره که در ادامه با مثال می بینیم که توی php چطوری میشه بکارش برد.

عبارت های if، else و elseif

اول با یه مثال ساده شروع می کنیم. یه نفر از شما می پرسه “آیا ۵ بزرگ تر از ۶ است؟” شما پیش خودتون میگید اگر با منطق من ۵ بزرگتر از ۶ هست بگو آره در غیر این صورت بگو خیر، و در نهایت می گی خیر چون ۵ بزرگتر از ۶ نیست. حالا همین مثال رو توی php مینویسیم:

<?php
    //Is 5 greater than 6?
    if (5 > 6)
    {
        echo "Yes!";
    }
    else
    {
        echo "No!";
    }
?>

if در واقع همون اگر تو زبان فارسی هست و همیشه جلوش داخل پرانتز یه گزاره قرار می گیره! گزاره یعنی یک عبارت که یا درست باشه (true) یا غلط (false). در صورتی که درست باشه کمپایلر php عبارت های بعد از if رو که بین { و } هستند رو اجرا می کنه در غیر این صورت عبارت های بعد از else رو که توی } و { هستند رو اجرا می کنه. مثلا توی این مثال ما همه می دونیم که ۵ > 6 نیست پس نتیجه ی این گزاره false هست و در نتیجه عبارات بعد از else اجرا می شن. یعنی توی صفحه می نویسه No! که جوابی هست که ما انتظار داشتیم.
حالا اگر به جای ۵ > 6 گزاره ی ۶ > 5 رو داشتیم، جواب گزاره true می شد و در نتیجه نتیجه ی Yes! رو می گرفتیم.
اصلا نگران نباشید اگر هنوز درست متوجه نشدین. با مثال های بیشتر این موضوع کاملا جا میفته.

<?php
$age = 100;
if ($age > 80)
{
    echo "You are old!";
}
?>

توی این مثال ما اول مقدار ۱۰۰ رو توی $age ریختیم . توی خط سوم می به دستور if میرسیم. که میگه اگر $age > 80 یه گزاره ی صحیح بود عبارت You are old! رو به عنوان خروجی بده. همونطوری که می بینیم $age بزرگ تر از ۸۰ هست پس روی خروجی You are old! رو خواهیم دید.

Question level 3 ببخشید چرا اینجا عبارت else رو نداریم؟
Answer ” عبارت else یه عبارت Optional یا اختیاریه و ما می تونیم if بدون else داشته باشیم. “
Question level 3 خوب حالا اگر مقدار $age کمتر از ۸۰ میشد چه اتفاقی میفتاد؟
Answer ” اگر مقدار $age مثلا ۵۰ بود وقتی کمپایلر به خط سوم می رسید می دید گزاره غلط هست و در نتیجه عبارات بین { و } بعد از if رو اجرا نمی کرد و خروجی ما خالی می شد. “

حالا یه مثال دیگه:

<?php
    $grade = 18;
    if ($grade >= 19)
    {
        echo "A";
    }
    elseif ($grade >= 17)
    {
        echo "B";
    }
    elseif ($grade >= 14)
    {
        echo "C";
    }
    else
    {
        echo "D";
    }
    //Output: B
?>

توی این مثال چند تا نکته ی جدید داریم. یکی علامت >= هست که به مفهوم بزرگتر مساویه، همونطوری که حدس زدید <= هم به مفهوم کوچکتر مساویه. و بعدی elseif هست که الان خط به خط جلو می ریم و می بینیم چیه!
خوب کمپالر توی خط دوم مقدار ۱۸ رو توی $grade قرار میده و خط سوم به if میرسه و می بینه که ۱۸ بزرگتر مساوی ۱۹ نیست پس گزاره غلطه و دستور echo “A” اجرا نمیشه. بعد از اون به اولین elseif میرسه. دستور elseif به معنی در غیر این صورت اگر هست. کمپایلر می بینه که $grade بزرگتر از ۱۷ هست پس این شرط درسته و در نتیجه دستورات داخل { و } جلوی این elseif رو اجرا می کنه و دیگه elseif ها و else بعدی رو چک نمی کنه! پس در نتیجه خروجی ما “B” خواهد بود.
این از خاصیت های ساختار if، elseif و else هست. یعنی هر جا شرطی درست بود دیگه شرط های دیگرو چک نمی کنه. که اسمش هم همین رو نشون میده. ما می گیم اگر این گزاره درست بود فلان کار رو بکن، در غیر این صورتاگر این یکی درست بود یکار دیگه بکن و در نهایت هم اگر هیچ کدوم درست نبودن عملیات بین { و } بعد از else رو انجام بده.
حالا می ریم سراغ مثال بعد:

<?php
    $grade = 20;
    if ($grade = = 20)
        echo "Full mark";
    else
        echo "Keep trying";
?>

توی این مثال هم دو تا نکته ی جدید داریم.
همونطور که می بینید توی خط سوم ما از گزاره ی $grade = = 20 استفاده کردیم. حالا این = = یعنی چی؟ توی زبان php و خیلی زبان های دیگه برای اینکه چک کنیم دو تا مقدار با هم مساوی هستند یا نه از = = استفاده می کنیم. پس باید حواستون باشه که از = برای چک کردن اینکه دو مقدار با هم مساوی هستند یا نه استفاده نکنید چون اگر این کار رو بکنید php به شما هیچ errorای هم نمی ده اما شما نتیجه ی مورد انتظارتون رو دریافت نخواهید کرد. مثلا توی همین مثال اگر بجای = =، علامت = رو قرار بدیم همیشه خروجی Full mark رو خواهیم گرفت.

Question level 4 ببخشید میشه بیشتر توضیح بدید که چرا؟
Answer ” اول باید یه نکترو بگم! اکثر زبان های برنامه نویسی ۰ رو به عنوان false یا غلط در نظر می گیرن و هر عدد دیگه بجز اون رو به عنوان true یا درست! php هم جزو همون زبان هاست.حالا اگر به جای = = از = استفاده کنیم کمپایلر به خط سوم که میرسه مقدار ۲۰ رو توی متغیر $grade میریزه بجای اینکه اون دو تارو مقایسه کنه و در نهایت می بینه مقدار $grade عددی بجز صفر هست پس این گزاررو درست در نظر می گیره و Full mark رو اکو می کنه. اگر مقدار $grade بجای ۲۰، ۱۷ یا ۱۸ یا هر عدد دیگه ای هم می بود باز به ما Full mark رو می داد که نتیجه ی مطلوب ما نبود. پس حواستون باشه توی if برای مقایسه باید از = = استفاده کنیم و = برای اینکار غلطه. “

نکته ی دیگری که احتمالا تا الان دیدید اینه که ما تو این مثال از { و } نه بعد از if استفاده کردیم و نه بعد از else. دلیلش اینه که بعد از دستور if و esle فقط یه دستور دیگه وجود داره. در صورتی که بعد از if یا elseif یا else فقط یه دستور وجود داشته باشه می تونیم { و } رو نگذاریم. پس برای تمام مثال های قبل هم می تونستیم { و } رو نگذاریم. اما اگر دو خط دستور یا بیشتر داشته باشیم حتما باید از { و } استفاده کنیم.

<?php
    $name = "Siavash"
    if ($name = = "Siavash")
        echo "Hello Siavash";
    else
    {
        echo "I don't know you!";
        die("bYe");
    }
 
echo "How are you?";
// The rest of the program goes here...
?>

همونطوری که توی این مثال می بینید ما بعد از if از { و } استفاده نکردیم. چون فقط یه خط بعد از if بود اما بعد از else چون دو خط دستور داشتیم باید حتما از { و } استفاده می کردیم.
چیزی که شاید ذهنتون رو مشغول کرده باشه خط هشتم هست. که از دستور die() استفاده کردیم. این دستور هر جا که بیاد ادامه ی برنامرو متوقف می کنه. یعنی کمپایلر به این دستور که میرسه دیگه ادامه ی خط ها رو اجرا نمی کنه علاوه بر اون یه رشته هم جلوی خودش داخل پرانتز می گیره و قبل از اتمام برنامه اون رو چاپ می کنه. مثلا توی این مثال اگر مقدار $name به جای “Siavash” هر چیز دیگه ای بود کمپایلر چون می دید گزاره ی خط سوم درست نیست داخل else رو اجرا می کرد یعنی اول “I don’t know you!” رو اکو می کرد و بعدش می نوشت “bYe” و برنامه تموم می شد. یعنی خط ۱۰ مثلا اجرا نمی شد.
اما اگر مثال به همین شکل بالا باشه یعنی مقدار $name همون “Siavash” باشه خط ۴ اجرا می شه و در نتیجه “Hello Siavash” اکو میشه و بعد از اون هم خط ۱۰ اجرا میشه و “How are you?” هم اکو میشه!
پس دستور die() هر جایی اجرا شه کمپایلر کارش رو متوقف می کنه!
دستور if توی چند زبان دیگه بصورت زیره:
PHP

<?php
    $grade = 20;
    if ($grade = = 20)
        echo "Great!";
    elseif ($grade > 15)
        echo "Good!";
    else
    {
        echo "Bad!<br />";
        echo "Study more!";
    }
?>

C++

#include <iostream.h>
void main()
{
    int grade;
    grade = 20;
    if ($grade = = 20)
        cout << "Great!";
    else if ($grade > 15)
        cout << "Good!";
    else
    {
        cout << "Bad!n";
        cout << "Study more!";
    }
}

Pascal

var
    grade : integer;
begin
    grade := 20;
    if grade = 20 then
        writeln('Great!')
    else if grade > 15 then
        writeln('Good!')
    else begin
        writeln('Bad!');
        writeln('Study more!');
    end;
end.

Visual Basic

Dim grade As Integer
Private Sub Form_Load()
    grade = 100
    If grade = 100 Then
        MsgBox "Great"
    ElseIf grade > 15 Then
        MsgBox "Good"
    Else
        MsgBox "Bad"
        MsgBox "Study more!"
    End If
End Sub

Java

public class test {
    public static void main(String args[]) {
        int grade;
        grade = 20;
        if (grade = = 20)
            System.out.println("Great!");
        else if (grade > 15)
            System.out.println("Good!");
        else
        {
            System.out.println("Bad");
            System.out.println("Study more!");
        }  
    }
}

لینک های داخلی

http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-1-fa

 

مقدمه ای بر PHP – قسمت اول

تا حالا براتون سوال پیش اومده این همه سایت های رنگارنگ با این همه قابلیت های متفاوت چطوری درست می شن؟
خیلی از شماها جواب میدید آره با html که جواب کاملا درستیه! حتی خیلی از شما با html وبسایت شخصی خودتون رو ساختید ولی هر چی سعی کردید نتونستید برای سایتتون یه Search یا صفحه ی Login بسازید.
خوب این آموزش مربوط به افرادیه که html رو تا حدودی بلد هستند و البته php بلد نیستند.
اول از همه باید ببینیم این php اصلا چی هست؟
php یه زبان برنامه نویسی server-side هست که قابلیت ساختن صفحات پویا رو داره.

Question level 2 server-side یعنه چی؟
Answer ” سوال خوبیه! ببین مثلا html رو در نظر بگیر، وقتی یه صفحه ی html رو باز می کنی browser کد html رو می خونه و تبدیلش می کنه به اون چیزی که تو توی صفحه ی browser می بینی! پس html یه زبان client-side هست چون کل کد رو browser تبدیل به صفحه ی نهایی کرد.
اما توی php یه مقدار فرق می کنه. این تیکرو با مثال توضیح میدم. سایت سیاوش . کام با php نوشته شده، خوب حالا شما وقتی وارد www.syavash.com می شید چه اتفاقاتی میفته؟ اول مرورگر (browser) شما یه درخواست میفرسته که من فایل index.php رو می خوام! تا اینجا شبیه وقتیه که یه سایت ساخته شده با html رو باز می کنید، اما از اینجا به بعدش فرق داره. بعد سروری که www.syavash.com روش هست می بینه این فایلی که درخواست شده یه فایل php هست پس اول اون رو میفرسته برای کمپایلر php و کمپایلر php اون رو طبق کد توش اجرا میکنه و در نهایت یه صفحه ی html می سازه و اون صفحرو برای کاربر میفرسته و مرور گر شما صفحه ی html ساخته شدرو نشونتون میده! “
Question level 1 گفتید اگه صفحه html بود فرق میکرد. اون موقع چجوری می شد؟
Answer ” اگر صفحه html بود بعد از اینکه مرورگر شما اون صفحرو درخواست میکرد سرور بلا فاصله کد اون صفحرو برای مرورگر میفرستاد و اون صفحرو شما می دیدید! “
Question level 3 پس یعنی اگه من بخوام کد php سایت syavash.com رو ببینم نمی تونم چون اصلا اون فایل برای مرورگر من فرستاده نمیشه، درسته؟
Answer ” آفرین! کاملا درسته!!! یکی از خوبی های زبان های server-side اینه که کد اصلی اون صفحرو نمی تونه کسی ببینه! “
Question level 2 اما من تو صفحه ی syavash.com وقتی راست کلیک می کنم و View page source رو میزنم بهم کد اون صفحرو نشون میده که!
Answer ” همونطوری که گفتم اون کد، کد php نیست و کد تولید شده ی htmlای هست که توسط سرور از اون فایل php تولید شده! “
Question level 3 خوب حالا که server-side رو گفتید چیه، میشه صفحات پویا رو هم بگید؟
Answer ” ببینید وقتی شما یه صفحه ی html می سازید هر دفعه که اون رو باز کنید عین دفعه ی قبله و هیچی توش تغییر نمیکنه! اما مثلا وقتی میرید توی صفحه ی bbc هر دقیقه صفحه ی اول تغییر می کنه! یا مثلا بعضی سایت ها رو وقتی توش لاگین می کنید با وقتی توش لاگین نیستید فرق می کنن، یا مثلا وقتی توی یه سایت سرچ می کنید نسبت به هر سرچ یه صفحه ی مجزا برای شما میاره! خوب این کار هارو با html نمیشه انجام داد. یه خوبی اساسی زبان های server-side اینه که می تونن به بانک اطلاعاتی وصل شن که بعدا بیشتر دربارش حرف می زنیم. “
Question level 2 ببخشی حالا اگر بخوایم به جای صفحات پویا صفحات حسین بسازیم باید چیکار کنیم؟
Answer ” … “

بجز php خیلی زبان های server-side دیگه ای هم وجود داره مثل JSP، ColdFusion، Ruby on Rails یا ASP اما ما توی این آموزش فقط به php میپردازیم! شاید براتون جالب باشه که بیش از ۴۰% از ۵۰۰۰ سایت برتر توی اینترنت از php استفاده می کنن!
تا یادم نرفته این رو هم بگم که PHP در ابتدا مخفف عبارت Personal Homepage بوده اما بعد از ورژن ۳ از اون به عنوان مخفف برگشتی PHP: Hypertext Preprocessor یاد شده!

Question level 1 مخفف برگشتی دیگه یعنی چی؟
Answer ” مخفف برگشتی یعنی خود مخفف توی عبارتی که مخففش هست بیاد! “

نصب php

خوب حالا که این همه گفتیم php اول روی سرور باید اجرا بشه و از این جور چیزا خوب پس اگه سرور نداشته باشیم باید چیکار کنیم؟ یا اگه بخوایم طراحی وبسایتمون رو توی کامپیوتر خودمون انجام بدیم؟
برای اینکه بتونیم روی کامپیوتر خودمون صفحات php رو باز کنیم باید چند تا برنامرو روی کامپیوترون داشته باشیم:

  • Apache webserver
  • PHP
  • mySql

اول از همه باید یه وب سرور داشته باشیم که هر چیزی می تونه باشه اما بهترینش برای php آپاچی هست!
mySql رو حتما برای اجرای php نباید داشته باشیم اما اگر بخوایم به بانک اطلاعاتی وصل شیم باید حتما نصبش کنیم. البته به جای mySql از سیستم های بانک اطلاعاتی دیگه هم میشه استفاده کرد اما بازم سازگار ترینش با php همین mySql هست.
برای اینکه این هارو نصب کنیم یه راهش اینه که جدا جدا پکیج هارو از اینترنت بگیریم و اونا رو طبق دستورالعمل نصب کنیم. اما راه آسونتر که من برای ابتدا پیشنهاد می کنم اینه که برید و پکیج phpdev رو که شامل هر سه پکیج بالا و چند پکیج دیگه هست رو دانلود و نصب کنید.
یادتون باشه که این پکیج رو باید حتما توی C:\phpdev نصبش کنید.
برای دوستانی که از لینوکس استفاده می کنن باید بگم که تو اکثر ورژن های لینوکس آپاچی و php بصورت پیش فرض نصب هستن و اگر هم نباشن از Application Manager میتونید اونو نصب کنید یا می تونید توی شل بویسید:

yum install php4

من از اینجا به بعد فرض رو بر این می گیرم که شما phpdev رو نصب کردید. خوب حالا توی مرورگری که استفاده می کنید (که انشاالله FireFox هست) آدرس http://localhost/ رو وارد کنید!
اگر دیدید بالا نمیاد این صفحه از My Computer برید توی C:\phpdev\ و اونجا فایل ۲K-NT-XP-phpdev_start.bat رو در صورتی که ونیدوزتون XP یا Vista هست یا فایل ۹۸-ME-phpdev_start.bat رو در صورتی که ویندوزتون ۹۸ یا ME هست اجرا کنید! یه سری صفحه باز و بسته میشن و در نهایت احتمالا یه صفحه با تیتر Apache باز می مونه که اون رو نباید ببندید! هر دفعه که دیدید صفحه ی http://localhost/ باز نمیشه کافیه همین کار رو تکرار کنید!
خوب پس الآن باید صفحه ی http://localhost جلوتون باشه که لیست یه مشت فولدر و فایل رو نشون میده. حالا این فایل ها و فولدر هایی که اینجا لیستش هست توی کدوم فولدر قرار دارن؟
کافیه از My Computer به آدرس c:\phpdev\www\ برید. می بینید که اون لیستی که توی http://localhost/ می بینید کاملا با فایل ها و فولدر های توی این آدرس مطابقن.
حالا می خوایم اولین صفحه ی php رو طراحی کنیم. برای اینکار می تونید از هر ویرایشگری که دوست دارید استفاده کنید. برای شروع از notepad استفاده می کنیم. برای اینکار کافیه توی c:\phpdev\www\ یه فایل با پسوند php بسازید. مثلا Hello.php .

Question level 1 ببخشید میشه توضیح بدید چطوری این فایل رو بسازم؟
Answer ” البته! راه برای این کار زیاده اما آسونترین راهی که به ذهنم می رسه اینه که اول notepad رو باز کنی (توی استارت برو Run و اونجا تایپ کن notepad و انتر رو بزن) بعد File رو انتخاب کن و بعد Save as بعد برو توی آدرس c:\phpdev\www\ و Save as type رو All Files انتخاب کن. بعد جلوی File Name بنویس Hello.php و Save رو بزن!
به همین سادگی یه فایل خالی با پسوند php ساختی. فقط حواست باشه که Save as type رو All Files انتخاب کنی وگرنه یه اسم فایلت میشه Hello.php.txt که چیزی که ما می خوایم نیست. “

حالا اگر توی مرورگرت صفحه ی http://localhost/ رو refresh کنی باید فایل جدیدی که ساختی رو اونجا هم ببینی. اگر روی اون کلیک کنی یه صفحه ی خالی می بینی چون هنوز کدی برای اون فایل ننوشتی خوب!

ساخت اولین برنامه ی php

الان می خوایم اولین کد phpمون رو بنویسیم! برای اینکار اگر notepad رو بستین دوباره برید c:\phpdev\www\ و روی فایل Hello.php کلیک راست کنید و Open With رو بزنید و توی Choose Program… برنامه ی Notepad رو انتخاب کنید. می تونید تیک Always use the selected program to open this kind of file رو بزنید تا از دفعه ی دیگه با دابل کلیک کردن روی فایل های php ویندوز اونارو بصورت اتومات تو Notepad باز کنه. بعد از اینکه فایل Hello.php رو توی Notepad باز کردید توش کد زیر رو بنویسید و اون رو Save کنید:

<?php
echo "Salaaaaam!";
?>

حالا اگر توی مرورگرتون صفحه ی http://localhost/Hello.php رو refresh کنید میبینید که توی صفحه نوشته Salaaaaaam!.
خوب بهتون تبریک می گم شما همین الان اولین کد phpتون رو با موفقیت نوشتید!
از اینجا به بعد من همیشه اول کد php رو بصورت کامل می نویسم و بعد خط به خط اون رو توضیح میدم. فکر کنم اینطوری بهتر باشه.
و اما توضیح این سه خط:
ما هر کد php رو با <?php یا <? شروع می کنیم و با ?> تمومش می کنیم. با این کار به کمپایلر php میگیم که این قسمت ها php هستن و باید کمپایل بشن. هر چیزی توی فایل php خارج از این ها باشه به عنوان html محسوب میشه یعنی به وسیله ی کمپایلر کمپایل نمیشه.
خط دوم دستور echo هست. فکر کنم الان همتون می دونید چیکار میکنه. این دستور نقش خروجی php رو داره. یعنی هر چی جلوی echo قرار بدید بعد از کمپایل شدن توی فایل خروجی قرار می گیره (اون فایل htmlی که درست میشه).
حالا چرا بین دو تا ” قرار داره؟ توی php مثل خیلی زبان های برنامه نویسی دیگه رشته ها یا String (همون متن یا مجموعه ای از کاراکتر ها) رو بین دو تا ” قرار میدیم! بعدا در این رابطه بیشتر حرف می زنیم.
حالا یه مثال دیگه:

<?php
echo "Salam <b>Siavash</b><br /><i>Chetori?</i>";
?>

به نظر شما این کد چیکار می کنه?
بله درسته! این کد دقیقا چیزی که جلوی echo هست رو توی مرورگر نشون میده. یعنی:

Salam Siavash
Chetori?

متغیر یعنی چه؟

همونطوری که می دونید توی هر زبان برنامه نویسی ما به متغیر داریم. متغیر یعنی چی؟
متغیر در واقع مثل یه جعبه می مونه که یه اسم داره و هر چیزی بخوای رو می تونی توی اون قرار بدی و هر وقتم خواستی می تونی ببینی توی اون جعبه چی گذاشتی و ازش استفاده کنی.

متغیر از جنس رشته

خوب حالا یه مثال برای متغیر ها:

<?php
$name = "Siavash";
echo $name;
?>

توی این مثال طریقه ی پر کردن و صدا زدن یه متغیر نشون داده شده. خوب حالا خط به خط توضیح میدم:
خط اول و آخر رو که تو مثال های قبل فهمیدیم چیه. توی خط دوم ما اومدیم و رشته ی Siavash رو توی متغیری به نام name ریختیم. با این کار کامپیوتر یه فضایی رو توی رم به این متغیر اختصاص میده و مقداری که داخل متغیر ریختیم رو داخل اون فضا ذخیره می کنه و مشخص می کنه اسم name مربوط به این فضاست. از این به بعد هر وقت متغیر name رو صدا بزنیم کامپیوتر میره و مقداری که توی اون فضا برای این اسم ذخیره شدرو بجای متغیر قرار میده.
یه نکته ای رو باید توجه داشته باشیم و اونم اینه که متغیر ها توی php همیشه با $ شروع میشن! مثلا اینجا ما $name استفاده کردیم. می تونست بجای $name هر چیز دیگه هم باشه اما بهتره اسم رو مربوط به مقداری که توش می ریزیم انتخاب کنیم.
نام متغیر حتما باید با حرف یا _ شروع بشه در ادامه می تونه شامل حروف، اعداد و _ باشه. و اینم باید مد نظر داشته باشیم که اسم متغیر توی php نسبت به بزرگ و کوچک بودن حروف حساسه! یعنی $Name و $name دو تا متغیر مختلف هستند. پس حواستون باشه.
خوب میریم سراغ خط سوم. توی خط سوم از دستور echo استفاده کردیم پس هر چی جلوی اونه باید به عنوان خروجی چاپ شه. حالا چی جلوشه؟ متغیر $name! پس کامپیوتر میره به قسمتی از حافظه که مقدار متغیر $name توشه سر میزنه و می بینیه Siavash اونجا ذخیره شده! پس Siavash رو چاپ می کنه.

Question level 1 ببخشید مگه Siavash یه رشته نیست، پس چرا دور $name دو تا ” نگذاشتیم؟
Answer ” البته اگر میگذاشتیم توی php کار می کرد. اما در کل $name یه متغیره و خودش یه رشته نیست و برای صدا زدن متغیر نیاز به ” نداریم اما اگه دقت کنید موقعی که Siavash رو توی $name ریختیم دور اون ” گذاشتیم چون Siavash یه رشته بوده. “

خوب حالا یه مثال ساده ی دیگه!

<?php
$firstname = "Siavash";
$surname = "Mahmoudian";
echo $firstname . $surname;
?>

توی این مثال اول دو متغیر $firstname و $surname رو مقدار دهی کردیم بعد توی خط چهارم از یه چیز جدید استفاده کردیم! نقطه. کار نقطه چسبوندن دو تا رشته به هم هست! مثلا توی این مثال مقدار داخل دو متغیر $firstname و $surname رو که هر دوشون رشته هستند به هم می چسبونه و در نهایت SiavashMahmoudian رو به عنوان خروجی چاپ می کنه! اما ما می خواستیم بین اسم و فامیل فاصله بیفته! باید چیکار کنیم؟

<?php
$firstname = "Siavash";
$surname = "Mahmoudian";
echo $firstname . " " . $surname;
?>

کافیه رشته ی فاصلرو بین اسم و فامیل اضافه کنیم! شاید زیاد معنی دار به نظرتون نیاد در ابتدا اما ما کار خاصی نکردیم. فقط این دفعه سه تا رشترو به هم چسبوندیم که دومیش فقط یه space توشه. مثلا می تونست $firstname . ” Salam ” . $surname باشه. که اونطوری خروجی می شد Siavash Salam Mahmoudian! حالا ما سلامش رو حذف کردیم و فقط space مونده!
تقریبا توی تمام زبان های برنامه نویسی متغیر ها وجود دارن و اتفاقا توی خیلیاشون شبیه php تعریف می شن، تنها فرقش اینه که جنس متغیر رو توی php خودش تشخیص میده و نیازی نیست بگیم یه متغیر جنسش عدد هست یا رشته یا یه کاراکتر!

متغیر از جنس عدد

مثال برای تعریف یه متغیر عدد توی php:

<?php
$age = 19;
echo $age;
// Output: 19
?>

اینجا ما یه متغیر از جنس integer یا عدد تعریف کردیم. و بعد هم با دستور echo اون رو چاپ کردیم! اینجا دو تا نکته ی جدید وجود داره:
یکی اینکه ما دور عدد ۱۹ علامت ” نگذاشتیم که دلیلش اینه که ما نمی خواستیم رشته ی ۱۹ رو توی age قرار بدیم بلکه می خواستیم ۱۹ رو به عنوان یک عدد داخل $age بریزیم. اگر به جای ۱۹ از “۱۹″ استفاده می کردیم ۱۹ رو به عنوان رشته توی $age ریخته بودیم. فرقش چی بود؟ عملیات جمع و تفریق و کلا عملیات ریاضی روی رشته ها تعریف شده نیست و فقط روی اعداد می شه از اون ها استفاده کرد! البته توی php هر جا نیاز باشه و بتونه عدد رو به رشته و یا رشته رو به عدد تبدیل می کنه اما بهتره این نکات رو رعایت کنیم که بعد خواستیم زبان های دیگرو یاد بگیریم گیج نشیم.
نکته ی جدید دیگه خط ۴ هست که اول خط // گذاشتیم و بعد یه متن نوشتیم. توی php هر چیزی بعد از // نوشته بشه Comment محسوب میشه یعنی کمپایلر php اون خط ها رو اصلا نمی بینه و در ابتدای کمپایل حذفشون می کنه! حالا فایدش چیه؟ بعضی اوقات ممکنه یه نکته ای درباره ی کدتون بعد از یه خط اضافه کنید که بعدا خودتون خواستید ادامه ی اون خط رو بنویسید یا کس دیگری خواست اون رو بخونه گیج نشه! یا شاید بخواین یه متنی رو برای خودتون اضافه کنید. این خط ها رو همیشه قبلشون // میگذارن. همونطور که می بینید ما هم توی خط چهارم یه کامنت گذاشتیم و خاطر نشان کردیم که خروجی این خط ۱۹ میشه.
اکثر زبان های برنامه نویسی شبیه هم هستن و اگه شما یه زبان برنامه نویسی رو کامل یاد بگیرید بقیه ی زبان هارو خیلی راحت با دیدن چند تا مثال می تونید یاد بگیرید. مثلا همین مثال پر کردن یه متغیر از یک عدد توی زبان های مختلف به شکل زیر میشه:
PHP

<?php
$age = 100;
?>

C++

void main()
{
int age;
age = 100;
}

Pascal

var
age : integer;
begin
age := 100;
end.

Visual Basic

Dim age as Integer
Private Sub Form_Load()
age = 100
End Sub

Java

public class example {
    public static void main(String args[]) {
        int age;
        age = 100;
    }
}

همونطور که می بینید تقریبا شبیه هم هستن، فقط توی php نیازی به تعریف اولیه ی متغیر نیست اما توی مثال های دیگه اول جنس متغیر که int یا integer هست رو تعریف کردیم و مقدار ۱۰۰ رو داخلش قرار دادیم. پس از این نظر php آسونتر از بقیه ی زبان هاست چون جنس رو خودش تشخیص میده!

عملگر ها

حالا چند تا مثال دیگه درباره ی متغیر های عدد توی php می زنیم:

<?php
$i = 1;
$j = 2;
$k = $i + $j;
//$k: 3
$k = $k + $i;
//$k: 4
$k += $i;
//$k: 5
?>

توی این مثال ما اول به دو متغیر $i و $j مقدار های ۱ و ۲ رو دادیم. تا اینجاش که عین قبل بوده. بعد توی خط ۴ به متغیر $k مقدار $i + $j رو دادیم. یعنی کامپیوتر میره و میبینه توی رم به $i و $j چه مقداری داده شده بود و بعد جمع اون دو تارو توی $k میریزه که میشه ۳٫ خط بعد برای خودمون کامنت گذاشتیم که تا اینجا مقدار $k، ۳ شده. خط ۶ هم دقیقا مثل خط ۴ هست با این تفاوت که خود $k هم سمت چپ هست هم راست. افرادی که تازه برنامه نویسی رو شروع می کنن یکم اینجا گیج میشن اما گیج شدن نداره. کافیه از سمت راست شروع کنید و مقادیر رو قرار بدین و نتیجش رو سمت چپ بریزید. مثلا اینجا اول مقدار $k رو می بینیم که ۳ هست و بعد مقدار $i که ۱ هست و جمع این دو تا رو توی $k که سمت چپه می ریزیم پس $k مقدار ۴ رو می گیره. توی خط ۸ ما از اپراتور += استفاده کردیم. += یعنی مقدار سمت راست رو به مقدار سمت چپ اصافه کن. یعنی توی این مثال خط ۶ و ۸ یک کار رو انجام میدن و مقدار $i رو به $k اضافه می کنن!
بجز عملگر + توی php می تونیم از -، *، /، ^ هم استفاده کنیم که به ترتیب تفریق، ضرب، تقسیم و توان هستند. پس عملگر های -= و *= و /= و ^= هم به همون ترتیب تعریف می شن!
به جز این عملگر ها ما خیلی عملگر های دیگری داریم که بعدا باهاشون آشنا می شیم.
ما قبلا یه مثال برای عملگر . زدیم و گفتیم این عملگر دو تا رشترو به هم می چسبونه. حالا بد نیست یه مثال دیگه از اون رو ببینیم:

<?php
$i = 3;
$j = 5;
$k = $i + $j;
//$k: 8
$str = $i . $j;
//$str: 35
?>

خوب تا خط چهارم که فکر کنم مشخص باشه. توی خط چهارم جمع دو متغیر $i و $j رو ریختیم توی $k که قبلا هم داشتیم و مقدار ۸ بدست اومده. اما توی خط ۶ از عملگر . استفاده کردیم! اگه یادتون باشه گفتیم . دو تا رشترو به هم متصل می کنه ولی اینجا ما دو تا عدد رو به اون دادیم. پس php میاد و ابتدا هر دو رو به رشته تبدیل می کنه یعنی “۳″ و “۵″ و بعد اون ها رو مثل دو تا رشته به هم می چسبونه پس در نهایت مقدار “۳۵″ رو توی $str میریزه!
تا اینجا تا حدودی فهمیدیم متغیر ها چی هستند. اما حالا به چه دردی می خورن؟ باهاشون چیکارا می شه کرد؟ همه ی اینارو جلوتر متوجه میشیم.

لینک های داخلی

http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-2-fa

مقدمه ای بر هوش مصنوعی

هوش مصنوعی چیست؟
فکر کنم جواب دادن به این سوال یه مقدار سخت باشه. چون در حال حاضر ما حتی تعریف دقیقی برای هوش نداریم!
واژه ی هوش مصنوعی (Artificial Intelligence) اولین بار توسط شخصی به نام John McCarthy استفاده شد با این تعریف: “علم و مهندسی ساخت ماشین های هوشمند”.
اینم یه تعریف دیگه از هوش مصنوعی که تو خیلی از منابع بکار رفته:
” هوش مصنوعی عبارت است از مطالعه ی این که چگونه کامپیوترها را میی توان وادار به کارهایی کرد که در حال حاضر انسان‌ها آنها رابهتر انجام می‌دهند ”
خوب من کلا زیاد از تعریف خوشم نمی یاد، در نتیجه این قسمت رو همینجا خاتمه میدم، با مثال فکر کنم بهتر بشه مفاهیم رو نشون داد! در آخر اگر دوست داشتین تعریفی که خودتون از هوش مصنوعی پیدا کردینو بگید!

تاریخ هوش مصنوعی

میشه گفت مبحث هوش مصنوعی و پیشرفتش از سال ۱۹۵۰ شروع شد! توی این سال شخصی بنام آلن تورینگ (Alen Turing) تستی بنام تورینگ تست رو معرفی کرد و گفت که هر ماشینی که بتونه از این تست سربلند بیرون بیاد رو میشه یه ماشین هوشمند شمرد. تا الان هیچ ماشینی نتونسته این تست رو با موفقیت پشت سر بگذاره، که خیلی هم عجیب نیست چون برای یه ماشین تست خیلی سختیه! جالب اینه که تقریبا هر انسان سالمی می تونه به راحتی تو این تست قبول بشه حتی یه بچه ی ۵-۶ ساله!

Question level 3 بابا کشتی مارو! حالا بگو اصلا موضوع تسته چیه!
Answer ” خوب اگه اجازه بدی الان میگم! “
Question level 2 من اجازه نمیدم!
Answer ” مهم نیس! “

خوب می ریم سراغ اینکه این تست موضوعش چی بوده.
توی این تست جناب آقای تورینگ گفته بودند که بهترین معیار برای اینکه به یه ماشین بشه گفت هوشمند، اینه که از دو صفحه ی تایپ استفاده کنیم (یا در حال حاضر کیبورد کامپیوتر) و پشت یکیشون یک آدم بشینه و پشت اون یکی ماشین مد نظر! اگر ماشین بتونه طرفش رو متقاعد کنه (یا به عبارتی گول بزنه) که داره با یه آدم مکاتبه می کنه نه یه ماشین، تست رو با موفقیت رد کرده!
همونطور که میبینید پشت سر گذاشتنش این تست برای یه ماشین خیلی سخته! نکته ی جالب دیگه اینه که این تست حالت فیزیکی دو طرف رو کنار گذاشته و فقط طرز فکر دو طرف مهمه!
هر ساله یه مسابقه ی جهانی در این رابطه وجود داره که اولا به ماشینی که شبیه ترین رفتار رو به انسان داشته باشه ، ثانیا به ماشینی که بتونه تست تورینگ رو با موفقیت پشت سر بگذاره جایزه میدن! که البته جایزه ی دوم رو هنوز هیچ کی نتونسته بگیره!

Question level 2 من یه ماشین بی ام و دارم، فکر کنی اون بتونه این تست رو پشت سر بگذاره؟
Answer ” وااای!!! منظور از ماشین یه پاسخ گو هست! می تونه یه برنامه کامپیوتری باشه مثلا! “
Question level 4 Question level 2 ببخشید شماره تلفن شمارو می تونم داشته باشم!
Answer ” لطفا فاصله رو رعایت کنین آقا! اسلام رو زیر سوال نبرین… “
Question level 4 ای بابا، من دیدم ایشونم مثل من بی ام و دارن گفتم با هم تفاهم داریم خواستم یکم بیشتر آشتا شیم!
Answer ” لطفا بعدا آشنا شین! “

بعد از تستی که جناب آقای تورینگ (روحشون شاد) معرفی کردند هوش مصنوعی خیلی پیشرفتای دیگری داشت. مثلا اولین برنامه ی هوش مصنوعی توی دانشگاه منچستر نوشته شد که شطرنج بازی میکرد!
تو سال ۱۹۵۸ آقای John McCarthy زبان برنامه نویسی Lisp رو اختراع کردند! که احتمال داره خیلی از شما اسمشو شنیده باشید!
زبان برنامه نویسی Prolog هم تو همین دوره در سال ۱۹۷۲ بوجود اومد که الان هم یه زبون قوی در زمینه ی منطق حساب میشه!
تو سال ۱۹۹۷ دیپ بلو (Deep Blue) که یه ماشین شطرنج باز بود، تونست قهرمان جهان “گری کاسپارف” رو شکست بده! که این یه موفقیت بزرگ بود توی جهان هوش مصنوعی! می تونید بازی ششم رو که کاسپارف می بازه تو اینجا ببینید!

گری کاسپارف در مقابل دیپ بلو

البته باید اینم ذکر کنیم که بار ها قبل از این بازی هم کاسپارف با ماشین های مختلفی بازی کرده بود و همشونو شکست داده بود!
در سال ۱۹۹۹ شرکت سونی اولین روبات خونگی پیشرفته که در قالب یک سگ بود رو با نام AIBO معرفی کرد! این روبات واقعا یک شاهکار بود و البته هست! می تونید اطلاعات بیشتری رو درباره ی این ربات اینجا ببینید.
یادم رفت بگم! من از تاریخ هم بدم میاد! هیچ وقت نمره ی خوبی ازش نتونستم بگیرم! همیشه مجبور بودم با استاد یا معلم تاریخ صمیمی شم که بتونم درسش رو پاس کنم! در هر صورت دیگه تاریخ بسه. احتمالا شما هم زجر کشیدین تا به اینجا برسین! هوش مصنوعی خیلی جالب تر از این چیزاییه که تا اینجا نوشتم! قول میدم، باور کنید خیلی جالب تره.

موارد استفاده ی هوش مصنوعی

این روزا واقعا نمی شه رشته ای رو نام برد که نشه توش از هوش مصنوعی استفاده کرد! از پیش بینی وضعیت آب و هوا گرفته تا شناختن صورت آدم یا فهمیدن دست خط انسان ها! دیگه چه رشته هایی بگم که جالب باشه… آهان تو اقتصاد، رباتیک، تشخیص صدا، انواع نرم افزارای کامپیوتر و … حتی تو بازی های کامپیوتری! آره همون جنرالز، کانتر یا وار کرفتی که بازی می کنین! تو همشون مقدار زیادی هوش مصنوعی بکار رفته!

Question level 2 تو نید فور اسپیدم بکار رفته؟
Answer ” تو هر بازی، که کامپیوتر به خودی خودش بازی می کنه هوش مصنوعی بکار رفته! “
Question level 2 من نمیدونم توی نید فور اسپید کامپیوتر هم بازی می کنه یا نه! فقط تا یه جاییش رسیدم که وقتی رو پلی می زدم یه صدا میومد بد می گف سیدی نید فور اسپید رو بگذاربد تو کامپیوتر! جالب اینه سیدی تو کامپیوتر بود! احتمالا هوش مصنوعیش ضعیف بوده که نمی فهمیده، یا شاید اینم جزو بازیش بوده.
Question level 4 بابا باید کرکشو نصب می کردی، بیا من شمارمو میدم بزنگ بهت میگم چیکارش کنی!
Answer ” بابا این کارارو بگذارین برا بعد!!! بسه! ادامه میدیم! “

یه نکته ی جالبی که الان یادم اومد اینه که علم هوش مصنوعی مثل خیلی از علمای دیگه اول فقط برای برآورد سازی نیاز های نظامی بوده! درسته جنگ خیلی چیز بدیه اما کلی از پیشرفت های علمی رو به همین جنگ ها مدیونیم!

Question level 5 میشه یه مثال دیگه در این مورد بزنید؟
Answer ” البته! یه مثال جالب! همین اینترنتی که شما الان تو خونه استفاده می کنی اولش برای ایجاد شبکه های هماهنگی برای ارتش بوده! که بعد ها گسترش یافته تا به اینجا رسیده!
یا مثلا GPS! نگاه نکنید الان هر کسی می تونه یه GPS تهیه کنه! این سیستم در ابتدا توی ارتش آمریکای جهان خوار استفاده می شده برای پیدا کردن موقعیت و مختصات جغرافیایی سرباز ها! “

چند مبحث از هوش مصنوعی

هوش مصنوعی خیییلییییی وسیعه! خیلی بیشتر از اونی که فکر می کنید! از اینجا به بعد می رسیم به جاهایی که قولشو داده بودم که جالب باشن.
من نمیتونم همه ی مباحث رو درباره ی هوش مصنوعی بگم! چون اولا خیلی بی سواد تر از اونیم که بخوام در باره ی اونا حرف بزنم دوما انقدر زیادن که اگه فرض کنیم یه آدم که خیییلییی در این رابطه می دونه، صبح تا شب هم دربارش حرف بزنه براتون نه سن شما قد می ده نه سن اون! البته انقدر جذاب هست که هم اون تا آخر عمرش حرف بزنه هم شما گوش بدین!

Question level 1 اگه همش حرف بزنه کی غذا بخوره؟ کی بخوابه؟
Answer ” … “

من تو این نوشته فقط درباره سه تا از مباحثی که به نظرم خیلی جالب هستن صحبت می کنم! بازم می گم من زیاد با سواد نیستم، پس لطفا اگه جایی ایرادی دیدین یا بنظرتون اومد حرفی که زدم غلطه لطفا بگید! البته سعی کردم بدون منبع معتبر حرفی نزنم!
سه مبحثی که در ادامه ی این نوشته میگم این ها هستند:

  1. شبکه ی عصبی (Neural Network)
  2. الگوریتم ژنتیک (Genetic Algorithm)
  3. منطق فازی (Fuzzy Logic)

شبکه ی عصبی

شبکه ی عصبی یا Neural Network یکی از مباحثیه که تو هوش مصنوعی این روزا خیلی خوب داره پیشرفت میکنه و خیلیم روش کار میشه!
حالا اصلا چی هست؟
با چند تا سوال شروع می کنم.
تا حالا به این فکر کردی که مثلا تو یه آدمیو ۱۰ سال قبل دیدی، بعد اتفاقا امروز دوباره اونو بعد از ۱۰ سال می بینی! همه چی کلی تغییر کرده، صورتش، مقدار موش، صداش، قدش و خیلی چیزای دیگه. اما تو باز میشناسیش! خیلی جالبه ها! آخه از کجا؟؟؟ چطوری؟؟؟ مغز آدم خیلی انعطاف پذیری داره توی تغییرات یا خطا ها، همین مغز آدم رو خیلی جالب و پیچیده می کنه!

Question level 2 من یه مثال دیگه الان در این باره به ذهنم رسید، بگم؟
Answer ” بله حتما، خیلی خوبه که فعال باشی! “
Question level 2 مثلا من دوستامو امروز می بینم! بعد فردا میبینم بازم میشناسمشون!
Question level 3 خوب این که هنر نیس!
Question level 2 هنر نیس؟؟؟ تو که دوستای منو ندیدی هر روز میرن آرایشگاه، یه روز موهاشون آبیه یه روز زرد یه روز نارنجی! تازه صورتشونو که نگوووو.
Question level 3 آهان از اون لحاظ!
Question level 4 منم یه مثال بزنم؟
Answer ” بله، چه خوب که انقدر فعال شدین! “
Question level 4 امممم، آهان، مثلا من میام به این خانوم با شخصیتی می گم شماره موبایلم ۰۹۱۲…
Answer ” عزیز من! بابا چند بار بگم این کارارو بگذارید بعدا! آخه کلاس که جای شماره دادن نیس! “

خوب یه مثال دیگه می زنم بعد یکم بیشتر وارد میشیم!
شما نوشتن و خوندن رو یاد گرفتین! تا حالا به این فکر کردید که دست خط هر کسی با اون یکی فرق داره اما شما همه ی اونا رو می تونید بخونید؟ این دوباره منعطف بودن مغز آدم رو می رسونه! یا یه نکته ی دیگه، شما هر چقدر بیشتر تمرین کنید دست خطتون بهتر میشه! اینم نشون میده مغز آدم خودشو در طی تمرین به یه معیاری که به نظرش بهتره نزدیک تر می کنه!
اما چطوری؟ مغز آدم چجوری کار میکنه؟ تا حالا از خودتون پرسیدید چجوری یه چیز جدید یاد می گیرید یا چطوری فکر می کنید؟ هر آدمی باید اینو بدونه بنظر من! لا اقل باید یکم خودمونو بشناسیم.
مغز آدم از یه سری سلول عصبی (Neuron) تشکیل شده که هر کدوم سیگنال هایی برای هم میفرستند! جالبه بدونید این سلول های عصبی کاری که می کنن خیلییی سادست مثلا مثل حمع دو تا عدده اما چیزی که باعث میشه بتونن این کارای پیچیدرو انجام بدن اینه که تعداد این سلول ها خیلییی زیاده! مغز آدم حدود ۱۰ به توان ۱۱ تا از این سلول ها داره! تصور این عدد خیلی آسون نیست!
هر نورون تعدادی axom داره که مثل خروجی عمل می کنن و تعداد خیلی زیادی هم dendrite که به عنوان ورودی عمل می کنن. نورون ها یه مقدار مشخصی قدرت سیگنال نیاز دارن تا فعال شن، وقتی فعال شدن یه سیگنال الکتریکی برای سایر نورون ها میفرستن! هر چقدر نورون ها بیشتر استفاده بشن ارتباط بینشون (axonها و dendriteها) قوی تر میشه.
حالا ما همین سیستم رو سعی می کنیم کوچیکترش رو توی کامپیوتر شبیه سازی کنیم. کامپیوتر هایی که الان به اونا دسترسی داریم حتی قدرت پردازش ۲۰ بیلیون نورون رو هم ندارن، ولی با تعداد کمی نورون هم می شه پاسخ های مناسبی از شبکه ی عصبی گرفت.
خوب حالا تو کامپیوتر چطوری نورون ها رو سازمان می دیم؟
نورون ها همونطوری که تو عکس می بینین توی لایه های مختلف قرار می گیرن، لایه ی اول رو لایه ی ورودی (Input Layer) می گن که ورودی ها رو میگیره و بر حسب قدرت ارتباطش با هر نورون توی لایه ی بعدی سیگنال ورودی رو به لایه ی بعد میفرسته! از این به بعد به قدرت ارتباط هر نورون با نورون دیگه وزن (Weight) اون نورون می گیم. مقدار هر نورون توی هر لایه به وزن و مقدار نورون های لایه ی قبلش بستگی داره. در نهایت ما یه لایه ی خروجی داریم که توی این شکل دو تا نورون توشه! لایه های میانی تعدادشون می تونه هر اندازه ای باشه، و تعداد نورون هاشم مثل بقیه ی لایه ها می تونه هر چقدر که بخوایم باشه. بعدا اشاره می کنیم که چطوری انتخاب کنیم تعداد لایه ها و نورون های هر لایه رو.

یک شبکه ی عصبی ساده

حالا اینو ما درست کردیم، به چه دردی می خوره؟
یه شبکه ی عصبی مثل یه تابع عمل می کنه که به تعداد نورون های ورودی، ورودی می گیره و به تعداد نورون های خروجی هم خروجی میده! مثلا این شبکه عصبی که تو شکل می بینید به این صورته:

f(x1, x2, x3, x4, x5) = y1 , y2

حالا این تابع چه تابعیه؟ اینجاس که قدرت شبکه ی عصبی معلوم میشه!
ما میایم و به این تابع ۱۰۰ تا مثال که جوابشو می دونیم میگیم و هر بار عملیات بازپخشانی (Back propagating) رو انجام میدیم! بازپخشانی یه عملیاتیه که طی اون وزن نورون ها رو طوری تغییر میدیم که جواب های شبکه به جواب هایی که انتظار داشتیم نزدیک تر بشن! یعنی ما در اصل یه تابع می سازیم که خودمون نمیدونیم اون تابع چی هست و فقط چند تا مثال از اون رو داریم!
بگذارید یه مثال بزنم. مثلا شما چطوری جمع کردن رو یاد گرفتین؟ بهتون گفتن ۲+۲ میشه ۴، ۲+۳ میشه ۵ و … انقدر مثال دیدید تا فهمیدید آهان پس جمع یعنی این!
دقیقا میتونیم همین رو به کامپیوتر یاد بدیم! یعنی یه شبکه عصبی با دو نورون ورودی طراحی می کنیم و یه لایه ی میانی با ۳ تا نورون و در نهایت یه لایه ی خروجی با یه نورون (چون تابع جمع دو تا ورودی داره و یک خروجی)
بعد برای کامپیوتر چند تا جواب معلوم رو میگیم! مثلا میگیم ۲ و ۲ باید بده ۴، ۲ و ۳ باید بده ۵ و براش ۱۰۰۰ تا مثال میزنیم! در نهایت ازش میپرسیم حالا بگو ۱۰۰ و ۲۳ چی میشه؟ (اعدادی که تا بحال برای شبکه عصبیمون مثال نزدیم). و جواب میگیریم مثلا ۱۲۳٫۰۲۲۳! تعجب نکنید شبکه عصبی همیشه قرار نیست جواب قطعی بده، در نهایت می تونیم به یه روشی اونو به جواب قطعی تبدیل کنیم، مثلا توی این مثال روند کردن جواب میده!

Question level 5 ببخشید، چرا تعداد نورون های لایه ی میانی رو گفتین ۳ تا؟
Answer ” سوال خوبیه! تعداد نورون های لایه های میانی می تونه هر چیزی باشه به جای ۳، اما باید توجه داشته باشین هر نورونی که اضافه می کنیم از یه طرف گپ خطا رو کمتر می کنی اما از طرف دیگه زمان بیشتری برای پردازش می گیره و چون تعداد نورون ها زیاد شده تعداد خطا های کوچک هم زیاد تر می شن و یه خطای بزرگ رو ایجاد می کنن! پس باید با روش های مختلف بهترین حالت رو انتخاب کنیم. توی این مثال با آزمایش و خطا به این نتیجه رسیدیم که ۳ تا بهترین نتیجرو به ما میده! “

به اون پروسه ای که طی اون مثال میزنیم و عملیات بازپخشانی رو انجام میدیم پروسه ی تعلیم یا Training می گن!
پس بطور خلاصه ما اول یه شبکه ی عصبی طراحی می کنیم که در ابتدا می تونه هر نورونش وزن تصادفی داشته باشه، بعد شبکه ی عصبیمونو تعلیم میدیم با ورودی هایی که جوابشو داریم و بعد از تعلیم دادن به اون ورودی میدیم و ازش جواب می خوایم!
مثلا توی مسابقات شبیه سازی فوتبال خیلی وقت ها تیم ها بازی های دوستانه با هم میگذارن! هدف چیه؟ اینه که Agent ها شبکه ی عصبیشون تعلیم ببینه! جالب نیس؟ این یعنی کامپیوتر میتونه یاد بگیره و طی یادگیریاش تصمیم بگیره! بدون اینکه مغز داشته باشه.
انشاالله در آینده یه مثال از استفاده ی شبکه های عصبی توی هوش مصنوعی یه بازی می زنم چون بدون مثال هم فهمش یکم سخته هم باور کردنش!

الگوریتم ژنتیک

الگوریتم ژنتیک یا Genetic Algorithm (GA) در واقع شبیه سازی بقای انسان هست! تا حالا پیش خودتون فکر کردین این همه سال گذشته چطوری انسان ها از بین نرفتن و نسلشون پا برجاس؟ فکر می کنید رمز موفقیتشون چیه؟

Question level 1 فکر کنم ۱۸۳۴۶۲۱۳۰۹۷۳٫۳۴۷۹۲۸۳۷۴۲۶۱۰۱۰۰۰۰۰۰۱ باشه!
Answer ” … “

انسان ها بقا دارن چون با یه قانون خاصی پیش میرن که واضحه که موفق بوده!
حالا همین قانون رو توی کامپیوتر میشه شبیه سازی کرد! اما چجوری؟
فکر کنید میخوایم جواب این تابع رو بدست بیاریم:

X^2 + e^X + 3*sin(X) + int(-X^X) / X = 12

بنظر خیلی پیچیده میاد! شاید با روش های تحلیلی حل نشه و نیاز به محاسبات عددی باشه! یکی از راه ها الگوریتم ژنتیک هست که بعضی اوقات به شکل باور نکردنی سریع به جواب میرسه.
خوب پس من با یه مقدمه ازش شروع می کنم:

چرخه ی الگوریتم ژنتیک

اولین مرحله اینه که ما یک سری کرومزوم به عنوان جمعیت اولیه بصورت تصادف انتخاب می کنیم. هر کرومزوم یه عدد هست در مبنای دو.
مثلا این کرومزوم هارو به عنوان جمعیت اولیه در نظر می گیریم:

00001011
00100010
01000000
11100001
01101100
00000111
11001010
11110000
00010101
10000000
11100100

بعد از اینکه جمعیت اولیه معلوم شد این کرومزوم ها توی تابع Fitness امتحان میشن و بر حسب اینکه به جواب مورد نظر نزدیکن یا نه یه عدد بین صفر تا یک بهشون اختصاص داده میشه که صفر یعنی اصلا بدرد نمی خوره و یک یعنی عالیه!
بر حسب سلامتی کرومزوم ها چند تا از اون ها به عنوان والدین نسل بعدی انتخاب میشن! مرحله ی بعدی مرحله ی Breed هست که طبق فرایند Crossover کرومزوم ها با هم ازدواج می کنن و بچه دار میشن!

Question level 2 وااای مگه یه مشت صفرو یکم می تونن با هم ازدواج کنن!
Answer ” یکم صبر کنی میبینی که می تونن! “

خوب حالا فرآیند Crossover چطور انجام میشه؟
از کرومزوم های برگزیده دوتا دوتا انتخاب میشن و فرایند Crossover روی هر زوج بصورت زیر انجام میشه:

  1. First pair:
  2. 00001|011
  3. 00100|010
  4. After crossover:
  5. 00001010
  6. 00100011

در بالا فرآیند Crossover رو برای زوج اول می بینید! همونطور که مشخصه اول هر کزومزوم از بیت ۵ام به دو قسمت تقسیم شدن و ۵ بیت اول کرومزوم اول با ۳ بیت دوم کرومزوم دوم ترکیب شده و برعکس. به این ترتیب دو فرزند جدید بوجود اومد.
همین کار برای بقیه ی کرومزوم ها هم انجام میشه، ممکنه یک کرومزوم دو یا چند بار در فرآیند Crossover بکار برده شه، احتمال شرکت کرومزوم هایی که سلامت بهتری دارند توی فرآیند Crossover بیشتره!
بعد از فرآیند Crossover یک مرحله داریم که احتمال وقوعش خیلی کم هست به نام جهش یا Mutation. توی این فرآیند یک بیت تصادفی از یه کرومزوم تصادفی رو عوض می کنند. مثلا اگر بیت چهارم یک کرومزوم انتخاب بشه در صورتی که صفر باشه اونو یک می کنند یا بلعکس.

  1. First chromosome:
  2. 00001011
  3. After mutation:
  4. 00011011

این فرایند تو واقعیت هم وجود داره مثلا در یک آدم جهشی به وجود میاد و نابغه میشه یا در یه آدم دیگه جهش بوجود میاد و ناقص میشه! در الگوریتم ژنتیک هم همینطوره، یک جهش ممکنه کاملا مفید یا کاملا مضر باشه.
بعد از این مرحله دوباره کرومزوم های جدید به جمعیت اولیه برای نسل بعد بر می گردند و این فرآیند ها تکرار میشه تا با یک تلورانسی به جوابی که می خوایم نزدیک شیم! این روش در مقایسه با بقیه ی روش های آزمایش و خطا خیلی پیشرفته تره و خیلی وقت ها بسیار سریعتر به نتیجه ی مطلوب میرسه!
انشاالله در آینده ی نه چندان دور یک مثال هم برای این مبحث از هوش مصنوعی رو بررسی می کنیم.

منطق فازی

منطق فازی یا Fuzzy Logic در سال ۱۹۶۵ توسط دکتر لطفی زاده معرفی شد.
منطق فازی در واقع میگه که یه گزاره لزومی نداری یا درست باشه یا غلط (صفر باشه یا یک) ممکنه مثلا یه گزاره ۰٫۷ درست باشه!
درکش یه مقدار در ابتدا سخته! بگذارید یه مثال بزنم، شما از دوستتون می پرسید بنظرت حسین بلنده یا نه؟ دوستتون جواب میده ایییی، بلند نیست اما کوتاه هم نمیشه بهش گفت! اما در منطق باینری (یا منطقی که اکثر ما باهاش تو کامپیوتر آشنا هستیم) هیچ وقت برای یه گزاره همچین جوابی نمیده.
توی منطق باینری ما میگیم اگه قد مساوی یا بلند تر از ۱۷۵ بود بگو بلند اگه کوتاه تر بود بگو کوتاه! اما آدم اینطوری نیست منطقش مثل مثال قبلی که زدم.
حالا این سوال پیش میاد که ما در حال حاضر از همین منطق باینری جواب های خیلی خوبی میگیریم، فازی به چه دردی میخوره؟
برای جواب به این سوال یه مثال دیگه میزنم! مثلا یه شرکت می خواد یه کارخونه بزنه در فاصله ی ماکزیمم ۲۰۰ کیلومتری تهران، که به تولید کننده ی یه مدل مواد اولیه نزدیک تر از ۱۰ کیلومتر باشه و قیمت زمین هم اونجا هر چی کمتر باشه بهتر.اول یه بار با منطق باینری میریم پیش، اولین نمونه فاصلش با تهران ۱۹۰ هست و با مواد اولیه هم ۹ کیلومتر فاصله داره و قیمت زمین هم اونجا ۲۰۰۰ واحد هست، چندین تا نمونه دیگه هم برسی میشن که دو شرط اول رو ندارن، در آخر هم یه نمونه پیدا میشه که فاصلش تا تهران ۲۰۱ کیلومتر هست و فاصلش با مواد اولیه ۳ کیلومتره و قیمتش هم ۱۰۰۰ واحده! طبق منطق باینری این نمونه رد میشه چون فاصلش ۲۰۱ هست و بیشتر از ۲۰۰! اما حالا فرض کنید خود شما دارین تصمییم میگیرین، می یاین می بینید دو شرط آخر این مورد خیلی بهتر از اولین نمونس و تنها مشکل شرط اوله که ۱ کیلومتر بیشتر از اون چیزیه که میخواین، با خودتون میگید خوب ۱ کیلومتر در مقابل اون شرایط خوب که چیزی نیس و این مورد آخر رو انتخاب می کنید!
منطق فازی دقیقا همینو میگه! یعنی مثل منطق باینری که کاملا سخت گیرانه شرایط رو چک میکنه عمل نمی کنه بلکه مثل مغز آدم انعطاف پذیره.
این روزا تو خیلی چیزها از منطق فازی استفاده میشه، مثلا چند تاشون که شاید جالب باشن اینان:

  • ترمز های ABS و سیستم کروز.
  • دوربین ها
  • ماشین ظرف شویی
  • آسانسور ها
  • ماشین لباس شویی
  • بازی های رایانه ای
  • شناخت الگو ها
  • سیستم های تهویه

فکر کنم تقریبا فایده ی منطق فازی جا افتاده باشه. برای شروع استفاده از منطق فازی باید یه سری مفاهیم اولیه رو یاد بگیریم.
ببینید منطق فازی در واقع یه راه ساده برای رسیدن به یه نتیجه ی قطعی هستش بر اساس ورودی های ناقص، خطادار یا مبهم! از یه سری قانون خیلی ساده هم پیروی می کنه:

IF x AND y THEN z
IF a OR b THEN c

همونطور که می دونید if در زبان برنامه نویسی چیز جدیدی نیست! اما با یه مثال ساده شاید بشه فرقش رو نشون داد.
در نظر بگیرید دارید یه سیستم تهویه طراحی می کنید، توی سیستم های فازی بجای استفاده از شرط هایی مثل temprature>60C یا ۳۰C<temprature<60C از اصطلاحات زیر استفاده می کنیم:

IF temperature IS very cold THEN stop fan
IF temperature IS cold THEN turn down fan
IF temperature IS normal THEN maintain level
IF temperature IS hot THEN speed up fan

دقیقا مثل وقتی که شما توی ماشین نشستین، می بینید هوا خیلی گرمه بدون اینکه دمای دقیق توی ماشین رو بدونید کولر ماشین رو روشن می کنید و روی دمای کم میگذارید!
اگر دقت کنید هیچ ELSEای وجود نداره، چون دما می تونه هم سرد باشه هم متوسط با درجه های مختلف!
اپراتور های AND، OR و NOT که باهاشون توی منطق باینری آشنا هستیم توی منطق فازی هم وجود دارن.
قبل از تعریف این عملگر ها باید بدونیم مجموعه های فازی یا Fuzzy sets به چه معنی هستند. همونطور که گفتیم توی منطق فازی درجه ی درستی لزوما نباید ۰ یا ۱ باشه و یه گزاره می تونه مثلا ۰٫۳ درست باشه.
بعد گفتیم که تو منطق فازی می تونیم از هوای گرم یا قد بلند صحبت کنیم، اما باید اول اونارو برای سیستم فازیمون تعریف کنیم! هر کدوم از این دسته ها یه مجموعه ی فازی رو تشکیل میدن.
در واقع یه مجموعه ی فازی یه جفت (A, m) هست که A یه مجموعه هست و m یه تابع با دامنه ی A و برد [۰,۱]. به ازای هر x عضو A، m(x) درجه ی عضویت یا درستی x رو نشون میده!
می دونم یه کلمه از چند تا جمله ی قبل نفهمیدین الان بصورت نمودار میبینیدشون و می فهمید که چیز خیلی پیچیده ای نیست!

Question level 1 اتفاقا من می خواستم همین الان بگم که هیچی نفهمیدم
Answer ” اون که ۱۰۰ البته. اما عجیبه فقط شما می خواستید اینو بگید. “
Question level 2 Question level 4
Answer ” عزیزان من، بابا اگه با هم کاری دارید برید بیرون حرفاتونو بزنید، انقدم به هم نچسبین… “
Question level 4 ببخشید، مربوط به درس بود حرفمون!
Answer ” میشه بگین چی بوده بقیه هم استفاده کنن؟ “
Question level 4 امممم… بله، ازم پرسیدن عینکمو چن خریدم، منم با توجه به منطق فازی گفتم زیاااااد!
Answer ” باز جوابت کمی امیدوار کننده بود. “

خوب حالا که تعریف فازی ست هارو فهمیدیم میریم که اونارو توی نمودار ببینیم و عملگر هارو هم از روی شکل و با توجه به تعریفشون بررسی کنیم:

به عنوان مثال این شکل مجموعه ی فازی جوان رو نشون میده، شما وقتی از دوستتون می پرسین بنظرت علی جوونه؟
دوستتون اگه علی ۱۷ سالش باشه میگه آره، اگه ۲۵ سالش باشه میگه اییی، آره هنوز میشه بهش گفت جوونه، اگه ۲۸ سالش باشه میگه خیلی جوون نیس و اگه ۵۰ سالش باشه میگه نه!
این مجموعه ی فازی هم در واقع همین رو میگه! همونطور که میبینید قبل از ۲۰ سال m(B) یک هست، یعنی ۰ تا ۲۰ کاملا عضو مجموعه ی جوان هست، هر چی که میریم جلوتر عضویت توی مجموعه ی جوانی کمتر شده، توی ۲۵ سالگی درجه ی عضویت یا درستی ۰٫۵ هست و توی ۲۸ سالگی ۰٫۲ و بعد از ۳۰ سالگی ۰ که یعنی از این سن به بعد اصلا جوان نیست!
بنظرم الان یکم بهتر مطلب جا افتاده باشه! حالا فرض کنید دو تا مجموعه ی فازی زیر رو داشته باشیم:

مجموعه ی اول رو در ابتدا در نظر میگیریم. تعریف NOT توی شکل بصورت زیره:

یا به عبارتی:

NOT A = (1 - m(A))

خوب حالا دو مجموعرو که بالاتر نمودارشون هست رو در نظر بگیرین، تعریف AND روی اون دو مجموعه بصورت زیره:

یا به عبارتی:

A AND B = minimum(m(A), m(B))

OR هم قاعدتا تا الان حدس زدید به چه صورت خواهد بود:

A OR B = maximum(m(A), m(B))

خوووووب! اینم مقدماتی بود از منطق فازی. البته اینا مفاهیم خیلی اولیه ی منطق فازی بودن، اما توی کار از همین مفاهیم خیلی ساده و ترکیبشون میشه نتایج خیلی عاقلانه ای گرفت.
ما تا اینجا فقط به پروسه ی Fuzzification پرداختیم! بعد از اینکه عملیات فازی روی سیستم انجام شد در نهایت یه جواب قطعی می خوایم. برای رسیدن به یه جواب قطعی از پروسه ی Defuzzification استفاده میشه.
برای اینکه این فرایند ها رو قشنگ متوجه شید باید حتما یه مثال عملی ببینید! در آینده ی خیلی نزدیک یه مثال از منطق فازی رو با هم می بینیم.

خلاصه

ما توی این نوشته به تعریف هوش مصنوعی و مقدمات سه تا از اصلی ترین بخش های اون پرداختیم!
باید توجه داشته باشین که اولا هوش مصنوعی خیییییلییی جالب تر از این چیزاییه که توی این متن دیدید! امید وارم کاری نکرده باشم که از هوش مصنوعی بدتون اومده باشه.
بعدشم ما توی این قسمت به بررسی جدا جدای سه مبحث شبکه ی عصبی، الگوریتم ژنتیک و منطق فازی پرداختیم، خیلی جاها این سه مبحث به هم کمک می کنن و با هم ترکیب میشن! مثلا با استفاده از الگوریتم ژنتیک بهترین چینش نورون ها توی شبکه ی عصبی رو بدست میشه آورد.
انشاالله در نوشته های آینده، بعد از آوردن مثال درباره ی هر کدوم از این مباحث به حالت های ترکیبی که خییلیی جالب ترن می پردازیم!

خسته نباشید

میدونم این متن خیلی طولانی شد، ببخشید دیگه. در هر صورت اگه تحمل و صبر اینو داشتین که کلشو بخونید خسته نباشید! اگر سوال یا نظری هم دارید می تونید همین پایین بپرسید.برای بحث در رابطه با هوش مصنوعی می تونید به انجمن هوش مصنوعی ایران مراجعه کنید!

لینک های داخلی

لینک های خارجی

مقدمه ای بر شبیه سازی فوتبال

شبیه سازی یعنی چی؟
شاید این اولین سوالی باشه که بعد از شنیدن شبیه سازی فوتبال یا Soccer Simulation به ذهنتون برسه! به طور کلی شبیه سازی تو رایانه یعنی محیطی مثل واقعیت توی رایانه بسازیم و عملیاتی روی محیط شبیه سازی شده انجام بدیم و نتیجه ی اون رو ببینیم!

Question level 3 حالا چرا شبیه سازی کنیم وقتی می تونیم تمام جوانب رو در واقعیت بررسی کنیم؟
Answer ” بعضی از وقایع یا آزمایش ها بسیار پر هزینه هستند و حتی بعضی از اونا در زمان مورد نظر قابل آزمایش نیستند. به عنوان مثال می خوایم روش های مختلف مدیریتی رو بعد از وقوع زلزله بررسی کنیم! واضحه که ایجاد یک زلزله ممکن نیست و حتی اگر ممکن بود خسارت مالی و جانی فراوانی به همراه داشت. اینجاست که شبیه سازی به کمک ما میاد. در حال حاضر در زمینه ی مدیریت پس از زلزله هر سال مسابقاتی در سطح جهان برگزار میشه!. “
Question level 4 در زمینه ی فوتبال هم مسابقه برگزار می شه؟
Answer ” بله، هر سال مجموعه مسابقاتی با نام روبوکاپ برگزار میشه که در زمینه ی شبیه سازی میشه از شبیه سازی نجات، شبیه سازی فوتبال دوبعدی و سه بعدی و شبیه سازی روبات های مجازی یا Virtual Robots نام برد!
این مسابقات هر سال توی یکی از نقاط دنیا برگزار میشه، امسال توی آمریکا بود و سال دیگه توی چین خواهد بود. “
Question level 5 جریان مسابقات اپن چی هست؟
Answer ” این سوالت نشون میده تا حدودی در جریان مسابقات روباتیک هستی! هر سال توی چند کشور مسابقات اپن در رشته های مختلف انجام میشه که از جاهای مختلف دنیا توی این مسابقات شرکت میکنند. هر تیم بخواد توی مسابقات جهانی شرکت کنه اول باید یک بار مینیمم توی مسابقات اپن شرکت کرده باشه. اتفاقا هر ساله توی کشور خودمون هم مسابقات اپن به پشتیبانی دانشگاه آزاد اسلامی واحد قزوین که تیم روباتیک بسیار قدرتمندی داره برگزار میشه! و جالب تر از اون این نکته هست که ایران در زمینه ی شبیه سازی در دنیا حرف برای گفتن داره و توی شبیه سازی نجات هر سال دو تیم از چهار تیم اول جهان (یا حتی بیشتر) از ایران هست! “
Question level 2 وااای، چه عااالییی!

عجیبه که هیچ کدومتون این سوال رو نپرسیدین که چرا فوتبال رو شبیه سازی می کنیم؟ فوتبال که نه هزینه ی زیادی می خواد نه سخته بازی کردنش! دلیل شبیه سازی فوتبال خیلی چیزا میتونه باشه که از مهمترین دلایلش تمرین هوش مصنوعی، شبیه سازی شبکه های عصبی و منطق فازی رو میشه نام برد! در ضمن قراره در آینده ی نه چندان دور تیم فوتبال روبات ها با قهرمان فوتبال دنیا مسابقه بده و اونو ببره! از اونجایی که هنوز سخت افزار روبات ها زیاد پیشرفت نکرده الان دارن روی تصمیم گیری روبات ها جلوتر کار می کنند! پس یه دلیل شبیه سازی فوتبال این هست که هنوز بدنه ی مناسبی برای بازی فوتبال برای روبات ها درست نشده!

شروع می کنیم

برای وارد شدن به دنیای شبیه سازی فوتبال اولین کاری که باید بکنیم اینه که برنامه های شبیه سازی رو نصب کنیم!
اصولا برنامه های شبیه سازی که تو مسابقات مرسوم هستند دو بخش دارند! یک بخش سرور که قوانین محیط توش قرار داره و یه بخش کلاینت که نمیتونه قوانین رو تغییر بده اما می تونه با توجه به قوانین محیط و اختیاراتی که داره تصمیم گیری کنه و دستور بفرسته. مثلا در شبیه سازی زلزله یک سرور داریم که محیط بعد از زلزله رو شبیه سازی می کنه، بعضی جاها آتیش میگیره یا یعضی خیابونا بسته میشه و حتی جهت باد یا وضعیت آدم های مجروح رو تعیین می کنه! و بخش کلاینت در واقع اون بخشی هست که نحوه ی عملکرد آتش نشان ها، پلیس ها و آمبلانس ها رو تعیین می کنه! هر تیم که بهتر عمل کنه و با کمترین خسارت بتونه محیط رو کنترل کنه برنده هستش!
شبیه سازی فوتبال هم به همین شکل هست! سرور زمین فوتبال و جهت باد و تغییر موقعیت توپ و قوانین فیزیکی و خیلی چیز های دیگرو شبیه سازی می کنه و کلاینت که مسابقه سر بهتر شدن اونه دستورات رو می ده که بازیکن ها و Coach چطور بازی کنند!

Question level 4 کلاینت باید به زبان خاصی نوشته شه؟
Answer ” خوشبختانه در این زمینه محدودیتی وجود نداره! کلاینت به وسیله ی پروتکل UDP/IP به سرور وصل میشه در نتیجه هر زبان برنامه نویسی که این پروتکل رو ساپرت کنه قابل استفاده هست، البته اکثر تیم ها C++ یا Java استفاده می کنن! “

شاید بد نباشه قبل از شروع به نصب شبیه ساز فوتبال چند تا عکس از محیط شبیه سازی شده ببینیم!

محیط شبیه سازی فوتبال قبل از وصل شدن کلاینت ها

بعد از اینکه کلاینت ها (دو تیم) به سرور وصل شدن بازیکن های هر تیم در جایگاه های خودشون با توجه به چینش اولیه ی انتخاب شده قرار می گیرن

محیط شبیه سازی فوتبال بعد از وصل شدن کلاینت ها

بازی دقیقا بعد از اینکه داور دکمه ی کیک آف رو بزنه شروع میشه

محیط شبیه سازی فوتبال بعد از شروع بازی

نصب شبیه ساز فوتبال

توجه

تمامی فایل های مورد نیاز در این آموزش به جز پکیج Boost (به علت حجم زیاد) در این فایل موجود است، در صورتی که این فایل را دریافت کنید نیازی به گرفتن فایل هایی که در ادامه ی این آموزش آمده نیست!
پکیج بوست را میتوانید از اینجا بگیرید!

مراحل نصب

برای نصب پکیچ Soccer Simulation شما باید یه کامپیوتر با سیستم عامل لینوکس داشته باشید!

Question level 5 به جای لینوکس میشه از Cygwin توی ویندوز استفاده کرد؟
Answer ” خوشبختانه شما می تونید از Cygwin برای نصب و اجرای سرور استفاده کنید! راه دیگه برای نصبش تو ویندوز هم اینه که برنامه ی VMWare Workstation رو نصب کنید و روی اون لینوکس نصب کنید! اینطوری به محیط گرافیکی لینوکس هم توی ویندوز دسترسی خواهید داشت! “

من روی کامپیوتر خودم از Linux Suse 10.1 استفاده کردم، اما شما می تونید از هر کدوم از ورژن های لینوکس چه تو محیط KDE چه محیط Gnome استقاده کنید!
از اینجا به بعد رو باید با یوزر root تولی لینوکس لاگین کنید!
قبل از شروع نصب باید مطمئن شید که gcc روی لینوکستون نصب هست! اگر نیست می تونید از توی سی دی لینوکستون و با استقاده از Software Management توی YaST اونو نصبش کنید یا توی Terminal بزنید:

yum install gcc
Question level 3 ببخشید، gcc دقیقا چیکار می کنه؟
Answer ” gcc یکی از کمپایلر های C هستش که توی لینوکس خیلی استفاده میشه. “

بعد از اینکه مطمئن شدید gcc نصب هست باید یه پکیج دیگه بنام boost رو نصب کنید!
توی این صفحه آموزش نصب این پکیج هست! نصب این پکیج زمان خیلی زیادی می گیره و حدود ۱ گیگ هم هارد نیاز داره! البته سرور شبیه ساز فوتبال فقط نیاز به دو تا از Library های اون داره، شما می تونید فقط همون دو تا رو make و make install کنید:

libboost_filesystem-gcc.so
libboost_program_options-gcc.so

بصورت پیش فرض این Library ها توی /usr/local/lib ذخیره میشن! اما یه مشکلی که وجود داره اینه که اسم این Library ها توی پکیج جدید Boost نسبت به زمانی که Soccer Simulation Server ساخته شده فرق کرده پس باید اسم اونا رو عوض کنیم!
برای این کار به /usr/local/lib برین و اسم دو تا فایل رو با این دوخط دستور عوض کنید:

mv libboost_filesystem-gcc41-1_34_1.so libboost_filesystem-gcc.so
mv libboost_program_options-gcc41-1_34_1.so libboost_program_options-gcc.so

اگه ورژن Boostای که گرفتین فرق داشته باشه ممکنه اون عدد های آخر فرق کنن!خوب حالا رسیدیم به مرحله ی اصلی یعنی نصب rcssbase و rcssserver که سرور رو تشکیل میدن!
برای این کار باید دو تا پکیج RoboCup Soccer Simulator Base Code و Robocp Soccer Simulator Server رو از اینجا بگیرید!
بعد از گرفتن این دو تا فایل اونا رو توی یه فولدر که دوست دارین قرار بدین و اونا رو Untar کنید! برای Untar کردن کافیه توی Terminal بنویسید:

tar --bzip2 -xf FileName

هر دو تا فایل رو با استفاده از این دستور Untar کنید، یادتون نره بجای FileName اسم فایلی که میخواین Untar شه رو بزنید!
بعد از اینکه Untar کردید اول توی فولدر rcssbase-… برید و دستورای زیر رو بزنید:

./configure
make
make install

اکثر برنامه ها که با سورس ارائه میشن نصبشون به این شکل هست. ./configure با توجه به مشخصات رایانه و سیستم عاملتون یه MakeFile میسازه و اون MakeFile هم طریقه ی کمپایل شدن فایل ها رو تو خودش داره! وقتی دستور make رو می زنید اون فایل ها کمپایل میشن و make install هم اون فایل ها رو نصب می کنه! ممکنه هر کدوم از این مرحله ها یه مقدار وقت بگیره البته از دفعه قبلی که این کار رو برای boost انجام دادین کمتر وقت می گیره.
حالا برید توی فولدر rcssserver-… و همین دستور هارو برای اون بزنید.
به این ترتیب شما سرور رو نصب کردید! اما سرور چیزی رو به شما نمایش نمیده برای اینکه بتونید فعالیت سرور رو ببینید نیاز به Robocup Soccer Simulator Monitor دارین! و برای اینکه بتونید عملیات سرور و کلاینت رو بعدا دوباره بررسی کنید باید Robocup Soccer Simulator Log Player رو نصب کنید که مثل این میمونه که یه مسابقه ی فوتبال رو رکورد کنید و بعد اونو تماشا کنید!
نصب این دو تا برنامه دقیقا مثل rcssbase و rcssserver هست! یعنی Untar می کنید و توی فولدرشون میرید و اون دستور هارو می زنید!
الآن باید دیگه بتونید پکیج Robocup Soccer Simulator رو بطور کامل اجرا کنید!
برای اینکار اول برید توی فولدر /rcssserver-…/src و بعد توی ترمینال بزنید:

./rcssserver

اگه ارور گرفتین که گفته دایرکتوری یا فایل مورد نظر موجود نیست و اسم یه .so فایل رو به شما داده وحشت نکنید!
تو بعضی از ورژن های لینوکس این مشکل با یه Restart حل میشه! اما اگر نشد کافیه این کار هارو بکنید!
اگر فرض کنیم پکیچ rcssserver و rcssbase رو توی /home/siavash/rcssserver-11.1.1 و /home/siavash/rcssbase-11.1.0 ریختید این دستور ها رو توی Terminal اجرا کنید:

cp /home/siavash/rcssbase-11.1.0/rcssbase/conf/.libs/* /home/siavash/rcssserver-11.1.1/src/
cp /home/siavash/rcssbase-11.1.0/rcssbase/net/.libs/* /home/siavash/rcssserver-11.1.1/src/
cp /home/siavash/rcssbase-11.1.0/rcssbase/lib/.libs/* /home/siavash/rcssserver-11.1.1/src/
cp /home/siavash/rcssbase-11.1.0/rcssbase/gzip/.libs/* /home/siavash/rcssserver-11.1.1/src/

یادتون نره /home/siavash/ رو با جایی که سرور و بیس رو نصب کردین عوض کنید! این دستورا در اصل Library هارو در دسترس rcssserver قرار میده! البته راه بهتر این بود که path این فایل هارو به rcssserver بدیم اما این راه برای افرادی که برای اولین بار این کار رو انجام میدن راحت تره!
اگر باز هم با مشکل روبرو شدید لطفا تو همین صفحه گزارش بدین! حالا دوباره میریم سر اجرای سرور!
برای این کار اول برید توی /rcssserver-…/src/ و دستور زیر رو توی Terminal وارد کنید:

./rcssserver

قاعدتا نباید با پیغام خطا روبرو بشید. حالا باید مونیتور رو اجرا کنید!
برای این کار کافیه به فولدر rcssmonitor-…/src/ برید و توی Terminal بزنید:

./rcssmonitor

حالا دیگه تنها قسمتی که مونده وصل کردن کلاینت یا کد خودتون هست! می تونید برای شروع این کد رو بگیرید!. که یک نمونه برای شروع هست با نام Trilearn base sources.این برنامه نصبش مثل پکیج های قبلی هست! برای اجراشم کافیه به فولدر trilearn_base_sources-3.3 برید و توی Terminal دستور زیر رو بزنید:

./start.sh localhost TeamName

واضح هست که باید دو بار این دستور رو تو دو تا صفحه ی Terminal مجزا با دو TeamName مختلف بزنید چون وگرنه یه تیم بدون رقیب توی زمین خواهد بود. برای شروع بازی هم کافیه kick-off رو توی rcssmonitor بزنید! می تونید برای شرکت توی مسابقات همین سورس کد کلاینت رو توسعه بدید یا اینکه از base client های دیگه استفاده کنید! با کمی Search کلاینت هایی به زبون های دیگه مثل Java هم پیدا میشه!
انشاالله در جلسات بعدی درباره ی Objectها و Classهای شبیه سازی فوتبال و طریقه ی کد نویسی برای اون صحبت می کنیم. و البته کمی هم در رابطه با شبیه سازی زلزله که به نظر من خیلی جالب تر هست!

شبیه سازی فوتبال در عمل

قطعه ای از بازی دو تیم مشابه در مقابل هم!

لینک های داخلی

لینک های خارجی