آموزش Pyomo در پایتون

این صفحه نقطهٔ شروع یادگیری Pyomo به زبان فارسی است: اینکه Pyomo چیست، مدل در آن از چه اجزایی ساخته می‌شود، با کدام سالور حل می‌شود و به چه ترتیبی یاد گرفت. همهٔ آموزش‌های سایت که با Pyomo نوشته شده‌اند، این‌جا دسته‌بندی شده‌اند؛ با تمرکز بر سیستم‌های قدرت و انرژی، زنجیرهٔ تأمین و انتقال مدل‌ها از GAMS به پایتون.

Pyomo چیست؟

Pyomo یک زبان مدل‌سازی جبری متن‌باز در پایتون است. یعنی مدل بهینه‌سازی را تقریباً همان‌طور که روی کاغذ می‌نویسید تعریف می‌کنید: مجموعه‌ها، پارامترها، متغیرها، قیدها و تابع هدف. بعد همان مدل را بدون تغییر به سالورهای مختلف می‌سپارید.

Pyomo فقط به یک نوع مسئله محدود نیست. برنامه‌ریزی خطی و عدد صحیح (LP و MILP)، مسائل غیرخطی (NLP) و ترکیب این دو (MINLP) همه در آن قابل مدل‌سازی‌اند. به همین دلیل در پژوهش و صنعت برق، که مدل‌ها اغلب غیرخطی‌اند، ابزار رایجی است.

اجزای یک مدل Pyomo

هر مدل Pyomo از چند جزء ثابت ساخته می‌شود. اگر با GAMS کار کرده‌اید، معادل هر جزء را هم در ستون دوم می‌بینید:

جزء در Pyomoمعادل در GAMSکاربرد
ConcreteModelModelظرف اصلی که همهٔ اجزای مدل در آن تعریف می‌شوند
SetSetاندیس‌ها: نیروگاه‌ها، شین‌ها، دوره‌های زمانی، مشتری‌ها
ParamParameterداده‌های ثابت: هزینه، ظرفیت، تقاضا
VarVariableمتغیرهای تصمیم پیوسته، صحیح یا دودویی
ConstraintEquationقیدها، معمولاً اندیس‌دار روی یک یا چند مجموعه
ObjectiveSolve … minimizingتابع هدف کمینه‌سازی یا بیشینه‌سازی
SolverFactoryOption solverانتخاب و اجرای سالور

برای دیدن این تناظر روی یک مدل کامل، یادداشت از GAMS به پایتون: طراحی شبکه زنجیره تأمین با Pyomo را ببینید.

Pyomo، GAMS یا OR-Tools؟

GAMS و Pyomo هر دو زبان مدل‌سازی جبری‌اند و مدل‌ها تقریباً یک‌به‌یک بینشان قابل ترجمه‌اند. تفاوت اصلی در محیط است. GAMS برای مدل‌های بزرگ به لایسنس تجاری نیاز دارد، اما Pyomo رایگان است و داخل پایتون اجرا می‌شود؛ پس خواندن داده از اکسل، رسم نمودار و ساخت داشبورد در همان برنامه انجام می‌شود.

OR-Tools رقیب Pyomo نیست، بلکه مکمل آن است. سالور CP-SAT در OR-Tools برای مسائل گسسته و ترکیبیاتی مثل زمان‌بندی و مسیریابی ساخته شده، و Pyomo برای مدل‌های جبری خطی و غیرخطی، به‌ویژه در سیستم قدرت. برای آموزش‌های OR-Tools، راهنمای جامع OR-Tools را ببینید.

نصب و شروع کار

Pyomo با دستور pip install pyomo نصب می‌شود. سالورها جدا نصب می‌شوند؛ برای مسائل خطی و عدد صحیح، سالور رایگان HiGHS با pip install highspy در دسترس قرار می‌گیرد. روش‌های مختلف نصب و استفاده از سالورها در یادداشت سه روش عملی استفاده از Solverها در Pyomo آمده است. اگر نمی‌خواهید چیزی روی سیستم خود نصب کنید، مدل‌ها را در Google Colab اجرا کنید.

بهترین نقطهٔ شروع عملی، بهینه‌سازی با Pyomo: مرجع فارسی مدل‌سازی برنامه‌ریزی خطی است که یک مدل کامل را از تعریف تا تحلیل حساسیت دنبال می‌کند. برای کاربرد در سیستم قدرت، برنامه‌ریزی روشن-خاموش نیروگاه‌ها با Pyomo: دو روش مدل‌سازی را ببینید. اگر مسئلهٔ شما غیرخطی است، چه مسائلی به AC-OPF نیاز دارند؟ نشان می‌دهد چه وقت به AC-OPF نیاز دارید.

مسیر یادگیری Pyomo

پنج مرحله، از مدل‌سازی تا تکنیک‌های پژوهشی. هر مرحله روی مرحلهٔ قبل ساخته می‌شود.

  1. مدل‌سازی ریاضی را یاد بگیرید

    Pyomo زبانی برای نوشتن مدل ریاضی است؛ پس اول باید بتوانید مسئله را به مجموعه، پارامتر، متغیر تصمیم، قید و تابع هدف تبدیل کنید.

  2. اولین مدل Pyomo و انتخاب سالور

    ساختار ConcreteModel، تعریف مجموعه‌ها و پارامترها، قیدهای اندیس‌دار، و نصب و فراخوانی سالورهای رایگان مثل HiGHS و IPOPT.

  3. مدل‌های کلاسیک را از GAMS به پایتون بیاورید

    اگر GAMS بلدید، سریع‌ترین راه یادگیری Pyomo بازنویسی همان مدل‌های آشناست: هر Set، Parameter و Equation معادل مستقیمی در Pyomo دارد.

  4. بهینه‌سازی سیستم قدرت

    زمینه‌ای که Pyomo در آن بیشترین کاربرد را دارد: Unit Commitment، پخش بار بهینهٔ DC و AC، و جایابی ذخیره‌ساز؛ از مدل‌های خطی تا غیرخطی.

  5. تکنیک‌های پیشرفته

    بهینه‌سازی دوسطحی، شرایط بهینگی KKT و مدل‌سازی عدم قطعیت؛ ابزارهایی برای مسائل پژوهشی و پایان‌نامه.

آموزش‌های Pyomo بر اساس موضوع

هر آموزش یک مسئلهٔ واقعی را از تعریف تا پیاده‌سازی و تحلیل نتایج دنبال می‌کند.

مبانی Pyomo و راه‌اندازی

ساخت مدل، نصب و انتخاب سالور، اجرا در Colab، و تجربه‌های پیاده‌سازی مدل در محیط واقعی.

از GAMS به پایتون

مدل‌های کلاسیک زنجیرهٔ تأمین که در دوره‌های GAMS تدریس می‌شوند، گام‌به‌گام با Pyomo و سالورهای رایگان بازنویسی شده‌اند.

سیستم‌های قدرت و انرژی

برنامه‌ریزی نیروگاه‌ها، پخش بار، شبکهٔ توزیع، ذخیره‌ساز و خودروی برقی؛ هستهٔ کاربرد Pyomo در صنعت برق.

تکنیک‌های پیشرفتهٔ مدل‌سازی

بهینه‌سازی دوسطحی، شرایط KKT و بهینه‌سازی چندهدفه؛ مفاهیمی که در مقاله‌ها و پایان‌نامه‌ها پرتکرارند.

مسائل کلاسیک برنامه‌ریزی عدد صحیح

مدل‌های MILP کاربردی در تولید، زنجیرهٔ تأمین و انرژی. بخشی از این آموزش‌ها با PuLP پیاده شده‌اند؛ همان فرمول‌بندی را می‌توان مستقیم در Pyomo نوشت.

دوره‌های Pyomo

برای یادگیری ساختاریافته و پروژه‌محور، این دوره‌ها مدل‌سازی با Pyomo را از پایه تا مسائل پیشرفتهٔ سیستم قدرت پوشش می‌دهند.

پرسش‌های رایج دربارهٔ Pyomo

آیا Pyomo رایگان است؟

بله. Pyomo متن‌باز است و با مجوز BSD منتشر می‌شود، پس استفاده از آن در پروژه‌های دانشگاهی و تجاری رایگان است. سالورهای رایگانی مثل HiGHS، CBC، GLPK و IPOPT هم با آن کار می‌کنند و برای بیشتر مسائل کافی‌اند.

Pyomo بهتر است یا GAMS؟

از نظر قدرت مدل‌سازی هر دو زبان جبری‌اند و مدل‌ها تقریباً یک‌به‌یک قابل ترجمه‌اند. مزیت Pyomo رایگان بودن و قرار گرفتن داخل پایتون است؛ یعنی اتصال مستقیم به داده، اکسل، نمودار و هر کتابخانهٔ دیگر بدون نیاز به لایسنس.

برای هر نوع مسئله از کدام سالور استفاده کنم؟

برای مسائل خطی و عدد صحیح (LP و MILP) HiGHS یا CBC انتخاب خوب و رایگانی است. برای مسائل غیرخطی پیوسته مثل پخش بار AC از IPOPT استفاده کنید. اگر به لایسنس دانشگاهی دسترسی دارید، Gurobi در مسائل بزرگ عدد صحیح معمولاً سریع‌تر است.

Pyomo یا OR-Tools؟

Pyomo برای مسائل جبری خطی و غیرخطی، به‌ویژه در سیستم قدرت و انرژی، مناسب‌تر است. OR-Tools و سالور CP-SAT در مسائل گسسته و ترکیبیاتی مثل زمان‌بندی و مسیریابی قوی‌ترند. بسیاری از پروژه‌های واقعی از هر دو استفاده می‌کنند.

تازه شروع کرده‌اید؟ از مدل‌سازی ریاضی و اهمیت آن برای برنامه‌نویسی شروع کنید.

پروژهٔ Pyomo دارید؟

برای مشاوره در مدل‌سازی و پیاده‌سازی مسائل سیستم قدرت، انرژی و زنجیرهٔ تأمین با @pypyid در تلگرام در تماس باشید.

ارتباط در تلگرام