آموزش مفاهیم برنامه نویسی مبتنی بر عامل – Agent Oriented Programming

در این پست قصد داریم در مورد عامل (Agent) های هوشمند نرم افزاری و برنامه نویسی مبتنی بر عامل یا Agent-Oriented Programming  صحبت نماییم. عامل های نرم افزاری (Software Agent) نسل بعدی  object ها می باشند. به عبارت دیگر عامل ها تمامی خصوصیات object ها را دارا می باشند به علاوه هوشمندی (Intelligence). در object ها نیز هوشمندی وجود دارد، اما با تفاوت هایی. برای مثال یک object تا زمانی که کاری را از او نخواهید (یعنی به طور مستقیم متدی را از آن فراخوانی نکنید) هیچ کاری را برای شما انجام نمی دهند. اجازه دهید که مفصلاً وارد بحث شویم.

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

مقدمه:

در چند دهه اخیر، مهندسی نرم افزار به درجات قابل توجهی از پیشرفت در زمینه درک ویژگی های سیستم های پیچیده دست یافته است. اکنون این موضوع کاملا مشخص شده که تعامل (Interaction) احتمالاً مهم ترین ویژگی سیستم های پیچیده است.

معماری های نرم افزاری شامل اجزای تعاملی و پویای زیادی هستند که هر کدام روش کنترلی خاص خود را دارند.

سیستم های پیچیده شامل پروتکل های همکاری بسیار پیچیده از انواع ساده سیستم ها(سیستم ساده سیستمی است که در کل می توان گفت شبیه تابعی عمل می کند که با دریافت ورودی ها، خروجی های مربوطه را بر می گرداند و در آن همه اجزاء از یک نخ کنترلی-Control Thread-استفاده می کنند.) هستند.

متأسفانه اگر نگوییم همه، بیشترApplication های موجود در جهان واقعی این پیچیدگی زیاد را در خود نهفته دارند.

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

سیستم های نرم افزاری سازمانی بطور سنتی از عدم تطبیق بین محیط درونی و بیرونی شان رنج می برند. محیط عملکردی آنها با Actorها، مسئولیت ها، اهداف (Goal)، وظایف (Task) و منابع (Resource) تعاریف می شود.

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

یکی از دلایل این عدم تطبیق این است که متدولوژی ها (متدولوژی بدنه ای از متدهاست که نظام خاصی بر آنها اعمال شده باشد. متد روندی است که برای رسیدن به چیزی طی می شود.) به طور سنتی بر اساس ویژگی های برنامه نویسی روز بنا می شدند.

هدف متدولوژی مقرر کردن تمام اجزای لازم برای توسعه یک سیستم نرم افزاریست، بخصوص در چارچوب برنامه های کاربردی تجاری.

در تحلیل نیازمندیهای یک سیستم، فرضیات تکنیکی باید با فرضیات سازمانی به تعادل برسند و این فازیست که محیط عملکردی سیستم مدل سازی و طراحی می شود.

با معرفی شیء به عنوان یکBlack Boxانقلابی در توسعه نرم افزار رخ داد.با بزرگتر شدن نرم افزارها و امکان استفاده از پردازش موازی نیاز به مدل دیگر برنامه نویسی حس شد.

تاریخچه:

 حال نگاهی داریم بر سیر توسعه چارچوب های برنامه نویسی که منجر به رهیافت Agent Oriented شده است.

 Agent-Oriented Programming

Object-Oriented Programming

Structured Programming

Machine Language


Agent

Object

Subroutine

Program

Structural Unit

Object + Independent thread of execution + Initiative

 Subroutine + Persistent local state

Bounded unit of program

 

Relation to

previous level

در اولین روزهای شروع برنامه نویسی که تنها زبان موجود زبان ماشین بود ساختار اصلی برنامه ها این بود که ساختار مشخصی نداشتند و تمام برنامه بصورت یک بلوک واحد از کد(صفر و یک)ها پنداشته می شد. این روال ادامه داشت تا اینکه برنامه نویسان پی بردند که برنامه های بزرگ می توانند به قطعه کدهای کوچک مستقل از هم تقسیم شوند. نتیجه اینکه، دیدگاه نخست تغییر کرد و سبک جدیدی از  برنامه نویسی با نام برنامه نویسی ساختیافته (Structured Programming) ارائه گردید.

این سبک برنامه نویسی، برنامه نویسی را راحت تر کرد و مدت ها جوابگوی نیاز ها بود اما مشکلی که کم کم نمایان می شد این بود که در هر لحظه نیازهای جدیدی پرده از چهره می گشودند و برنامه ها نیز بزرگتر می شدند و پیچیده تر به نحوی که توسعه نرم افزار بسیار سخت، زمانبر و پر هزینه می شد و گاهاً مراحل توسعه یک نرم افزار با شکست روبرو می شد.

ریشه همه این مشکلات این بود که در سبک برنامه نویسی ساخت یافته کارهای یک سیستم از داده هایی که با آنها در تعامل بود جدا بود و کارهای مختلف در سیستم به داده های همدیگر دسترسی داشتند و این باعث می شد که فهم جریان های کاری در سیستم و مدیریت آنها سخت شود. پس معماران نرم افزار بر آن شدند که این مشکلات را حل و یا اینکه حداقل کاهش دهند. نتیجه این تلاشها باعث شد که معماران نرم افزار بار دیگر دیدگاه های خود در مورد توسعه سیستم ها را تغییر دهند و سبک جدیدی از برنامه نویسی با عنوان برنامه نویسی شئ گرا (Object Oriented Programming)  مطرح گردید.

از آنجا که برنامه ها بزرگتر می شدند و نیز در طراحی برنامه ها راحتی ارتباط کاربر با برنامه بشدت دخیل بود بدیهی بود که پیچیدگی داخلی برنامه زیادتر می شد و مفهوم زیر برنامه در سبک برنامه نویسی ساخت یافته به حدی قوی و جامع نبود که بتواند این مشکلات را بپوشاند و کنترل برنامه راحت تر شود. این مشکلات باعث شد که از سبک جدید برنامه نویسی ایی که تازه متولد شده بود و نیز نو پا بود استقبال شود. چرا که دیدگاه این سبک این بود که بر خلاف سبک برنامه نویسی ساخت یافته کل داده ها و کارهای مربوط به آن داده ها را در یک واحد که مستقل از دیگر واحد ها بود کپسوله (Encapsulation) می کرد و این باعث می شد که این واحد کپسوله شده که شئ (object) نام داشت بار ها بدون تغییر و یا با تغییرات اندک در برنامه های مختلف استفاده شود. در این سبک مدیریت هر واحد به خود آن واحد سپرده می شود و این مدیریت از دید سیستم های بیرونی مخفی است به همین دلیل به اشیاء واحد های Black Box نیز گفته می شود.

اشیاء کار برنامه نویسی را بسیار ساده کردند و معماران نرم افزار با استفاده از این روش سیستم های روتین تری طراحی می کردند، اما مسئله ای که هنوز آزار دهنده بود این بود که سیستم ها در حال بزرگ تر شدن بودند و طبعاً پیچیده نیز می شدند و آزار دهنده تر از این مسئله این بود که  محیطی که اشیاء در آن عمل می کردند غالباً پویا، باز و پیچیده بود و ذات اشیاء غیر فعال بود، یعنی تا زمانی که از اشیاء تقاضایی نشود آنها قادر به انجام کاری نیستند.

در نتیجه:

  • در زمان کامپایل سیستم، همه اجزاء سیستم مشخص و قابل پیش بینی نیستند.

گفتیم که محیط عملکردی اشیاء باز است، سیستم باز سیستمی است که مولفه ها می توانند به محیط عملیاتی پویا متصل شوند و یا آنرا ترک کنند وشروط عملیاتی را به صورت غیر قابل پیش بینی تغییر دهند. بدیهی است که در این سیستم مولفه ها با پروتکل های ارتباطی پیچیده با هم تعامل دارند و  طبعاَ سیستم پیچیده می شود.

این مسائل باعث تغییر مجدد رویکرد برنامه نویسی شئ گرایی شد و اشیاء که غیر فعال بودند کنار گذاشته شدند و تمرکزها متوجه واحدهای فعالی به نام عامل (Agent) شد.

سیستم باز (Open System): درسیستم های باز مولفه ها می توانند به یک محیط عملیاتی پویا متصل شوند (Join) ویا آنرا ترک(Leave) کنند وشروط عملیاتی رو به صورت غیر فعال پیش بینی تغییر دهند.

سیستم پیچیده(Complex System): نرم افزار شامل شمار زیادی از مولفه هاست که به دنبال پروتکل های ارتباطی پیچیده باهم تعامل دارند.در این سیستم ها ( ازنوع عامل گرا) هر عامل یک نمای جزئی (Partial View) از محیط دارد و کنترل مرکزی وجود ندارد.

این مشکلات باعث کنار گذاشتن اشیاء غیرفعال و روی آوردن به واحدهای ساختاری فعالی به نام Agent شد.

فلسفه ی وجودی عامل ها

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

  • امروزه نیازمند سیستمی هستیم که خود برای آنچه نیازمند اجرایش هست، قادر به تصمیم گیری باشد
  • در محیطی با تغییرات سریع و اعمال غیرقابل پیش بینی عمل کند
  • در محیطی باز که امکان مواجه با شکست وجود دارد عمل کند
  • و گذشته از همۀ اینها مفهوم عامل(که مثل یک سیستم خودکار، برای رسیدن به اهدافی که برایش طراحی شده است قادر به تعامل بادیگرAgent هاست) برای طراحان نرم افزار یک مفهوم طبیعی(Natural Metaphor) است، چرا که طراح با ساخت عامل های فعال و خود مختار  درقبال توصیف فعالیت های پویای سیستم مسئولیتی ندارد.

ایدۀ عامل ها

ایدۀ عامل اولین بار در دهۀ۱۹۴۰ توسط آقای John McCartyمطرح شد منتها به دلیل نیاز پردازشی بالا این تفکر عملاً تا دهۀ ۹۰ میلادی مورد توجه قرار نگرفت و سال ها بعد به نام عامل(Agent) خوانده شد.

او سیستمی را تصور کرد که:

  • وقتی به آن هدفی داده می شد   ——->    دانستن جزئیات عملیات کامیپیوتری مناسب
  • وقتی با مشکلی برخورد می کرد  ——->    از کاربران نظرخواهی یا پرسش

این ایده از سال ۱۹۸۰ بطور رسمی شروع به کار و رشد کرد و موضوع عامل های نرافزاری و سیستم های چند عامله (Multi Agent System) مطرح شد.

اولین کسانی که از واژۀ Agent به معنای امروزی آن استفاده کردند آقایان John Holland و John H.Miller بودند که در سال ۱۹۹۱ در یک مقاله تحت عنوان Artificial Adaptive Agents In Economic Theory مفهوم Agent را بکار بردند.

تعریف عامل(Agent)

یک Agent نوع سادۀ دیگری ازانتزاع (Abstraction) نرم افزاریست. یک شیئ یک انتزاع سطح بالاست که متد ها و شناسه هایی از یک جزء نرم افزاری را توصیف می کند.

به هر حال یک Agent یک انتزاع نرم افزاری بسیار بالا تر است که روشی قوی و راحت برای توصیف یک موجودیت نرم افزاری پیچیده را فراهم می کند.

Agent یک سیستم کامپیوتری مبتنی بر نرم افزار است که در یک محیط قرار گرفته (Situated) و قادر به فعالیت های خود مختار (Autonomy) در آن محیط برای رسیدن به اهدافش است.

واقع شده (Situated): یعنی عامل ها کاملاً درون محیط خاصی موجود هستند، آنرا درک می کنند و بر روی محیط اثر می گذارد و محیط نیز بر روی آنها.

خود مختاری (Autonomy): یعنی توانایی عمل کردن بدون مداخله انسان یا سیستم های دیگر، به عبارت دیگر خود بر روی رفتارهایشان تصمیم بگیرند.

خصوصیات دیگر عامل ها

  • کنش گرایی (Proactive): یعنی عامل می تواند بدون هیچ تحریک خارجی عمل نماید.
  • واکنش پذیری ( Reactive): یعنی عامل قادر است به تغییرات محیط پاسخ دهد.
  • توانایی جمعی(Social Ability): یعنی عامل ها می توانند در یک سیستم MAS با دیگر عامل ها ارتباط بر قرار کرده و مذاکره کنند.
  • یادگیری (Learning): یعنی عامل ها قادر به یادگیری اند.

با این تعاریف می توان گفت که یک عامل یک ربات نرم افزاریست که دردنیای کامپیوتر زندگی و فعالیت می کند.

ابعاد یک عامل

آموزش مفاهیم برنامه نویسی مبتنی بر عامل - Agent Oriented Programming
آموزش مفاهیم برنامه نویسی مبتنی بر عامل – Agent Oriented Programming
  •  Adaptability: میزان درجه ای که رفتارهای یک عامل بعد از توسعه آن شاید تغییر پیدا کند.
  • Autonomy:  میزان درجه ای که عامل مسؤل رفتارهای خود است و می تواند اهداف اش را با ارسال پیام به دیگر عامل ها دنبال کند.
  • Collaboration: میزان درجه ای که عامل ها ارتباط و کار مشارکتی با دیگر عامل ها در یک محیط چند عامله دارند و روی یک وظیفه کار می کنند.
  • Knowledgeable:  میزان درجه ای که عامل قادر است در مورد اهدافش یاد بگیرد.
  • Mobility: قابلیتی برای بعضی عامل ها جهت حرکت از یک مد اجرایی به مدهای دیگر. به عامل اجاره می دهد در یک محیط جدید اجرا شود و عمل کند.
  • Persistence: میزان درجه ای که زیر بنای عامل را قادر می سازد دانش اش را در پریودهای زمانی که در آن است نگه دارد.

یک عامل در صورتی خود مختار است که:

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

موتور و نیروی محرکه هر عامل خود مختار خودش است.

نحوه تعامل عامل ها با محیط:

آموزش برنامه نویسی مبتنی بر عامل - عامل های هوشمند
آموزش برنامه نویسی مبتنی بر عامل – عامل های هوشمند

Agent با Effectorهایش روی محیط و دیگر Agent ها تأثیر گذار است و با Sensorهایش ادراکات(Percepts) را می گیرد.

آموزش برنامه نویسی مبتنی بر عامل - محیط عملکردی عامل های هوشمند
آموزش برنامه نویسی مبتنی بر عامل – محیط عملکردی عامل های هوشمند

ادراکات(Percepts) و اعمال(Action)  واسط محیط عملیاتی هستند.

Event(رویداد)ها برای باز فعالی(Reactive) هستند یعنی Agent می تواند با استفاده از آنها دوباره با محیط تعامل داشته باشد.

Agent پس از دریافت ادراکات می تواند ادراکات را به باور (Beliefs) های خود بیافزاید یا اینکه مستقیماً با توجه به آنها مجدداً عمل (Action) کند. وقتی که ادراکات را به باورهای خود اضافه کرد، می تواند باورها را به اهداف(Goals) تبدیل کند و سپس از روی اهداف، طرح ریزی(Plans) یک عمل دوباره را بنماید یا اینکه مستقیماً از روی باور(Goals)ها یک عمل(Action) جدید را طرح ریزی(Plans) کند.

برای نمونه کار برنامه نویسی می توانید که از چارچوب AgentServices که رایگان و به زبان C#.Net است استفاده کنید. شما می توانید این Framework را به همراه مستنداتش از آدرس www.agentservice.it دریافت کنید.

مقایسه Agentها با Objectها

جدول زیر خود گویای واضحی از این مقایسه است.

Object

Agent

رفتارها بوسیله موجودیت های خارجی کنترل می شوند

خود مختار است و خود کنترل خودش را بر عهده دارد

قدرت “نه” گفتن ندارد

اجازه “نه” گفتن دارد

رفتارهای قابل پیش بینی – کارکرد هایش ایستا است

غیرقابل پیش بینی است-در سناریوهای مختلف رفتارهای مختلفی دارد

نگاشتی از Object Oriented Programming به Agent Oriented Programming

AOP

OOP

 
   

Structural Elements

generic role

abstract class

 

domain specific role

class

 

knowledge, belief

class variables

 

capabilities

methods

 
   

Relations

negotiation

collaboration (uses)

 

holonic agents

composition (has)

 

rolemultiplicity

inheritance (is)

 

domain-specific role + individual

knowledge

instantiation

 

service matchmaking

polymorphism

 

مهندسی نرم افزار Agent

مهندسی عامل ها مهندسی مبتنی بر هدف است یعنی اهداف سیستم را در نظر میگیرد.

  1. تشخیص اهداف کلی سیستم با توجه به نیازمندی های مشتری
  2. اهداف کلی به اهداف کوچکتر شکسته می شوند.
  3. اهداف باید به اندازه ای جزئی شوند که امکان انجام آنها توسط عامل هایی که در مرحله طراحی مشخص می شوند، وجود داشته باشد.
  4. با توجه به نیازمندی ها و اهداف سیستم،  UseCaseهای سیستم مشخص می شوند.
  5. برای هر یک از UseCaseها، نقش(Rule)های لازم و همچنین ارتباط بین نقش ها برای انجام UseCase مربوطه مشخص می شوند.
  6. باید به هر هدف(Goal) یک نقش(Rule) اختصاص یابد.
  7. برای تبدیل نقش ها به کلاس های عامل در مرحلۀ طراحی، باید وظایف هر نقش مشخص گردد.

کاربردهای عامل

امروزه عامل های هوشمند بطور وسیع در پروژه های عملیاتی و تحقیقاتی مورد استفاده قرار می گیرند.

موسسات و شرکت هایی مانند IBM ، دایملر کراسلر، وزارت دفاع دفاع آمریکا و ناسا بطور موفقیت آمیزی از سیستم های مبتنی بر عامل استفاده می کنند و بکارگیری عامل ها رفته رفته به یک موضوع حیاتی در فرآیندهای توزیع شده و غیر متمرکز تبدیل شده است.

تمامی این تلاش ها را می توان به ۴ گروه زیر طبقه بندی کرد.

۱- حل گروهی مسائل و هوش مصنوعی توزیع شده(Distributed Artificial Intelligent)

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

۲- واسط کاربر(User Interface)

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

۳- عامل های اطلاعاتی و سیستم های اطلاعاتی جمعی(Cooperative Information System)

عامل اطلاعاتی به یک یا چند منبع اطلاعاتی دسترسی دارد و می توانداطلاعات موجود در این منابع را جهت پاسخگویی به سؤالات دیگر کاربران و یا عامل های اطلاعاتی دیگر، جمع آوری و دست کاری نماید.

یک شبکه اطلاعاتی جمعی از منابع سنتی مانند فایل و پایگاه داده و یا سایر عامل های اطلاعاتی تشکیل می شود.

۴- عامل های واقع نما(Believable Agent)

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

عامل ها همچنین در اواسطدهه ۱۹۹۰ واردصنعت و تجارت شدند.

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

چاش ها

  • چگونگی تجزیۀ یک مسئله، تخصیص زیر وظیفه به Agent ها وترکیب نتایج جزئی
  • چگونگی مدیریت پرداختی به اطلاعات ادراکی توزیع شده
  • چگونگی نگهداری مدل های مشترک پایدار از جهان
  • چگونگی پیاده سازی کنترل نامتمرکز و ساخت یک مکانیزم تعاملی کارآمد برای Agent ها
  • چگونگی طراحی طرح چند عامله (Multi Agent System) کار آمد و الگوریتم های یادگیری
  • چگونگی ارائه دانش، چگونگی قادر ساختن عامل ها به دلایلی در مورد اعمال، برنامه ها و دانستنی از دیگر عامل ها
  • چگونگی توانا ساختن عامل ها برای ارتباطات
  • از چه زبان ارتباطی و پروتکلی استفاده شود
  • چگونگی، چه زمانی و با کدام عامل ارتباط برقرار کند
  • چگونگی قادر ساختن عامل ها برای بحث و گفتگو و رفع کردن کشمکش ها
  • چگونگی قادر ساختن عامل ها به شکل ساختارسازمانی شبیه تیم ها
  • چگونگی تحصیص قوانین به عامل ها

دانلــود بـاکـــس

لینک های دانلود در این باکس قرار دارد
  • ۲ مگابایت
  • سورس ایران
  • پسورد : www.sourceiran.com

دیدگاه کاربران

تعداد دیدگاه های کاربران : ۴ دیدگاه

داکت اسپلیت ها

مطالب جامع و خوبی بود ممنون

پاسخ دهید
۰

fateme

سلام

ممنونم از مطالب، فقط ی سوال؟ اینکه برنامه نویسی تحت وب با #c از عامل استفاده می‌کنه یا شی؟

پاسخ دهید
۰

استخر پیش ساخته

خیلی ممنون از مطالبی که رایگان در اختیار ما قرار میدید/

پاسخ دهید
۰

    محمد همتی در پاسخ استخر پیش ساخته

    خواهش دوست عزیز

    پاسخ دهید
    ۰


Top