/Round2

Codes and Resources for Round2 of !Optimizer competition @ Sharif University

Primary LanguageJupyter Notebook

Optimizer logo

تیم اسپارک

📝 فهرست مطالب

🧐 صورت‌بندی سوال

صورت برنامه‌ریزی :

$$min ||v||_0 s.t. Sv=0 l <= v <= u$$

تابع نرم صفر یک تابع غیر محدب و ناپیوسته است و میتوان نشان داد که برنامه ریزی بالا

NP-hard
است. پس تابع هدف را با تابع نرم یک جایگزین میکنیم. در این قسمت برای نشان دادن قدر مطلق در تابع عدف از دو قید معادل استفاده میکنیم: $$min a_1 + a_2 + ... + a_n s.t. Sv=0 l <= v <= u a >= v a >= -v$$

با پیاده سازی این بخش در جومپ میتوان به یک جواب شدنی رسید. اما برای بیشتر کردن تعداد سطر های صفر دو روش مختلف به کار گرفتیم :
روش اول : وزن دار کردن تابع هدف و به روز رسانی وزن ها
ایده‌ی کلی این است که هر درآیه از بردار تابع هدف را وزن دار کنیم و با بزرگ شدن اندازه‌ی آن بردار وزن متناظر با آن را آپدیت کنیم به گونه ای که اثر درآیه ها بزرگتر در تابع هدف کمتر شود. این ایده در
این مقاله بررسی شده است.
روش دوم : استفاده از خروجی قسمت قبل و اضافه کردن سطر های صفر شده به عنوان قید به تابع هدف.
این ایده توسط متین امینی مطرح شد و تعداد سطر های صفر را کمی افزایش داد.

💡 الگوریتم بهینه‌سازی

روش ها و رفرنس در بخش قبلی ذکر شدند.

⛓️ محدودیت‌ها

محدودیتی در این بخش وجود ندارد و با نصب پکیج های مورد نظر میتوان یک جواب شدنی برای هر ۳ ورودی مسابقه به دست آورد.

🚀 ایده‌های گسترش

در ایده‌ی آپدیت کردن وزن ها شاید بتوان از تابع موثر تری برای به روزرسانی وزن ها استفاده کرد. در این صورت کافیست تابع

update_weights
را با فرمول دیگری بازنویسی کرد.

🏁 روند اجرا

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

پیش‌نیازها

🎈 نحوه استفاده

ابتدا بخش خواندن ورودی در نوت بوک ها را اجرا کنید. سپس میتوانید پیاده سازی هر ایده را که در نوت بوک به صورت جداگانه مشخص است ران بگیرید و خروجی در همان مسیر اجرایی ذخیره میشود.

⛏️ وابستگی‌ها

برنامه در زبان جولیا نوشته شده و لیست پکیج های مورد نیاز در ادامه آمده است :

  MAT
  JuMP
  GLPK
  SparseArrays
  DelimitedFiles

✍️ نویسندگان

ایده‌ی آپدیت کردن وزن ها توسط آیدا افشارمحمدیان مطرح و پیاده سازی شد.
ایده‌ی اضافه کردن قید های سطر صفر توسط متین امینی مطرح و پیاده سازی شد.
متاسفانه خانم مهرانی به دلیل مشکلاتی نتوانستند به همکاری در مسابقه ادامه دهند.