Archive for 2012/08

مسابقه ایرانی هوش مصنوعی

۱۳۹۱/۰۶/۰۹ ۱۱:۴۵ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۹۱/۰۶/۰۹ دسته بندی : ، ، 4

مسابقات آنلاین شبیه سازی و برنامه نویسی که اخیرا راه اندازی شده است بر روی هوش مصنوعی تاکید دارد. این مسابقات به صورت دوره ای و آنلاین برگذار می شود و برای برندگان نیز جایزه هایی تعیین شده است.
دور اول مسابقه موش پنیر یاب است که برنامه نویس باید با استفاده از پکیج های آماده شده الگوریتم خود را در زبان برنامه نویسی منتخب خود پیاده کرده و مسائله را سریعتر از رقیب خود حل کند.
نمایی از مسابقه در حال اجرا:
با توجه به بسته های شروع موجود آغاز کار بسیار ساده است. با استفاده از همه معلومات داده شده به روبات مانند موقعیت پنیرها ، دیوارها و رقیب و با به کار گیری از بهینه ترین روشها و الگوریتمها باید سریع تر از رقیب پنیر و امتیاز بیشتری بدست آورد.
در نگاه اول مسئله بسیار ساده می رسد و با توجه به اینکه هیچ مجهولی نداریم به ظاهر با استفاده از یک الگوریتم (مانند A-Star) می توان به نتیجه رسید. اما همینجا است که الگوریتم های بهینه سازی نتیجه، کاربرد پیدا می کنند و شما باید در هر لحظه سعی کنید با پیش بینی ها بهترین مسیر را انتخاب کرده و بیشترین پنیر را بدست آورید.

به قولی معروف: ما روباتهایی باهوش درست نمی کنیم، ما سعی دارین روباتهایی درست کنیم که کمتر احمق باشند.

جوایزی که برای مسابقه (یا دوره مسابقات؟) در نظر گرفته شده (100 هزار تومان برای نفر اول و... است) که برای یک چنین مسابقه ای اغوا کننده هستند. اما چندین ابهام و اشکال در این میان وجود دارد.
با توجه هزینه ها و جوایز هیچ تبلیغاتی روی آن صورت نگرفته(تا آنجایی که می دانم) و این جای شک را ایجاد می کند که آیا واقعا قادر به پرداخت هستند؟ (با توجه به پاسخ سوالی که به من در فروم دادند تمام هزینه به صورت شخصی بر عهده شخص متولی است)
مسئولین و متولیات معرفی نشده اند. با توجه به چنین ایده و کار جالبی، چرا نباید خود را معرفی کنند؟ عدم معرفی به نظر مخفی کار می رسد!
امیدوارم متولیان به این موارد رسیدگی کنند. گرچه تا اینجای کار و راه اندازی سایت و مسابقه کم کاری هم نبوده است.

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

یکی از اشکالات عمده ای که سایت فعلا دارد، مدت زمان کامپایل کد و انجام مسابقه است. این مدت معمولا 1 تا 3 روز طول می کشد که ناراحت کننده است. (با توجه به مشکلات کامپایل که ممکن است پیش بیاید)

نکته مهم: لطفا در چنین مسابقاتی هیچ وقت بسته های پیش فرض را آپلود نکنید. این بسته ها هیچ الگوریتمی ندارد و به طور تصادفی حرکت می کنند. با این کار فقط وقت و حجم سرور را هدر داده اید.

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

 

SalarDbCodeGenerator نسخه 2 و NHibernate

۱۳۹۱/۰۶/۰۳ ۱۴:۲۸ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۹۱/۰۶/۰۳ دسته بندی : ، 1

در پست قبلی با SalarDbCodeGenerator آشنا شدید. در این پست می خواهیم نسخه 2 این نرم افزار رو به طور خلاصه بررسی کنیم.
برخی از تغییرات مهم نسخه 2:
  • الگوی جدید NHibernate MappingByCode (پشتیبانی از MVVM و data annotations)
  • الگوی جدید Dapper+SQLinq که از کتابخانه SQLinq و توابع کمکی در Dapper استفاده می کنه
  • باز نویسی مجدد موتور شمای الگوها
  • بازنویسی مجدد موتور اصلی
  • شمای جدید پروژههای برنامه
  • به روز شدن همه الگوها
  • بهبود سرعت کلی تولید کد
  • خواندن و شناسایی اعمال کلید خارجی
  • پشتیبانی از توضیحات ستون ها در oracle و sqlCe
و البته پروژه های نسخه 1 توسط این نسخه پشتیبانی نمی شود.
لیست کامل تغییرات در صفحه دانلود قرار دارد.

نگاهی به پیاده سازی NHibernate MappingByCode انجام شده.
پیاده سازی نگاشتها بدون استفاده ClassMapping و صرفا با استفاده از کلاس کمکی ModelMapper انجام شده است. این متد کمکی در فایل SampleDbMapper قرار می گیرد.
همچنین برای پیاده سازی های سفارشی متد دیگری با نام CustomMapToModel در نظر گرفته شده است.
در کل ساختار پروژه به این صورت می شود:

Base\SampleDbBase.cs
Entities\DataAnnotations\*Meta.cs
Entities\UserEntities\*Entity.cs
Entities\Principal\EntityObjects.cs
Entities\SampleDbMapper.cs
Entities\SampleDbMapper.User.cs
Entities\SampleDbSession.cs
app.config
تقریبا ساختار بیشتر پروژه های تولید شده توسط این برنامه به همین شکل است. به همین منوال بقیه، کلاس پایه SampleDbBase.cs شامل چند متد اضافی هست که به تهیه کپی از کلاسهای مدل کمک می کند. از جمله متدهای CloneUnproxied و CopyUnproxied که یک نمونه بدون پراکسی را تهیه می کنند.
طریقه استفاده از این پروژه ساده است. با استفاده از کلاس کمکی SampleDbSession یک نمونه از session را ایجاد کرده و بقیه اعمال را به منوال عادی NHibernate انجام می دهیم:

using (var session = SampleDbSession.OpenSession())
{
    var newCar = new Car()
        {
            Color = "white"
        };
    session.Save(newCar);
    session.Flush();
}
using (var session = SampleDbSession.OpenStatelessSession())
{
    dataList = session.Query<car>().Where(x => x.Color == "white");
}

نگاهی به Dapper+SQLinq
این الگو همانند الگوی DapperAccess است که کتابخانه SQLinq به آن اضافه شده است. این کتابخانه این امکان را برای Dapper فراهم می کند که با استفاده از عبارات LINQ کوئری مورد نظر بدون استفاده مستقیم از عبارات sql عملیات استاندارد را انجام دهد. ترکیب Dapper و این کتابخانه راحتی و سرعت قابل قبولی را فراهم می کند.
این کتابخانه فقط از SqlServer پشتیبانی می کند.

نمونه کد:

using (var dap = new CarDap())
{
    dataList = dap.Query(new SQLinq<car>().Where(x => x.Color == "white"));
}

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

همچنین برای نسخه های آینده احتمالا بر روی ویژگی های جدید EF5 کار خواهم کرد (پشتیبانی از Enum و Table-Valued).

نظر شما چیست؟ چه ویژگی به نظرتون حیاتی است و می خواهید در نسخه بعدی مشاهده کنید؟

دانلود