چندین شرکت وجود دارند که کارشون نوشتن Solver هست. از جمله:
یه سوال مهم که وجود داره اینه که کدوم Solver بهتر هست؟! من اول توضیح میدم که چجوری میشه به این سوال جواب داد. بعدش دیگه مشخص میشه که جواب چیه:) برای جواب به این سوال دو تا معیار وجود داره:
۱. سرعت Solver
۲. راحتی کار کردن Solver
۱. سرعت Solver
راه مقایسه ی سرعت Solver ها با هم این هست که یه مساله را به هر دوتاشون بدیم و ببینیم که کدوم یکی سریع تر این مساله را حل می کنه. (بدیهی بود. نه؟!)
جالبه که بدونید چندین مساله ی استاندارد تعریف شده تا هر کسی که یه دونه Solver ساخت، بتونه با کمک اون ها بسنجه که چقدر Solverی که طراحی کرده خوب کار می کنه.
خدا را شکر یه استاد دانشگاهی پیدا شده و Sovler ها انداخته به جون این مساله های استاندارد و در نهایت توی یه دونه جدول گفته که هر Solver برای کدوم نوع مساله ها بهتر هستند. یه نگاهی خودتون بهش بندازید بهتر متوجه میشید!
۲. راحتی کار کردن Solver:
احتمال بالایی میدم که الان دارید می خندید به این معیار تصمیم گیری! اما یه بار که یه Error گرفتید و هیچ جوره نتونستید حلش کنید، متوجه میشید که در نهایت براتون مهم اینه که یه Solver داشته باشید که بتونید باهاش کار کنید!
من هر بار که موقع کار کردن با Cplex یه دونه Error می گرفتم، خیلی طول میکشید تا راه حلش را با سرچ کردن پیدا کنم. به نظر شخصی من آموزش نامه هاش زیاد خوش نوشته نبودند. یه احساس کم هوشی خاصی بهم دست میداد وقتی باهاش کار می کردم.
از اونجایی که این معیار بر اساس نظر و برداشت شخصی هست، احتمالا آدم های زیادی را پیدا می کنید که کاملا خلاف نظر من را داشته باشند.
خودت از کدوم Solver استفاده می کنی؟
من اولش سعی کردم از Cplex استفاده کنم. چون هم Benchmark های خوبی داشت و هم اسمش را توی خیلی از مقاله ها می دیدم.
اما من دو تا مشکل کوچیک داشتم باهاش که البته مختص به خودم بود:
برای همین رفتم سراغ رقیبش: Gurobi. برای این کارم دو تا دلیل داشتم:
اگه دوست دارید بیشتر در موردشون نظرات کاربرهاشون را بخونید، برید توی سایت quora و سوالات مربوط به این موضوع را را بخونید. (هیچ نرم افزار فروشی نمیاد توی سایت اصلیش بنویسه که ماست من ترشه! برای مقایسه ی این دو تا نرم افزار با هم، من شخصا از سایت quora.com خیلی استفاده کردم.)
مطمینی که این بهترین Solver هست؟
از من گذشته که "ابزارپرست" باشم. من کلا اعتقادی ندارم که اصلا ابزار یا زبان برنامه نویسی ای وجود داره که آدم بتونه سرش قسم بخوره و برای هر کاری بهترین باشه... من با این Solver کارم را راه انداختم. راضی هم هستم. در عرض دو ثانیه مساله را حل کرد. دیگه چی میخوام؟! طبق اون Benchmark هم می دونم که سرعتش نسبت به رقیب هاش خیلی بهتره.
علی رغم اینکه من از Gurobi کاملا راضی هستم، بهتون توصیه می کنم بهتون که شما روی همون Cplex کار کنید. چون احتمالا توی دانشکدتون هم هستند کسایی که با اون کار می کنند و اگه جایی به مشکل برخوردید راحت تر می تونید راهنمایی بگیرید براش. هم اینکه راحت تر می تونید بهش دسترسی پیدا کنید...
پینوشت:
۱. قصد داشتم یه متن مفصل تری را اختصاص بدم به مقایسه بین Gurobi و Cplex. مثلا برم تعداد دفعاتی که واژه Cplex در مقاله ها اومده را نشون بدم و بگم که مثلا cplex بیشتر استفاده میشه اما دلیلش اینه که قدیمی تره و ... اما به دو دلیل ترجیح میدم این مطلب را ننویسم. دلیل اول: اون Benchmark ها حجت را تموم می کنند. دلیل دوم: میخوام این وبلاگ در عرض دو ساعت قابل خواندن باشه. این متن های توضیحی متناقض با اون هدف هستند. ترجیح میدم یه وبلاگ ناقص بنویسم که خونده میشه تا اینکه یه وبلاگ کامل بنویسم که کسی نمی خونه!
۲. توی Solver ها مهم هست که اون نرم افزار قدمت زیادی داشته باشه! چون توی هر Release سرعت هاشون چند برابر میشه! برای همین به عنوان یه قاعده ی سر انگشتی، بهتون توصیه می کنم یه دونه Solver که دو سالش هست را استفاده نکنید! (البته بر اساس همین دلیل، بهتون توصیه نمی کنم که یه روش حل را خودتون از صفر شروع کنید به کدنویسی و پیاده سازی کردنش! مطمین باشید Solver بهتر از شما حلش می کنه:)
برچسب:
نویسنده: آناهیتا زارعینیا