نمای سوم نمای مولفه‌ای[۹۹] است که در آن مولفه‌های نرم افزاری و محل استقرار[۱۰۰] آنها مشخص می‌شود. با توجه به اینکه مدل ارائه شده در این پژوهش روی سیستم‌های توزیع‌شده مستقر می‌شود، و اصولا این مدل تعیین گرایش در بلاگستان را با نگاه به سیستم‌های توزیع‌شده حل می‌کند، نگرانی‌هایی که پیرامون مقیاس‌پذیری در سیستم‌های توزیع‌شده وجود دارد با نمای مولفه‌ای واضح‌تر پاسخ داده می‌شود.
نمای منطقی
نمای منطقی مدل، توصیف‌گر روابط منطقی و ریاضی است که به وسیله‌ی آنها پردازش اصلی روی داده انجام می‌شود. همانگونه که پیشتر به آن اشاره شد، در این پژوهش مدلی مبتنی بر الگوریتم PSO ارائه می‌شود که به وسیله‌ی آن گرایشات کاربران در محیط بلاگستان استخراج شود.
مسائل اساسی PSO
در فصل دوم با الگوریتم PSO و نحوه‌ی کارکرد آن آشنا شدید. در این الگوریتم برای آنکه ذرات[۱۰۱] بتوانند همراه با Swarm به سمت نقطه‌ی بهینه حرکت کنند باید پیش از اجرای الگوریتم با یکدیگر از نظر مقدار داده‌ای هم‌تراز[۱۰۲] شوند. این عمل در واقع در گام initialization رخ می‌دهد.
پایان نامه - مقاله - پروژه
قبل از این اشاره کردیم که اگرچه دقت الگوریتم PSO 3 برابر الگوریتم کلونی مورچه است اما کارایی آن کمتر است و یکی از مسائلی که باعث کاهش کارایی الگوریتم PSO می‌شود همین مسئله Initialization است [۲۵].
الگوریتم‌هایی مانند کلونی مورچه و PSO ، برای یافتن مقادیر بهینه در فضاهای نمونه‌ی بزرگ طراحی شده‌اند، که پیمایش کل فضای حالت با الگوریتم‌های سنتی زمان‌بر است. همچنین مقادیر بهینه‌ای که این الگوریتم‌ها تولید می‌کنند برای یک مجموعه‌ی داده‌ای خاص است و اگر مجموعه‌ی داده‌ای تغییر کند باید مقدار بهینه مجدد محاسبه گردد.
شکل۳‑۱- محاسبه‌ی مقدار بهینه به طور مداوم
در چنین شرایطی (شکل ۳-۱) چون الگوریتم به تعداد بسیاز زیاد (و احتمالا برای حجم داده زیاد ) فراخوانی می‌شود، بسیار مهم است که گامهای الگوریتم چگونه طراحی شوند و در حد امکان کارهای تکراری حذف شده و گام‌های پیچیده‌ی الگوریتم که توان محاسباتی زیادی نیاز دارند حتی‌الامکان ساده شوند. در الگوریتم PSO گامی‌که مربوط بهinitialize کردن ذرات است بدون توجه به باقی گامهای الگوریتم هر بار برای همه‌ی داده‌ها اجرا می‌شود.
از طرفی یکسان کردن ذرات در ابتدای الگوریتم، نیازی اساسی برای ایجاد شرایط قابل پیش‌بینی در فضای حالت مسئله است. اساسا در الگوریتم PSO پارامترهای ثابت r1 و r2 که به شکل تصادفی باید انتخاب شوند برای حالتی تولید شده‌اند که در آن ذرات در گام اول initialize شده‌اند و پیدا کردن مجدد این پارامترها، برای تولید حالت بهینه، به ازای مقادیر مختلف ذرات بسیار پرهزینه است. بنابراین در حالت سنتی الگوریتم PSO، نمی‌توان بدون پرداخت هزینه‌ی زمانی و پردازشی زیاد گام initialize را حذف کرد.
اما اگر با دقت به الگوریتم PSO نگاه کنیم واضح است که مهم‌ترین تاثیر گام initialize هنگامی‌که است که قرار است fitness value برای آن محاسبه شود. در این مرحله اگر مقدار r1 و r2 بر اساس مقدار اولیه‌ی ذره محاسبه نشده باشد، جواب بهینه حاصل نخواهد شد و اگر بر اساس مقدار اولیه‌ی ذره باشد باید قبلا آنرا initialize کرده باشیم.
اما همانطور که بیان شد در محیط برخی سیستم‌ها الگوریتم‌های یافتن مقدار بهینه به دفعات اجرا می‌شوند. بنابراین می‌توان از تکرار‌های قبلی Initialize استفاده کرد به شرطی که ذرات Initialize شده جایی در حافظه نگه‌داری شوند. بدین ترتیب می‌توان گام initialize را تنها برای ذراتی که برای اولین بار به مجموعه‌ی داده اضافه شده‌اند انجام داد و عملا کارایی الگوریتم را افزایش داد.
اما در محیط بلاگستان که روزانه بالغ بر چند ده میلیون پُست وبلاگ در آن منتشر می‌شود[۲۶] و نیاز است که گرایش کاربران به صورت بلادرنگ[۱۰۳] تولید شود نگه‌داری اطلاعات همه ذرات بسیار هزینه‌بر است. فرض کنید اگر اطلاعات هر پست وبلاگ ۱MB باشد[۲۷] ، به کامپیوتری با ۱۰TB حافظه اصلی نیاز است - فقط برای نگه‌داری این داده‌ها برای یک روز- به این معنی که استخراج گرایش مبتنی بر روزهای پیشین نیز نخواهد بود که عملیاتی بسیار پر هزینه است.
چنین حجمی‌از حافظه اصلی تنها توسط اشکال مختلف سیستم‌های توزیع‌شده قابل دسترسی است و هیچ MainBoard وجود ندارد که بتوان در آن ۱۰TB حافظه اصلی قرار داد و حتی اگر کامپیوتری با این حجم از حافظه اصلی وجود داشته باشد گذرگاه[۱۰۴] مناسبی برای عبور دادن این حجم از داده به صورت آنی وجود ندارد. در اینجا نیاز به اجرای الگوریتم روی کامپیوترهایی با تعداد بیشتر و یک بستر پردازشی توزیع شده بیشتر نمایان می‌شود. بنابراین به بیش از یک ایستگاه کاری[۱۰۵] و یا سرور[۱۰۶] برای پردازش این حجم از داده نیازمندیم که در این به هرکدام یک نود پردازشی می‌گوییم.
اصلاح PSO بر اساس مسئله
بنابراین نیاز است که اولا اطلاعات ذراتی که initialize شده‌اند در جایی نگه‌داری شود تا در تکرارهای[۱۰۷] بعدی الگوریتم مجددا محاسبه نشوند، ثانیا این عمل باید توسط تعدادی کامپیوتر انجام شود تا محدودیت‌های فیزیکی که در حال حاضر با آنها مواجه هستیم برطرف گردد. به تعبیر دیگر الگوریتم‌ باید به صورت توزیع شده اجرا شود. به همین منظور الگوریتم سنتی PSO که در شبه کد (۱) آورده شد به صورت زیر بازنویسی می‌شود:
If there is new element in CAQ
For each new element
initialize particle
END
DO
For new particle (new post)
Calculate fitness value
If the fitness value is better than the best fitness value (pBest) in history
set current value as the new pBest
End
Send the particle with best fitness value to Aggregator
Choose the particle with the best fitness value of all the particles as the gBest
For each particle
Calculate particle velocity according equation (a)
Update particle position according equation (b)
End
End
v[] = v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) (a)
present[] = persent[] + v[] (b)
در این شـبـه کد دو مفهـوم جـدیـد برای پاسـخ دادن به نیازهای مطرح شده معرفی شده‌اند: ۱) CAQ 2) Aggregator . CAQ که مخفف Change Aware Queue است یک ساختار داده جدید است که وظیفه دارد داده‌های جدید را از داده‌های تکراری تشخیص دهد و اصول درج[۱۰۸] و حذف[۱۰۹] از آن بر مبنای ساختار داده‌ی صف است. یک CAQ در واقع صفی از داده است که قابلیت تشخیص داده‌های جدید را دارد و الگوریتم PSO در گام initializeاز طریق این ساختار داده ذراتی که به تازگی به فهرست اضافه شده‌اند را دریافت کرده و تنها آنها را initialize می‌کند تا در تکرار‌‌های مکرر الگوریتم ‌همه‌ی داده‌ها چندین بار Initialize نشوند. در ادامه در همین بخش بیشتر به جزئیات CAQ خواهیم پرداخت.
مفهوم دیگر یعنی Aggregator نقش هماهنگ کردن نتایج تولید شده در الگوریتم را دارد. شبه کد فهرست شده در فهرست کد (۲) به صورت مستقل در کامپیوتر‌های مختلف اجرا می‌شود و هر کدام نتایج را برای Aggregator ارسال می‌کنند. یعنی هرکدام گرایش تولید شده براساس‌ داده‌های خود را محاسبه کرده و برای Aggregator ارسال می‌کنند. Aggregator نیز همان الگوریتم را روی داده‌های ورودی اعمال می‌کند تا محبوب‌ترین گرایش‌ها مشخص شوند. (شکل ۳-۲)
شکل۳‑۲ روند کاری Aggregator
هر پُست وبلاگ زمانی که وارد سیستم می‌شود با یک روال گردشی-چرخشی[۱۱۰] به یکی از CAQ‌های موجود در سیستم هدایت می‌شود. هر CAQ به یک مجموعه از ذرات متصل است که در اینجا به آن agent set می‌گوییم. هر agent set در یازه‌های زمانی با طول W ثانیه یک snapshot را از CAQ میخواند و در آن snapshot مشخص است که اعضاء جدید صف کدامند.
داده‌های موجود در این snapshot طبق شبه‌کد موجود در فهرست کد (۲) در الگوریتم PSO پردازش می‌شوند و هر agent set با توجه به داده‌های خود آخرین گرایش عمومی‌را پیدا کرده و برای aggregator ارسال می‌کند.
CAQ
در قسمت قبل بیان کردیم که CAQ وظیفه دارد داده‌های جدیدی که به آن وارد می‌شوند را تشخیص داده و بر اساس نیاز الگوریتم PSO آنها را قابل دسترس نماید. همانطور که در شکل ۳-۲ مشاهده می‌کنید هر مجموعه از الگوریتم دارای یک (یا می‌تواند چند) CAQ باشد. در هر تکرار از الگوریتم کل CAQ به صورت یک تراکنش[۱۱۱] وارد الگوریتم می‌شود و مرحله initialize تنها روی داد‌های جدید رخ می‌دهد. اگر فرض کنیم:
T: پنجره‌ی زمانی که قرار است گرایش عمومی‌برای آن استخراج شود با واحد ثانیه. برای مثال اگر بگوییم گرایش عمومی‌بلاگستان در ۳ روز گذشته حوزه Computer Network است آنگاه T = 3*24*60*60
B: تعداد پست‌های وبلاگ منتشر شده در دوره‌ی زمانی T
I: تعداد تکرارهای الگوریتم در بازه‌ی زمانی T. مقدار این پارامتر بیشتر وابسته به نیاز کاربر است.
R: تعداد ذراتی که Initilize‌های تکراری دارند.
فرض می‌کنیم که توزیع تولید پست در واحد زمان یک توزیع نرمال است. بنابراین اگر از شکل استاندارد الگوریتم PSO استفاده کنیم مقدار R برابر خواهد بود با:

موضوعات: بدون موضوع  لینک ثابت


فرم در حال بارگذاری ...