۸

تلرانس در ناحیه شدنی

در بیشتر مسائلی که با آنها سر و کار داریم، محدودیت ها محدودیت های سخت نام دارند. به عبارتی وقتی میگوییم که عبارت سمت چپ باید از عبارت سمت راست کوچکتر باشد، این امر قطعی است و ما اجازه ی تخطی از آن را نخواهیم داد. توجه بفرمایید که تخطی از محدودیت یعنی نشدنی بودن جواب! حال اگر بخواهیم به سالور اجازه دهیم که مقداری هم تخطی کند، آیا این امر امکان پذیر است؟

تخطی از یک محدودیت به معنی امکان تخطی متغیرهای پایه ی مسئله نیز می باشد. یک آپشن وجود دارد که به ما این امکان را می دهد که به گمز دستور دهیم که اشکالی ندارد که اگر جوابی که به دست می آید مقداری از ناحیه ی شدنی نیز بیرون باشد. این آپشن eprhs نام دارد که رنج بین ۱e-9 to 0.1 را می تواند داشته باشد و دیفالت آن برابر ۱e-6 می باشد. به عبارتی به صورت دیفالت سالور می تواند جوابهایی که یک صد هزارم با ناحیه ی شدنی فاصله دارند را شدنی اعلام کند. این مقدار می تواند کوچک یا بزرگتر هم شود.

تنها دقت کنید که کوچکتر شدن این مقدار می تواند مسئله را به کل نشدنی کند، افزایش آن هم مممکن است زمان حل را کمتر کند ولی مقداری از مفهوم محدودیت سخت فاصله بگیریم.

موفق باشید

محمودی

8 دیدگاه در “تلرانس در ناحیه شدنی

    • سلام

      $onecho > cplex.opt
      eprhs=0.08;
      $offecho
      Your_mode_name.optfile=1;
      

      این کد رو بین دستور solve و دستور model قرار بدین.
      مقداری دقت بکنین که با اینکار ممکنه محدودیت رو نرم کنین و از حالت سخت بیاد بیرون.

  1. سلام. من مدلی دارم که با سالور GUROBI برای حلش استفاده میکنم وقتی ابعاد مسئله کوچیکه قیود کاملا برقرار و جواب بهینه است. اما وقتی ابعاد مسئله خیلی بزرگ می شود قید زیر نقص می شود و پاسخ هم بهینه بدست می اید. با توجه به توضیحات بالا من رنج اعدادم در مقادیر خیلی کوچیک محاسباتشون انجام میشه یعنی ۱e-5 ممکنه به خاطر این باشه و البته بعضی اوقات رنج اعداد رو بطرگ میکنم جواب نشدنی میشه. راهنمایی دارین در این مورد لطفا؟
    (power(2*Pij(year,h,bus,totalbus),2)+power(2*Qij(year,h,bus,totalbus),2)) =l= 4*I2(year,h,bus,totalbus)*V2(year,h,bus)

    • سلام
      من فرض میکنم داده ها و مدلتون صحیح هست. در غیر اینصورت که باید اصلاحش کنین شما.
      رنجش ممکنه مشکل ساز باشه بله.
      اینکه میفرمایید نقض میکنه دلیلی برای این فرماشتون دارین؟ و اینکه بهینه حل میشه، سالور استاتوس و مدل استاتوستون چنده؟

  2. سلام و وقت به خیر خدمت شما اقای محمودی .
    اولا ممنونم که جواب سوال ها رو میدین ثانیا باید معذرت خواهی کنم برای سوال خارج از سر فصل راستش جای دیگه ای ندیدم این موضوع رو
    یه مسئاله ای پیش اومده اونم اینه که من یه مدل بزرگ خطی با عدد صحیح (mip)
    رو نوشتم وبا سی پلکس حل کردمش و گمز هم حل کرد و یک راه حل شدنی پیدا کرد ، منتها وقتی شرایط اولیه مسئاله رو تغییر دادم و سالور رو عوض کردم دیدم جواب نهایی عوض میشه برای همین دوتا حلقه تو درتو ساختم و همه سالور هایی که این نوع مدل رو حل میکردن رو هر کدوم با چند تا شرایط اولیه مختلف تست کردم . یعنی اول با سالور سی پلکس شرایط اولیه های مختلف رو چک میکنه بعد میره سراغ گارووبی اونو با شرایط اولیه های مختلف چک میکنه بعد همین طور همه سالور ها رو امتحان میکنه اخر سر بهترین جواب رو ( والبته همه جواب هارو ) به صورت یه فایل اکسل به ما میده .این کار رو گمز خیلی خوب انجام داد اولا تو همه حالت ها جواب شدنی پیدا کرد ثانیا جواب نهایی که با یه سالوری به اسم سولوم پیدا کرده بود و شدنی هم بود خیلی بهتر بود از جواب سالور هایی که معمولا باهاشون کار میکردم.
    منتها وقتی این رو به استادم نشون دادم به شدت ناراحت شد و گفت تو هیچی از بهینه سازی حالیت نمیشه و هیچ کس حق نداره همه سالور ها رو امتحان کنه و باید با یه سالور کار کنی فقط. بعد هم رسما منو از اتاقش انداخت بیرون .
    سوالم اینه که کاری که کردم اشتباهه یا غیر منطقیه ؟ یا استادم داره اشتباه میکنه؟؟؟

    • سلام وقت بخیر
      عجب استادی!!
      استاد داریم وقتی دانشجوش اشتباه میکنه راهنمایی میکنه، و به تحقیقش جهت میده. معنی استاد اگه نیست چیه!
      خب. اینکه با همه حل کردین، چیز خوبیه اتفاقا. ولی برای چند تا مثال باید حل میکردین و نتیجه میگرفتین که کدوم خوبه، و دیگه کلا برای همه مسائل از اون سالور استفاده میکردین. اینکه بیاین همه جوابا رو برای همه سالورا گزارش کنین. کار اشتباهیه، فقط اونی که انتخاب کردین و فک میکنین بهتره همونو باید گزارش کنین. برای این مسائل معمولا cplex خوب جواب میده. و شما هم از همون استفاده کنین.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *