معمولاً برای برنامه نویسی نرم افزارهای مبتنی بر Machine Learning از Python استفاده می شود، چرا که ساختار Python یک ساختار خطی ساده و بدور از پیچیدگی هایی نظیر Object Oriented است و به همین واسطه طرفداران زیادی دارد. باز به واسطه همین طرفدارها معمولاً Library های مبتنی بر مباحث علمی برای این زبان توسعه داده می شود چرا که عموماً متخصصان در عرصه های مختلف بدون دانستن تکنیک های پیشرفته برنامه نویسی سعی در آزمون و خطای نظریه خود دارند.
اما این باعث نمی شود که فکر کنیم استفاده از سایر زبان ها مانعی برای Machine Learning است و افراد بسیاری سعی در Port کردن Library های مفید برای هر زبانی دارند چه برسد که آن زبان جاوا یا کاتلین باشد.
از آنجاییکه برای من تکنیک های برنامه نویسی و ساختار اصولی با قابلیت Code Reuse در درجه اول اهمیت قرار دارد، پس زبان Kotlin را که می تواند مشترکاً برای توسعه نرم افزار های Javascript, Android/Java (JVM ) مورد استفاده قرار گیرد انتخاب کردم. همینطور این موضوع بهانه ای است برای شخم زدن بیشتر Kotlin و بررسی های عمیقتر و تکنیکی تر.
- در ابتدا برای تست استفاده از Canvas در HTML5 تصمیم به برنامه نویسی بازی FlappyBird با استفاده از Kotlin گرفتم که می تواند الگوی آکادمیک و مناسبی برای توسعه یک Machine Learning ابتدایی باشد.
- سپس با تغییراتی در آن، بجای بازی Single Player، امکان بازی کردن توسط چند پرنده همزمان را ایجاد کردم.
- سپس با ساختار شبکه های عصبی ( Neural Network ) را برای آنها پیاده سازی کردم و همه چیز خوب کار کرد.
- سپس از ساختار پیاده شده برای Canvas و HTML5 یک موتور بازی اختصاصی بر پایه Canvas ساختم و بازی Flappy Bird را مجدداً با آن سازگار کردم. این موتور قابلیت استفاده بسیار راحت در سایر پروژه ها را خواهد داشت.
- سپس شبکه های عصبی پیاده شده را تفکیک کردم و یک Library جهت استفاده مشترک در JVM و Javascript برای Neural Network و Genetic Algorithm ایجاد کردم و سورس را بر پایه آن مرتب سازی کردم.
در نهایت بعد از انجام این پروژه عوارض جانبی سودمندی بدست آمد:
- فراگیری عمیقتر Machine Learning, Neural Network, Genetic Algorithm به طوریکه از هیچ Library واسطه ای استفاده نشده و همه با تحلیل شخصی به عنوان یک Library جدید برنامه نویسی شده است.
- توسعه یک Library جهت انجام عملیات ماتریسی که به ندرت در سورس های اینترنتی قابل مشاهده می باشد.
- توسعه یک موتور بازی به نسبت کامل برای HTML5 با استفاده از Canvas
- توسعه بازی Flappy Bird
- و در نهایت تسلط بیشتر بر توسعه Kotlin
روش پیاده سازی پروژه فعلی از نظر توسعه بازی و هوش آن، بسیار متفاوت از پروژه های Open Source اینترنت است
دموی واقعی از پروژه