|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| assignment.md | ||
README.md
سیستمهای چندعاملی
یکی از روشهای ممکن برای دستیابی به هوش، رویکردی است که به آن پدیدار (یا همافزایی) گفته میشود. این روش بر این اصل استوار است که رفتار ترکیبی تعداد زیادی عامل نسبتاً ساده میتواند منجر به رفتار کلی پیچیدهتر (یا هوشمندانهتر) سیستم بهعنوان یک کل شود. از نظر تئوری، این روش بر اصول هوش جمعی، پدیدارگرایی و سایبرنتیک تکاملی استوار است که بیان میکنند سیستمهای سطح بالاتر زمانی که بهدرستی از سیستمهای سطح پایینتر ترکیب شوند، نوعی ارزش افزوده کسب میکنند (اصلی که به آن اصل گذار به فرامجموعه گفته میشود).
آزمون پیش از درس
جهتگیری سیستمهای چندعاملی در دهه ۱۹۹۰ در حوزه هوش مصنوعی بهعنوان پاسخی به رشد اینترنت و سیستمهای توزیعشده ظهور کرد. یکی از کتابهای درسی کلاسیک هوش مصنوعی، هوش مصنوعی: رویکردی مدرن، به بررسی هوش مصنوعی کلاسیک از دیدگاه سیستمهای چندعاملی میپردازد.
مفهوم مرکزی در رویکرد چندعاملی، عامل است - موجودیتی که در یک محیط زندگی میکند، آن را درک میکند و بر آن تأثیر میگذارد. این تعریف بسیار گسترده است و انواع و طبقهبندیهای مختلفی از عوامل وجود دارد:
- بر اساس توانایی استدلال:
- عوامل واکنشی معمولاً رفتار سادهای از نوع درخواست-پاسخ دارند.
- عوامل تأملی از نوعی استدلال منطقی و/یا قابلیتهای برنامهریزی استفاده میکنند.
- بر اساس محل اجرای کد عامل:
- عوامل ایستا در یک گره شبکه اختصاصی کار میکنند.
- عوامل متحرک میتوانند کد خود را بین گرههای شبکه جابهجا کنند.
- بر اساس رفتارشان:
- عوامل منفعل اهداف خاصی ندارند. این عوامل میتوانند به محرکهای خارجی واکنش نشان دهند، اما خودشان اقدامی را آغاز نمیکنند.
- عوامل فعال اهدافی دارند که آنها را دنبال میکنند.
- عوامل شناختی شامل برنامهریزی و استدلال پیچیده هستند.
امروزه سیستمهای چندعاملی در بسیاری از کاربردها استفاده میشوند:
- در بازیها، بسیاری از شخصیتهای غیرقابلبازی از نوعی هوش مصنوعی استفاده میکنند و میتوان آنها را بهعنوان عوامل هوشمند در نظر گرفت.
- در تولید ویدئو، رندر کردن صحنههای پیچیده سهبعدی که شامل جمعیت است، معمولاً با استفاده از شبیهسازی چندعاملی انجام میشود.
- در مدلسازی سیستمها، رویکرد چندعاملی برای شبیهسازی رفتار یک مدل پیچیده استفاده میشود. بهعنوان مثال، رویکرد چندعاملی با موفقیت برای پیشبینی گسترش بیماری COVID-19 در سراسر جهان استفاده شده است. رویکرد مشابهی میتواند برای مدلسازی ترافیک شهری و بررسی واکنش آن به تغییرات قوانین ترافیکی استفاده شود.
- در سیستمهای اتوماسیون پیچیده، هر دستگاه میتواند بهعنوان یک عامل مستقل عمل کند، که باعث میشود کل سیستم کمتر یکپارچه و مقاومتر باشد.
ما زمان زیادی را صرف بررسی عمیق سیستمهای چندعاملی نمیکنیم، اما یک مثال از مدلسازی چندعاملی را بررسی خواهیم کرد.
NetLogo
NetLogo یک محیط مدلسازی چندعاملی است که بر اساس نسخه اصلاحشدهای از زبان برنامهنویسی Logo ساخته شده است. این زبان برای آموزش مفاهیم برنامهنویسی به کودکان توسعه داده شده است و به شما امکان میدهد عاملی به نام لاکپشت را کنترل کنید که میتواند حرکت کند و ردپایی از خود بهجا بگذارد. این ویژگی امکان ایجاد اشکال هندسی پیچیده را فراهم میکند، که روشی بسیار بصری برای درک رفتار یک عامل است.
در NetLogo، میتوانیم با استفاده از دستور create-turtles تعداد زیادی لاکپشت ایجاد کنیم. سپس میتوانیم به همه لاکپشتها فرمان دهیم که اقداماتی انجام دهند (در مثال زیر - حرکت ۱۰ واحد به جلو):
create-turtles 10
ask turtles [
forward 10
]
البته، زمانی که همه لاکپشتها یک کار مشابه انجام دهند، جالب نیست. بنابراین میتوانیم به گروههایی از لاکپشتها، مثلاً آنهایی که در نزدیکی یک نقطه خاص هستند، دستور دهیم. همچنین میتوانیم لاکپشتهایی با نژادهای مختلف ایجاد کنیم، با استفاده از دستور breed [cats cat]. در اینجا cat نام یک نژاد است و باید هم کلمه مفرد و هم جمع را مشخص کنیم، زیرا دستورات مختلف از اشکال مختلف برای وضوح استفاده میکنند.
✅ ما وارد یادگیری زبان NetLogo نمیشویم - اگر علاقهمند به یادگیری بیشتر هستید، میتوانید به منبع عالی فرهنگ لغت تعاملی مبتدیان NetLogo مراجعه کنید.
میتوانید NetLogo را دانلود و نصب کنید تا آن را امتحان کنید.
کتابخانه مدلها
یکی از ویژگیهای عالی NetLogo این است که شامل کتابخانهای از مدلهای آماده است که میتوانید امتحان کنید. به File → Models Library بروید و دستهبندیهای مختلفی از مدلها را انتخاب کنید.
تصویری از کتابخانه مدلها توسط Dmitry Soshnikov
میتوانید یکی از مدلها را باز کنید، بهعنوان مثال Biology → Flocking.
اصول اصلی
پس از باز کردن مدل، به صفحه اصلی NetLogo منتقل میشوید. در اینجا یک مدل نمونه که جمعیت گرگها و گوسفندها را با منابع محدود (چمن) توصیف میکند، نمایش داده شده است.
تصویری توسط Dmitry Soshnikov
در این صفحه، میتوانید موارد زیر را مشاهده کنید:
- بخش رابط کاربری که شامل:
- میدان اصلی، جایی که همه عوامل زندگی میکنند
- کنترلهای مختلف: دکمهها، لغزندهها و غیره
- نمودارهایی که میتوانید برای نمایش پارامترهای شبیهسازی استفاده کنید
- تب کد که شامل ویرایشگر است، جایی که میتوانید برنامه NetLogo را تایپ کنید
در بیشتر موارد، رابط کاربری دارای دکمه Setup است که وضعیت شبیهسازی را مقداردهی اولیه میکند، و دکمه Go که اجرای شبیهسازی را آغاز میکند. این دکمهها توسط هندلرهای مربوطه در کد مدیریت میشوند که به این شکل هستند:
to go [
...
]
دنیای NetLogo شامل اشیاء زیر است:
- عوامل (لاکپشتها) که میتوانند در میدان حرکت کنند و کاری انجام دهند. شما با استفاده از دستور
ask turtles [...]به عوامل فرمان میدهید، و کدی که در براکتها قرار دارد توسط همه عوامل در حالت لاکپشت اجرا میشود. - پچها مناطق مربعی میدان هستند که عوامل روی آنها زندگی میکنند. شما میتوانید به همه عوامل روی یک پچ اشاره کنید، یا میتوانید رنگ پچها و برخی ویژگیهای دیگر را تغییر دهید. همچنین میتوانید به پچها دستور دهید کاری انجام دهند.
- ناظر یک عامل منحصر به فرد است که دنیای شبیهسازی را کنترل میکند. همه هندلرهای دکمهها در حالت ناظر اجرا میشوند.
✅ زیبایی محیط چندعاملی این است که کدی که در حالت لاکپشت یا حالت پچ اجرا میشود، بهطور همزمان توسط همه عوامل بهصورت موازی اجرا میشود. بنابراین، با نوشتن کد کم و برنامهریزی رفتار یک عامل فردی، میتوانید رفتار پیچیدهای از سیستم شبیهسازی بهعنوان یک کل ایجاد کنید.
حرکت گروهی
بهعنوان مثالی از رفتار چندعاملی، حرکت گروهی را در نظر بگیرید. حرکت گروهی یک الگوی پیچیده است که بسیار شبیه به نحوه پرواز دستههای پرندگان است. با مشاهده پرواز آنها ممکن است فکر کنید که آنها از نوعی الگوریتم جمعی پیروی میکنند یا نوعی هوش جمعی دارند. با این حال، این رفتار پیچیده زمانی ایجاد میشود که هر عامل فردی (در این مورد، یک پرنده) فقط برخی عوامل دیگر را در فاصله کوتاهی از خود مشاهده کند و از سه قانون ساده پیروی کند:
- همراستایی - به سمت میانگین جهت حرکت عوامل همسایه هدایت میشود.
- انسجام - تلاش میکند به سمت میانگین موقعیت همسایگان حرکت کند (جذب بلندمدت).
- جدایی - وقتی به دیگر پرندگان خیلی نزدیک میشود، تلاش میکند فاصله بگیرد (دفع کوتاهمدت).
میتوانید مثال حرکت گروهی را اجرا کنید و رفتار را مشاهده کنید. همچنین میتوانید پارامترهایی مانند درجه جدایی یا محدوده دید را تنظیم کنید که مشخص میکند هر پرنده تا چه فاصلهای میتواند ببیند. توجه داشته باشید که اگر محدوده دید را به ۰ کاهش دهید، همه پرندگان کور میشوند و حرکت گروهی متوقف میشود. اگر جدایی را به ۰ کاهش دهید، همه پرندگان در یک خط مستقیم جمع میشوند.
✅ به تب کد بروید و ببینید که سه قانون حرکت گروهی (همراستایی، انسجام و جدایی) چگونه در کد پیادهسازی شدهاند. توجه کنید که فقط به عواملی که در دید هستند اشاره میکنیم.
مدلهای دیگر برای مشاهده
چند مدل جالب دیگر وجود دارد که میتوانید با آنها آزمایش کنید:
- Art → Fireworks نشان میدهد که چگونه یک آتشبازی میتواند بهعنوان رفتار جمعی جریانهای آتش فردی در نظر گرفته شود.
- Social Science → Traffic Basic و Social Science → Traffic Grid مدل ترافیک شهری را در شبکه ۱ بعدی و ۲ بعدی با یا بدون چراغهای راهنمایی نشان میدهند. هر خودرو در شبیهسازی از قوانین زیر پیروی میکند:
- اگر فضای جلوی آن خالی باشد - شتاب بگیرد (تا یک سرعت حداکثر مشخص).
- اگر مانعی در جلوی خود ببیند - ترمز کند (و میتوانید تنظیم کنید که راننده تا چه فاصلهای میتواند ببیند).
- Social Science → Party نشان میدهد که چگونه افراد در یک مهمانی کوکتل گروهبندی میشوند. میتوانید ترکیب پارامترهایی را پیدا کنید که منجر به سریعترین افزایش خوشحالی گروه شود.
همانطور که از این مثالها میبینید، شبیهسازیهای چندعاملی میتوانند راهی بسیار مفید برای درک رفتار یک سیستم پیچیده متشکل از افراد باشند که از منطق مشابه یا یکسانی پیروی میکنند. همچنین میتوان از آن برای کنترل عوامل مجازی، مانند NPCها در بازیهای رایانهای یا عوامل در جهانهای انیمیشن سهبعدی استفاده کرد.
عوامل تأملی
عواملی که در بالا توضیح داده شدند بسیار ساده هستند و با استفاده از نوعی الگوریتم به تغییرات محیط واکنش نشان میدهند. بنابراین آنها عوامل واکنشی هستند. با این حال، گاهی اوقات عوامل میتوانند استدلال کنند و اقدامات خود را برنامهریزی کنند، که در این صورت به آنها تأملی گفته میشود.
یک مثال معمول میتواند یک عامل شخصی باشد که دستورالعملی از یک انسان دریافت میکند تا یک تور تعطیلات رزرو کند. فرض کنید عوامل زیادی در اینترنت وجود دارند که میتوانند به آن کمک کنند. این عامل باید با دیگر عوامل تماس بگیرد تا ببیند چه پروازهایی موجود است، قیمت هتلها برای تاریخهای مختلف چگونه است، و سعی کند بهترین قیمت را مذاکره کند. وقتی برنامه تعطیلات کامل شد و توسط مالک تأیید شد، میتواند رزرو را انجام دهد.
برای انجام این کار، عوامل باید ارتباط برقرار کنند. برای ارتباط موفقیتآمیز، آنها نیاز دارند:
- برخی زبانهای استاندارد برای تبادل دانش، مانند فرمت تبادل دانش (KIF) و زبان پرسش و دستکاری دانش (KQML). این زبانها بر اساس نظریه کنش گفتاری طراحی شدهاند.
- این زبانها باید شامل برخی پروتکلهای مذاکره باشند، بر اساس انواع مختلف حراج.
- یک هستیشناسی مشترک برای استفاده، بهطوری که آنها به مفاهیم یکسانی اشاره کنند و معنای آنها را بدانند.
- راهی برای کشف اینکه عوامل مختلف چه کاری میتوانند انجام دهند، که بر اساس نوعی هستیشناسی باشد.
عوامل تأملی بسیار پیچیدهتر از عوامل واکنشی هستند، زیرا آنها نه تنها به تغییرات محیط واکنش نشان میدهند، بلکه باید بتوانند اقدامات را آغاز کنند. یکی از معماریهای پیشنهادی برای عوامل تأملی، عامل باور-میل-نیت (BDI) است:
- باورها مجموعهای از دانش درباره محیط عامل را تشکیل میدهند. این دانش میتواند بهصورت یک پایگاه دانش یا مجموعهای از قوانین باشد که عامل میتواند در یک وضعیت خاص در محیط اعمال کند.
- امیال اهدافی را تعریف میکنند که عامل میخواهد به آنها برسد. بهعنوان مثال، هدف عامل دستیار شخصی بالا رزرو یک تور است، و هدف عامل هتل افزایش سود است.
- نیات اقدامات خاصی هستند که عامل برای دستیابی به اهداف خود برنامهریزی میکند. اقدامات معمولاً محیط را تغییر میدهند و باعث ارتباط با دیگر عوامل میشوند.
برخی پلتفرمها برای ساخت سیستمهای چندعاملی در دسترس هستند، مانند JADE. این مقاله شامل بررسی پلتفرمهای چندعاملی، همراه با تاریخچه مختصری از سیستمهای چندعاملی و سناریوهای مختلف استفاده از آنها است.
نتیجهگیری
سیستمهای چندعاملی میتوانند اشکال بسیار متفاوتی داشته باشند و در بسیاری از کاربردها استفاده شوند. آنها تمایل دارند بر رفتار ساده یک عامل فردی تمرکز کنند و رفتار پیچیدهتر سیستم کلی را به دلیل اثر همافزایی به دست آورند.
🚀 چالش
این درس را به دنیای واقعی ببرید و سعی کنید یک سیستم چندعاملی را برای حل یک مشکل مفهومسازی کنید. بهعنوان مثال، یک سیستم چندعاملی برای بهینهسازی مسیر اتوبوس مدرسه چه کاری باید انجام دهد؟ چگونه میتواند در یک نانوایی کار کند؟
آزمون پس از درس
مرور و مطالعه شخصی
استفاده از این نوع سیستمها را در صنعت بررسی کنید. یک حوزه مانند تولید یا صنعت بازیهای رایانهای را انتخاب کنید و کشف کنید که چگونه سیستمهای چندعاملی میتوانند برای حل مشکلات منحصربهفرد استفاده شوند.
تکلیف NetLogo
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادرستیهایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما هیچ مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.
