پایتون بهعنوان یک زبان برنامهنویسی سطح بالا و شئگرا با شتاب قابل توجهی در مسیر توسعه قرار دارد. گزارشهای Tiobe هم نشان میدهد که جایگاه این زبان برنامهنویسی نسبت به سال ۲۰۱۸ نیز ارتقا یافته است. بهکارگیری زبان برنامهنویسی پایتون در حوزههای عملیاتی مختلفی رایج شده اما یادگیری ماشین و دادهکاوی دو حوزهای هستند که بهطور خاص منشأ بخشی از معروفیت پایتون هستند. در این بین، حوزه کلاسیک تحقیق در عملیات یعنی بهینهسازی نیز کمفروغ نبوده و جای خود را در کتابخانههای مختلف پایتون باز کرده است. کتابخانههای غنی و پویای پایتون وجه تمایز این زبان برنامهنویسی است که به حوزه بهینهسازی و تحقیق در عملیات نیز جاری شده است.
واقعیت آن است که با حرکت دانش بهینهسازی بر روی ریل مسائل آنلاین و مبتنیبر وبسرویس، دیگر نمیتوان حل کامپیوتری این مسائل را صرفاً با بهرهگیری از نرمافزارهای کلاسیک بهینهسازی نظیر لینگو یا گمز را بهطور جدی توصیه کرد. در این میان، پایتون با درخششی که از خود نشان داده است یک فرصت مناسب برای همه کسانی است که علاقمند هستند تا بهینهسازی را در محیط برنامهنویسی به ثمر برسانند.
در این یادداشت به معرفی شش کتابخانه مطرح پایتون در حوزه بهینهسازی ریاضی خواهیم پرداخت. هریک از این کتابخانهها ویژگیهای مخصوص به خود را دارند و در شرایطی میتوانند گزینه مناسبی برای استفاده در راستای پیادهسازی و حل مدلهای تحقیق در عملیات باشند.
۱- زیرماژول SciPy.optimize
چارچوب SciPy یکی از بهترین اکوسیستمهای متنباز مبتنیبر پایتون است. SciPy چندین زیرماژول دارد که scipy.optimize یکی از آنها است و به یک کتابخانه محبوب در حوزه بهینهسازی تبدیل شده است. همین موضوع سبب شده است که احتمالا بتوانید مستندات و راهحلهای مختلفی را در جوامع توسعهدهنده پایتون برای آن بیابید. scipy.optimize توابعی را برای بهینهسازی توابع هدف مبتنیبر محدودیتهای ممکن آنها فراهم آورده است. این توابع به طور خاص به مسائل غیرخطی، خطی، با محدودیت، ریشهیابی و برازش منحنی اختصاص دارد.
برای دسترسی به مستندات scipy.optimize به اینجا و برای آشنایی با خود SciPy به اینجا مراجعه نمایید.
۲- بسته CVXOPT
CVXOPT یکی از بسترهای بهینهسازی با پایتون است. در حقیقت، CVXOPT یک بسته نرمافزاری رایگان برای بهینهسازی محدب است که مبتنیبر زبان برنامهنویسی پایتون توسعه یافته است. این بسته را میتوان با مفسر تعاملی پایتون بهوسیله اجرای اسکریپتهای پایتون در خط فرمان (command line) به کار گرفت و یا آن را از طریق ماژولهای توسعهیافته پایتون با سایر نرمافزارها یکپارچه ساخت.
برای دسترسی به مستندات این کتابخانه میتوانید اینجا را کلیک کنید.
۳- کتابخانه PuLP
همانطور که احتمالا از نام کتابخانه PuLP برمیآید شهرت این کتابخانه بیشتر بهدلیل سهولت استفاده از آن در برنامهریزی خطی است. نوع ساده نگارش مسأله برنامهریزی خطی پس از فراخوانی این کتابخانه، شیوه نگارش کلاسیک برنامهریزی خطی در نرمافزارهایی مثل لینگو یا گمز را تداعی میکند.
برای دسترسی به مستندات PuLP به اینجا یا اینجا مراجعه کنید.
۴- کتابخانه PySCIPopt
SCIP یکی از حلکنندههای سریع و غیرتجاری برای مسائل برنامهریزی عدد صحیح مختلط خطی و غیرخطی است. این چارچوب همچنین برای مسائل عددصحیح با محدودیت، شاخه و کران، قیمتگذاری، انتشار و تجزیه بندرز نیز مطرح است. SCIP تلاش میکند که فرآیند حل را بهطور کامل کنترل کند و دسترسی تمامعیاری برای مشاهده جزئیات و اطلاعات حل را فراهم سازد. SCIP توسط مؤسسه زوزه برلین که در دانشگاه آزاد برلین مستقر است توسعه یافته و در حال توسعه است.
یکی از ویژگیهای SCIP توسعه رابطّهایی برای دیگر برنامههای کاربردی یا زبانهای برنامهنویسی است. پایتون و جاوا از جمله زبانهای برنامهنویسی هستند که میتوان با آنها SCIP را فراخوانی کرد. ماژول SCIP در پایتون PySCIPopt نام دارد که میتوانید مستندات آن را در اینجا مطالعه کنید.
۵- کتابخانه pyOpt
کتابخانه pyOpt ، یک بسته مبتنیبر پایتون برای فرمولدهی و حل مسائل بهینهسازی غیرخطی با محدودیت است. انتشار عمومی این کتابخانه در سال ۲۰۱۱ بوده است که خاستگاهی از دانشگاه تورنتو کانادا دارد. به ادعای وبسایت pyOpt، این کتابخانه توسط ناسا در چارچوب متنباز MDAO و نیز برخی مراکز تحقیقات در دانشگاهها نظیر UMICH/UofT MDOLab یا آزمایشگاه پرواز MIT مورد استفاده قرار گرفته است.
دسترسی به مستندات و آموزش این کتابخانه از طریق این لینک ممکن است.
۶- کتابخانه prodyn
کتابخانه prodyn در پایتون بستری برای پیادهسازی برنامهریزی پویا در حوزه تحقیق در عملیات است. prodyn از الگوریتم برنامهریزی پویای پیشرو یا پسرو برای محاسبه توالی تصمیمگیری که منجر به حداقل هزینههای کل شود، استفاده میکند.
برای مطالعه مستندات prodyn که توسط دانشگاه فنی مونیخ پیادهسازی شده است، میتوانید به این لینک مراجعه کنید.
۷- کتابخانه Pyomo
کتابخانه Pyomo یکی از کتابخانههای بهینهسازی پیشتاز در پایتون است که گستره زیادی از تواناییهای مدلسازی، حل و تحلیل مسائل برنامهریزی ریاضی را پشتیبانی میکند. انواع مختلفی از مدلهای بهینهسازی تحت پوشش Pyomo عبارت هستند از برنامه ریزی خطی، برنامه ریزی کوادراتیک، برنامه ریزی غیرخطی، برنامه ریزی خطی عدد صحیح مختلط، برنامه ریزی عدد صحیح مختلط درجه دوم، برنامه ریزی غیرخطی عدد صحیح مختلط، برنامه ریزی تصادفی، برنامه ریزی Bi-level، برنامه ریزی منفصل یا فصلی (Disjunctive Programming) تعمیمیافته، معادلات جبری دیفرانسیل و برنامهریزی ریاضی با محدودیتها تساوی.
دسترسی به وبسایت رسمی و مستندات مربوط به Pyomo از طریق این لینک فراهم شده است.