آموزش Pyomo در پایتون
این صفحه نقطهٔ شروع یادگیری Pyomo به زبان فارسی است: اینکه Pyomo چیست، مدل در آن از چه اجزایی ساخته میشود، با کدام سالور حل میشود و به چه ترتیبی یاد گرفت. همهٔ آموزشهای سایت که با Pyomo نوشته شدهاند، اینجا دستهبندی شدهاند؛ با تمرکز بر سیستمهای قدرت و انرژی، زنجیرهٔ تأمین و انتقال مدلها از GAMS به پایتون.
Pyomo چیست؟
Pyomo یک زبان مدلسازی جبری متنباز در پایتون است. یعنی مدل بهینهسازی را تقریباً همانطور که روی کاغذ مینویسید تعریف میکنید: مجموعهها، پارامترها، متغیرها، قیدها و تابع هدف. بعد همان مدل را بدون تغییر به سالورهای مختلف میسپارید.
Pyomo فقط به یک نوع مسئله محدود نیست. برنامهریزی خطی و عدد صحیح (LP و MILP)، مسائل غیرخطی (NLP) و ترکیب این دو (MINLP) همه در آن قابل مدلسازیاند. به همین دلیل در پژوهش و صنعت برق، که مدلها اغلب غیرخطیاند، ابزار رایجی است.
اجزای یک مدل Pyomo
هر مدل Pyomo از چند جزء ثابت ساخته میشود. اگر با GAMS کار کردهاید، معادل هر جزء را هم در ستون دوم میبینید:
| جزء در Pyomo | معادل در GAMS | کاربرد |
|---|---|---|
| ConcreteModel | Model | ظرف اصلی که همهٔ اجزای مدل در آن تعریف میشوند |
| Set | Set | اندیسها: نیروگاهها، شینها، دورههای زمانی، مشتریها |
| Param | Parameter | دادههای ثابت: هزینه، ظرفیت، تقاضا |
| Var | Variable | متغیرهای تصمیم پیوسته، صحیح یا دودویی |
| Constraint | Equation | قیدها، معمولاً اندیسدار روی یک یا چند مجموعه |
| Objective | Solve … minimizing | تابع هدف کمینهسازی یا بیشینهسازی |
| SolverFactory | Option 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
پنج مرحله، از مدلسازی تا تکنیکهای پژوهشی. هر مرحله روی مرحلهٔ قبل ساخته میشود.
-
مدلسازی ریاضی را یاد بگیرید
Pyomo زبانی برای نوشتن مدل ریاضی است؛ پس اول باید بتوانید مسئله را به مجموعه، پارامتر، متغیر تصمیم، قید و تابع هدف تبدیل کنید.
-
اولین مدل Pyomo و انتخاب سالور
ساختار ConcreteModel، تعریف مجموعهها و پارامترها، قیدهای اندیسدار، و نصب و فراخوانی سالورهای رایگان مثل HiGHS و IPOPT.
-
مدلهای کلاسیک را از GAMS به پایتون بیاورید
اگر GAMS بلدید، سریعترین راه یادگیری Pyomo بازنویسی همان مدلهای آشناست: هر Set، Parameter و Equation معادل مستقیمی در Pyomo دارد.
-
بهینهسازی سیستم قدرت
زمینهای که Pyomo در آن بیشترین کاربرد را دارد: Unit Commitment، پخش بار بهینهٔ DC و AC، و جایابی ذخیرهساز؛ از مدلهای خطی تا غیرخطی.
-
تکنیکهای پیشرفته
بهینهسازی دوسطحی، شرایط بهینگی KKT و مدلسازی عدم قطعیت؛ ابزارهایی برای مسائل پژوهشی و پایاننامه.
آموزشهای Pyomo بر اساس موضوع
هر آموزش یک مسئلهٔ واقعی را از تعریف تا پیادهسازی و تحلیل نتایج دنبال میکند.
مبانی Pyomo و راهاندازی
ساخت مدل، نصب و انتخاب سالور، اجرا در Colab، و تجربههای پیادهسازی مدل در محیط واقعی.
- بهینهسازی با Pyomo: مرجع فارسی مدلسازی برنامهریزی خطی
راهنمای کامل و فارسی Pyomo برای مدلسازی بهینهسازی؛ از ساخت مدل و حل مسئله حملونقل تا تحلیل حساسیت با متغیرهای دوگان.
- سه روش عملی استفاده از Solverها در Pyomo
سه روش عملی نصب و استفاده از سالورهای Pyomo؛ راهنمای انتخاب میان HiGHS، CBC، IPOPT و Gurobi برای مسائل خطی، صحیح و غیرخطی مختلف.
- Google Colab مزایا و معایب
بررسی کاربردی مزایا و معایب Google Colab برای Python و ابزارهای بهینهسازی؛ از راهاندازی محیط تا محدودیتهای محاسباتی و انتخاب زمان استفاده.
- بهینهسازی در پروداکشن: شش درس از پیادهسازی واقعی
چرا یک مدل بهینهسازی که در لپتاپ عالی کار میکند، در پروداکشن میشکند؛ شش درس واقعی دربارهی فرمولبندی، تنظیم سالور و معماری نرمافزار.
از GAMS به پایتون
مدلهای کلاسیک زنجیرهٔ تأمین که در دورههای GAMS تدریس میشوند، گامبهگام با Pyomo و سالورهای رایگان بازنویسی شدهاند.
- از GAMS به پایتون: طراحی شبکه زنجیره تأمین با Pyomo
یک مدل MILP طراحی شبکه زنجیره تأمین دوسطحی (کارخانه، مرکز توزیع، مشتری) را گامبهگام از GAMS به Pyomo ترجمه میکنیم، با جدول تناظر مفاهیم و نکات رایج خطا در ترجمه.
- از GAMS به پایتون: مدل انتخاب تأمینکننده و تخصیص سفارش
یک مدل MILP کلاسیک انتخاب تأمینکننده و تخصیص سفارش را گامبهگام از GAMS به Pyomo ترجمه میکنیم، با جدول تناظر مفاهیم و نکات رایج خطا در ترجمه.
- از GAMS به پایتون: برنامهریزی تولید و موجودی چنددورهای
یک مدل MILP کلاسیک Lot Sizing ظرفیتدار چندمحصولی و چنددورهای را گامبهگام از GAMS به Pyomo ترجمه میکنیم، با جدول تناظر مفاهیم و نکات رایج خطا در زمانبندی.
- دیسپچ اقتصادی دینامیک (DED) با GAMS و پایتون
مدل دیسپچ اقتصادی دینامیک با محدودیت نرخ تغییر تولید (Ramp Rate) را با کد کامل GAMS (Gcode4.1) بررسی و با Pyomo و HiGHS در پایتون حل میکنیم.
سیستمهای قدرت و انرژی
برنامهریزی نیروگاهها، پخش بار، شبکهٔ توزیع، ذخیرهساز و خودروی برقی؛ هستهٔ کاربرد Pyomo در صنعت برق.
- برنامهریزی روشن-خاموش نیروگاهها با Pyomo: دو روش مدلسازی
مرجع فارسی حل مسئله Unit Commitment در Pyomo؛ از فرمولبندی کلاسیک با متغیر دودویی تا برنامهریزی فصلی تعمیمیافته (GDP) و تبدیل هال.
- چه مسائلی به AC-OPF نیاز دارند؟
معرفی ۱۰ مطالعهی مهم در سیستم قدرت که به دلیل نیاز به ولتاژ، توان راکتیو یا تلفات دقیق، فقط با پخش بار AC قابل انجام هستند.
- بازآرایی شبکه توزیع: صرفه جویی با کلیدزنی
آشنایی با مسئله بازآرایی شبکههای توزیع برق (Distribution Network Reconfiguration)، فرمولبندی ریاضی آن برای کاهش تلفات و بهبود پروفیل ولتاژ، و روشهای حل.
- مدلسازی عدمقطعیت در سیستمهای قدرت
مروری کاربردی بر روشهای مدلسازی عدمقطعیت در تصمیمگیریهای سیستم قدرت — از رویکرد احتمالاتی و فازی تا نظریه شکاف اطلاعاتی و بهینهسازی مقاوم.
- محاسبه ظرفیت بارپذیری شبکه قدرت با پخش بار Pyomo
برآورد و تصویرسازی حداکثر ظرفیت بارپذیری باسها در شبکه ۲۴ باس IEEE با استفاده از پخش بار بهینه DC و مدلسازی در Python و Pyomo.
- جایابی باتری برای کاهش هدررفت تجدیدپذیرها
جایابی بهینه ایستگاههای ذخیرهسازی انرژی در شبکه انتقال برای کاهش هدررفت تولیدات تجدیدپذیر و بهبود بهرهبرداری با استفاده از مدلسازی ریاضی.
- هماهنگی EV، PV و پاسخگویی بار با Pyomo
پروژه آماده پایتون با Pyomo: هماهنگی شارژ خودرو الکتریکی، پنل خورشیدی و پاسخگویی بار در شبکه توزیع برای کمینهکردن هزینه و رفع پیک مصرف.
- بهرهبرداری و طراحی بهینهی سیستم انرژی-آب یکپارچه
اندازهیابی تجهیزات و بهرهبرداری ساعتی یک سیستم یکپارچهٔ بادی، خورشیدی، باتری و آبشیرینکن در افق پنجساله، با هدف کاهش هزینه و انتشار کربن.
- مدیریت انرژی شهرک با خورشیدی، باتری و خودروی برقی (V2G)
دیسپچ بهینهٔ پنل خورشیدی، باتری خانگی و مشترک، و شارژ دوطرفهٔ خودروی برقی (V2G) در یک شهرک ۷۵ خانهای، با محدودیت ظرفیت فیدر و کاهش پیک.
- پیشنهاددهی مقاوم نیروگاه مجازی در بازار روز بعد با Pyomo
استراتژی پیشنهاددهی نیروگاه مجازی بادی، خورشیدی، باتری و حرارتی در بازار روز بعد، مقاوم در برابر عدم قطعیت قیمت با رویکرد Bertsimas–Sim و Pyomo.
تکنیکهای پیشرفتهٔ مدلسازی
بهینهسازی دوسطحی، شرایط KKT و بهینهسازی چندهدفه؛ مفاهیمی که در مقالهها و پایاننامهها پرتکرارند.
- بهینهسازی دوسطحی (Bilevel): مثال رهبر-پیرو و شرایط KKT
آموزش گامبهگام بهینهسازی دوسطحی (Bilevel Optimization) با یک مثال کامل رهبر-پیرو، حل شده هم با تابع واکنش و هم با جایگزینی شرایط KKT.
- شرایط بهینگی KKT: چرا و چطور کار میکند؟
شرایط بهینگی کاروش-کوهن-تاکر (KKT) با پنج مثال گامبهگام؛ از یک مسئلهٔ درجه دوم ساده تا دامی که فقط در مسائل غیرمحدب رخ میدهد.
- تکنیک اپسیلون محدود برای بهینهسازی دو هدفه
وقتی دو تابع هدف در تضادند، با تکنیک اپسیلون محدود کل مرز پارتو را ترسیم میکنیم؛ همراه با یک مثال کامل غیرخطی و کد GAMS.
- طراحی زنجیره تأمین دومرحلهای زیر عدمقطعیت تقاضا
مدلسازی برنامهریزی تصادفی دومرحلهای برای طراحی شبکه زنجیره تأمین زیر عدمقطعیت تقاضا، با فرمولبندی MILP و پیادهسازی کامل در پایتون با Pyomo.
مسائل کلاسیک برنامهریزی عدد صحیح
مدلهای MILP کاربردی در تولید، زنجیرهٔ تأمین و انرژی. بخشی از این آموزشها با PuLP پیاده شدهاند؛ همان فرمولبندی را میتوان مستقیم در Pyomo نوشت.
- زمانبندی تولید با ظرفیت روزانه متغیر در CP-SAT
هر سفارش چند روز پیاپی کوره را اشغال میکند و ظرفیت روزانه هم متغیر است. این مسئلهٔ زمانبندی منابع محدود را با CP-SAT مدل و حل میکنیم.
- مسئله برش بهینه: وقتی هر سانتیمتر ضایعه هزینه دارد
معرفی مسئله برش بهینه (Cutting Stock) در صنایع کاغذ و فولاد؛ از فرمولبندی ریاضی تا پیادهسازی با پایتون برای کاهش ضایعه مواد اولیه.
- انبارداری فصلی کالا: کِی بخریم، کِی بفروشیم؟
چگونه یک مدل بهینهسازی خطی به تصمیم خرید، ذخیرهسازی و فروش کالاهای فصلی زیر نوسان قیمت بازار کمک میکند.
- حراج ترکیبی تدارکات: کدام دسته از پیشنهادها برنده شود؟
آشنایی با مسئله تعیین برنده در حراجهای ترکیبی تدارکات حملونقل، جایی که حملکنندگان بهجای یک مسیر، برای بستهای از مسیرها قیمت پیشنهاد میدهند.
- مکانیابی ایستگاه شارژ خودروی برقی: کجا بسازیم، چقدر بزرگ؟
چگونه یک مدل برنامهریزی عدد صحیح مختلط، محل و ظرفیت ایستگاههای شارژ سریع خودروی برقی را همزمان با ظرفیت فیدر شبکه توزیع برق تعیین میکند.
- زنجیره تأمین حلقهبسته: بازسازی یا بازیافت محصول برگشتی؟
مدلسازی ریاضی تصمیم بازسازی یا بازیافت محصولات مرجوعی در زنجیره تأمین حلقهبسته، با فرمولبندی MILP و پیادهسازی در پایتون.
- همزیستی صنعتی: بهینهسازی شبکه تبادل پسماند میان کارخانهها
چگونه با بهینهسازی ریاضی، پسماند یک کارخانه را به ماده اولیه کارخانهای دیگر تبدیل کنیم و شبکهای صرفهجو و سبز طراحی کنیم.
- موجودی مدیریتشده توسط فروشنده (VMI) در زنجیره تأمین
آشنایی با مدل موجودی مدیریتشده توسط فروشنده (VMI): چرا کنترل انبار مشتری به تأمینکننده میرسد، مدلسازی MILP آن، و پیادهسازی در پایتون با PuLP.
- مدل EOQ با تخفیف پلکانی: چقدر سفارش بدهیم؟
وقتی تأمینکننده برای سفارش بزرگتر تخفیف میدهد، فرمول ساده EOQ دیگر کافی نیست. مدل تخفیف پلکانی مقداری و پیادهسازی آن با پایتون و Pyomo را میبینیم.
دورههای Pyomo
برای یادگیری ساختاریافته و پروژهمحور، این دورهها مدلسازی با Pyomo را از پایه تا مسائل پیشرفتهٔ سیستم قدرت پوشش میدهند.
- دوره مدلسازی مسائل بهینهسازی
یاد بگیرید مسائل واقعی را به مدل ریاضی تبدیل کنید: متغیر تصمیم، تابع هدف، قیود و ساخت مدلهای LP، MILP و NLP با مثالهای کاربردی.
- آموزش مقدماتی بهینهسازی سیستمهای قدرت
شروع بهینهسازی سیستمهای قدرت در ۸ ساعت با پایتون: پخش بار اقتصادی، DC-OPF، مدلسازی باتری و مقدمه Unit Commitment؛ مناسب دانشجویان و پژوهشگران برق.
- آموزش پیشرفته بهینهسازی سیستم قدرت با پایتون
آموزش پروژهمحور بهینهسازی سیستم قدرت در پایتون با Pyomo: Unit Commitment، پخش بار بهینه DC و AC (OPF)، امنیت N-1، جایابی باتری و عدم قطعیت؛ ۲۲ ساعت.
- دوره فشرده مدلسازی عدم قطعیت در بهینهسازی
دوره فشرده مدلسازی عدم قطعیت: مقایسه روشهای Stochastic، Fuzzy، Robust و IGDT با کاربرد در انرژی و سیستم قدرت.
پرسشهای رایج دربارهٔ 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 در تلگرام در تماس باشید.