در پست قبلی اشاره شد که چه عواملی منجر به ایجاد خطای کمبود حافظه (out of memory) در نرم افزار IBM Ilog CPLEX میشود. در این پست سه راهکار عمده جهت برطرفسازی این خطا را بررسی می کنیم. اولین و سادهترین راهکار ممکن تغییر پارامتر thread به مقدار ۱ است. برای این منظور کافی است که یک بلوک پیشپردازندهی execute
به صورت زیر در ابتدای کد قرار داده شود.
execute {
cplex.threads = 1;
}
با انجام این عمل، پردازش از حالت موازی خارج شده و جستجو به صورت تک نخی
(single threading) صورت میگیرد. در این حالت به حجم حوضچهی جواب (solution pool) کمتری نیاز خواهد بود.
راهکار بعدی اجازه دسترسی به مقدار بیشتری از حافظه موقت (RAM) هست. در حالت عادی نرم افزار تنها اجازهی دسترسی به ۲ گیگابایت از فضای موقت را دارد.
execute {
cplex.workmem = 4000;
}
راهکار سوم تغییر پارامترهای الگوریتم حل است که اغلب با سعی و خطا همراه میشود. به عنوان مثال تغییر پارامتر lpmethod
از مقدار یک به دو، نوع الگوریتم حل را از سیمپلکس عادی به الگوریتم سیمپلکس-دوال تغییر می دهد. در عمل ثابت شده است که الگوریتمهای سیمپلکس-دوال نسبت به سایر الگوریتمهای برنامهریزی خطی، در حین اجرا فضای کمتری را اشغال میکنند.
execute {
cplex.lpmethod = 1;
}