مقایسه سرعت اجرای دستورات شرطی در Android

  • فکر میکنید سرعت اجرای دستورات شرطی در android چه تفاوتی با یکدیگر دارد؟!
  • کدام دستور بیشترین و کدامیک کمترین زمان را مصرف خواهند کرد؟!

در این پست میخواهیم مقایسه ای بین سرعت اجرای سه دستور شرطی If، Switch و عملگر سه گانه (Ternary) داشته باشیم. البته با توجه به استفاده از جاوا در اندروید، شاید بهتر بود که عنوان این پست را مقایسه دستورات شرطی در جاوا، نامگذاری کنیم، اما از آنجا که کل عملیات برای اجرا در موبایل و در محیط Android Studio اتفاق افتاده است، نام فعلی را انتخاب نمودم.

Android (ادامه مطلب…)

نظر بدهید : ادامه...

روش استفاده از کتابخانه های AAR در Android

با ارائه سیستم Gradle در Android Studio، پیشرفتهای زیادی در روش build پروژه ها بوجود آمده که تا حد زیادی در زمان مورد نیاز صرفه جویی میشود. از جمله این موارد میتوان به Build Flavor ها اشاره کرد که در آینده مطالبی در مورد آنها خواهم نوشت.

اما، موضوع این پست استفاده از کتابخانه های AAR است.

gradle (ادامه مطلب…)


بررسی جایگاه root و stage در Flash و AS3

stage شئ واحدی است که در هر فایل swf، به عنوان دربرگیرنده اصلی محسوب شده و تمام اشیاء و تصاویر دیگر، درون لیست نمایش آن ترسیم خواهند شد.
اما شئ دیگری به نام root نیز وجود دارد که مستقیماً به Timeline اصلی انیمیشن اشاره دارد. به عبارت ساده‌تر، شئ root که در AS2.0 به صورت _root مورد ارجاع قرار می‌گرفت، یک DisplayObjectContainer است که به صورت پیش‌فرض در عمق صفر از شئ stage قرار دارد.
به صورت پیش‌فرض، تمام ترسیماتی که بر روی صفحه انیمیشن فلش صورت می‌گیرد، به جای اینکه مستقیماً در لیست نمایش stage باشد، در شئ root انجام می‌شود. به عبارتی تمامی اشیاء و محتوای انیمیشن فلش، زیر مجموعه شئ root هستند که یک DisplayObjectContainer پیش‌فرض و در عمق صفر از شئ دربرگیرنده stage قرار دارد.
مثال:

trace(stage,  root);    
// Output: [ object Stage] [ object MainTimeline]

نکته‌ای که باید در مورد شئ root به آن توجه شود این است که برای فراخوانی متدها یا استفاده از خصیصه‌های آن، نمی‌توان مستقیماً از کلمه root استفاده نمود، بلکه باید صراحتاً نوع آن در پرانتز ذکر گردد(انتصاب نوع پویا).

مثال 1: دستور اول منجر به بروز خطا می‌گردد، اما دستورات بعدی به درستی اجرا خواهند شد.

root.addChild(sh);     //error

Object(root).addChild(sh);
MovieClip(root).addChild(sh);
DisplayObjectContainer(root).addChild(sh);

مثال2 : تفاوت شئ root و stage:

trace(stage is Object, root is Object);		
// Output: true    true
trace(stage is MovieClip, root is MovieClip);		
// Output: false  true
trace(stage is Sprite, root is Sprite);			
// Output: false  true
trace(stage is DisplayObject, root is DisplayObject);	
// Output: true    true
trace(stage is DisplayObjectContainer, root is DisplayObjectContainer);	
// Output: true   true

دستور is در مثال بالا، نوعی عبارت منطقی به وجود آورده که تعلق یک شئ را به یک کلاس والد، بررسی می‌نماید.


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

به طور کلی نمودار ذیل، مراحل اجرای الگوریتم ژنتیکی را نمایش میدهد:

ga-shams

حال با توجه به نمودار گردش کار، مراحل کار الگوریتم را به این شکل بیان می‌کنیم:

1. با توجه به نوع مسئله و ساختار پاسخ‌های قابل قبول برای آن، ساختار کروموزومها را مشخص می‌سازیم. معمولاً یک راه‌حل مسئله، به صورت لیستی از متغیرهای مسئله نشان داده می‌شود که در اینجا نیز می‌توان آن را به صورت یک آرایه عددی نمایش داد.

2. تابع ارزیابی (Fitness function) مناسبی جهت ارزیابی کروموزومها (پاسخ‌ها) طراحی می‌کنیم. این مرحله اهمیت بسیار زیادی دارد، چرا که اگر نتوان تابعی مناسب جهت ارزیابی کروموزومهای تولید شده در نسلهای مختلف طراحی نمود، به هیچ وجه نمی‌توان مسئله مور نظر را با استفاده از الگوریتم ژنتیک حل کرد.

3. مقادیر پارامترهای اولیه الگوریتم را با توجه به صورت مسئله تعیین می‌کنیم. مهمترین پارامترهای مورد استفاده عبارتند از، اندازه جمعیت اولیه (N)، احتمالات مربوط به انتخاب (P­S)، ترکیب (PC)، جهش (PM)، ابقاء (PR) و همگرایی (PCN)، نوع انتخاب و نوع عملگرهای ترکیب و جهش.

4. یک جمعیت تصادفی با N کروموزوم تولید می‌شود. N اندازه جمعیت یا تعداد اعضای نسل آغازین بوده و هر کروموزوم نماینده یک جواب برای مساله است.

5. با استفاده از تابع ارزیابی، کیفیت تمام کروموزومهای این نسل را محاسبه و ذخیره می‌نماییم.

6. با توجه به مقدار کمیت درصد انتخاب (P­S)، جفت کروموزومهایی را به عنوان والدها انتخاب می‌کنیم. روند انتخاب والدها با استفاده از مقادیر ذخیره شده تابع ارزیابی انجام می‌گیرد.

7. هر جفت از والدها، با توجه به مقدار احتمال ترکیب (PC)، با یکدیگر ترکیب شده و یک یا دو کروموزوم فرزند تولید می‌کنند.

8. هر کروموزوم فرزند، با توجه به مقدار احتمال جهش (PM)، جهش می‌یابد.

9. با توجه مقدار احتمال ابقاء (PR)، تعدادی از فرزندان برای جایگزین شدن در نسل جدید انتخاب شده و مابقی نسل جدید از کروموزومهای نسل قبلی انتخاب می‌گردند، سپس نسل جدید به جای نسل قبلی در برنامه جایگزین می‌شود.

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


مزایا و معایب الگوریتم ژنتیک

از مزایای GA در مقایسه با دیگر روشهای جستجو می‌توان به این موارد اشاره نمود:

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

با وجود تمام مزایا، مهمترین مشکل GA بالا بودن هزینه اجرایی آن است. چرا که معمولاً برای حل مسائل، نیاز به نگهداری چندصد کروموزوم در حافظه و اجرای الگوریتم تا چندهزار نسل خواهد بود. البته باید به خاطر داشت که GA یک الگوریتم متاهیوریستیک بوده و مدت زمان مورد نیاز برای اجرای آن در مقایسه با روشهای سیستماتیک، خیلی کمتر و بهینه‌تر است.

کاربرد اصلی الگوریتم‌های ژنتیک، حل مسائل بهینه‌سازی است، اما در واقع از این الگوریتم‌ها می‌توان در حل بهینه هر نوع مسئله‌ای که در فضای GA قابل پیاده‌سازی باشد استفاده نمود.

به عنوان مثال:

  • حل مسائل تصمیم‌گیری چند متغیره (Multi-objective problems).
  • الگوریتم‌های مسیریابی (Routing).
  • انواع مسائل مربوط به برنامه‌ریزی و زمانبندی (Scheduling).
  • انواع مسائل بسته‌بندی و تقسیم‌بندی (Partitioning) بهینه.
  • آموزش شبکه‌های عصبی مصنوعی (Artificial Neural Networks) و سیستمهای فازی (Fuzzy systems).
  • بهینه‌سازی طراحی مدارات الکترونیکی (VLSI).
  • بهینه‌سازی ساختارها و ترکیبات شیمیایی.
  • اجرای موازی الگوریتم بر روی سیستمهای چند پردازنده یا توزیع شده.
  • نرم‌افزارهای شناسایی و تشخیص الگو (Pattern recognition).
  • انواع الگوریتم‌های مورد استفاده در صنعت رباتیک.
  • دسته‌بندی (Classification) داده‌ها، داده‌کاوی (Datamining)  و یادگیری ماشین (Machine learning).
  • الگوریتم‌های بکار رفته در انواع بازی‌های کامپیوتری.
  • برخی از الگوریتم‌های پردازش تصاویر (Image processing).
  • انواع محاسبات عددی و روشهای تخمین توابع.
  • سیستمهای شبیه‌سازی حیات مصنوعی (Artificial life).
  • ساخت سیستمهای هوشمند تولید برنامه‌ تکاملی.


  • آرشیو:

  • .
    Copyright (c) 2010 www.mshams.ir