در مقالۀ اول از سری مقالات مربوط به فریمورک Jade به بیان مقدمهای در رابطه با سیستمهای چندعاملی پرداختم و همچنین در مقالۀ دوم ابزارها و محیطهای موردنیاز برای کامپایل و اجرای کلاسهای این فریمورک معرفی شدند و در صورت تمایل میتوانید از طریق لینکهای زیر به این مقالات مراجعه کنید:
- https://bit.ly/2JA9dd4
- https://bit.ly/2zN5mK1
حال در این مقاله قصد دارم تا یک مثال سادۀ دنیای واقعی در خرید و فروش یک کتاب را تشریح کنم.
مثال BookTrading به یک سیستمِ چندعاملیِ خریدار و فروشنده اشاره دارد و هدف آن ارائۀ یک کتاب با قیمت مناسب به کاربری است که قصد خرید یک کتاب را دارا است.
در واقع کاربر خریدار اطلاعات کتاب مدنظر خود، از جمله نام آن کتاب و قیمت مدنظر خود را در اختیار عامل خریدار قرار داده و او را موظف بر یافتن این کتاب با پایینترین قیمت میکند.
عامل خریدار اطلاعات کتاب درخواستی را برای تمام عاملهای فروشنده ارسال میکند و در ادامه هر کدام از عاملهای فروشنده دیتای کتاب درخواست شده را در دیتابیس خود جستجو میکنند و بسته به تناسب کتاب درخواستی با دیتایی که در اختیار دارند، میتوانند درخواست عامل خریدار را پذیرفته و یا رد کنند (لازم به ذکر است که هر عامل فروشنده یک رابط گرافیکی ساده دارد که فروشندگان کتاب میتوانند با استفاده از آن دیتای مربوط به کتابها مانند نام کتاب و قیمت آنها را در دیتابیس مربوط به هر عامل ذخیره کنند.)
حال اگر Agent (عامل) فروشنده درخواست عامل خریدار را پذیرفته باشد، به عامل فروشنده اطلاع میدهد و چنانچه بیش از یک عامل فروشنده درخواست عامل خریدار را پاسخ داده باشند یا به عبارتی چندین کتاب متناسب با مشخصات کتاب درخواستی عامل خریدار در دیتابیس عاملهای فروشنده موجود باشد، عامل خریدار از میان پاسخهای دریافتی، مناسبترین پاسخ را انتخاب کرده و کار خرید کتاب به پایان میرسد. نیاز به توضیح نیست که عاملهای فروشنده برای پذیرفته شدن پاسخ خود از سمت عامل خریدار بایستی با یکدیگر به رقابت بپردازند اما در نهایت تمام این عاملها برای تحقق هدف نهایی سیستم تلاش میکنند که همان یافتن کتابی با قیمت مناسب برای کاربر است.
در ادامه به منظور پیادهسازی و تعریف این عاملها نیاز داریم تا ابتدا کلاس آمادۀ BookTrading که با زبان جاوا نوشته شده است، کامپایل شود که این کار را در مقالۀ دوم انجام دادیم و برای کسب اطلاعات بیشتر، میتوانید به آن مقاله مراجعه کنید.
حال فرض کنیم که این کلاسها را کامپایل کردیم که در این در صورت، فایلهایی با پسوند class. در پوشۀ examples موجود خواهند بود.
در این مرحله و پس از کامپایل مثالهای مذکور، از کامپایلر جاوا میخواهیم تا مثال BookTrading را برای ما اجرا کند و به این منظور دستوری به شرح زیر را در خط فرمان وارد میکنیم:
java -cp lib\jade.jar;classes jade.Boot -gui
در واقع با این دستور از کامپایلر جاوا میخواهیم که کلاس BookTrading را اجرا کرده و آن را در قالب یک به اصطلاح GUI (مخفف Graphical User Interface و به معنای رابط کاربری گرافیکی) برای ما نشان دهد. با اجرای دستور فوق در این مرحله یک رابط کاربری گرافیکی را خواهیم داشت.
این رابط کاربری شامل یک به اصطلاح Main Container هست که خود این کانتینر نیز دو عامل تحت عناوین زیر را شامل میشود:
- عامل Agent Management System یا به اختصار AMS که برای سرویسهایی مانند نامگذاری عاملها، ساخت و همچنین از بین بردن برخی عاملها در نظر گرفته شده است.
- عامل Dictionary Facilitator یا به اختصار DF که برای فراهم کردن یک فرآیند ارتباطی بین عاملها استفاده میشود.
در ادامه به منظور تعریف عاملهای خریدار و فروشنده، روی کانتینر AgentPlatform راست کلیک کرده و روی گزینۀ Start New Agent کلیک میکنیم و پنجرهای با عنوان Insert Start Parameters باز خواهد شد که در فیلد مربوط به Agent Name یک نام دلخواه برای عامل - مانند Seller1- انتخاب میکنیم و با کلیک در فیلد Class Name مجموعهای از انواع کلاسها نمایش داده خواهند شد که در این مورد بایستی کلاسی از نوع Seller را انتخاب کنیم و برای این منظور ما کلاسی تحت عنوان examples.bookTrading.BookSellerAgent را انتخاب خواهیم کرد.
پس از انتخاب نام کلاس روی دکمه OK کلیک میکنیم. در ادامه پنجرهای باز خواهد شد که اطلاعاتی از جمله نام کتاب و قیمت آن را از ما درخواست میکند.
در رابط گرافیکی مربوط به عامل فروشنده که Seller1 نام دارد، دیتای مربوط به کتاب از جمله نام آن کتاب و قیمت را وارد میکنیم و با کلیک روی دکمه Add آن را به دیتابیس این عامل میافزاییم. به همین ترتیب هر چند تعداد کتاب که مدنظرمان باشد را میتوانیم به این عامل اضافه کنیم.
برای مثال ما دو کتاب با عناوین Book1 و Book2 و قیمتهایی به ترتیب 5000 و 1000 تعریف میکنیم.
همچنین به روش فوق میتوانیم یک Seller Agent دیگر نیز تعریف کرده و دیتای چند کتاب دیگر را به دیتابیس این عامل وارد کنیم. در این مورد نیز فرض کنید که دو کتاب با همان عناوین (Book1 و Book2) و قیمتهای به ترتیب 4950 و 950 را به دیتابیس عامل فروشندۀ دوم (Seller2) اضافه میکنیم؛ بنابراین دو عامل فروشنده ایجاد کردهایم و برای هر عامل نیز دو کتاب با قیمتهای مشخص تعریف کردهایم.
حال نوبت به تعریف عامل خریدار میرسد که این عامل قرار است تا از میان کتابهای موجود در دیتابیس عاملهای فروشنده، کتابی با پایینترین قیمت را برای کاربر خریداری کند.
برای تعریف این عامل نیز به روش فوق عمل خواهیم کرد و در پنجرۀ مربوط به تعریف عامل، در فیلد Agent Name یک نام دلخواه همچون Buyer را وارد میکنیم و در فیلد Class Name نوع کلاس مربوط به این عامل را بایستی از نوع Buyer و با عنوان examples.bookTrading.BookBuyerAgent انتخاب کنیم. همچنین در فیلد Argument نام کتابی را وارد میکنیم که قصد داریم تا عامل خریدار آن را برای ما خریداری کند.
با کلیک روی دکمۀ OK فرآیند جستجوی عامل خریدار برای یافتن کتاب مدنظر کاربر آغاز میشود و این فرآیند بدین صورت است که نام کتاب برای تمام عاملهای فروشنده ارسال میشود و عاملهای فروشنده کتاب را در دیتابیس خود جستجو میکنند و در صورت وجود چنین کتابی به عامل خریدار پاسخ خواهند داد. عامل خریدار نیز از میان پاسخها، کتابی با مناسبترین قیمت را انتخاب خواهد کرد و کار خرید کتاب در اینجا به پایان میرسد؛ در نهایت خواهیم دید که کتابی تحت عنوان Book1 با قیمت فرضی 4950 به عامل خریدار تعلق گرفته است.