پیشنهاددهی مقاوم نیروگاه مجازی در بازار روز بعد با Pyomo
استراتژی پیشنهاددهی نیروگاه مجازی بادی، خورشیدی، باتری و حرارتی در بازار روز بعد، مقاوم در برابر عدم قطعیت قیمت با رویکرد Bertsimas–Sim و Pyomo.
📋 معرفی پروژه
هدف: تعیین استراتژی بهینهی پیشنهاددهی یک نیروگاه مجازی قیمتپذیر در بازار روز بعد، بهگونهای که:
- ✅ سود نیروگاه مجازی در بدترین حالت محتمل قیمت بازار روز بعد بیشینه شود
- ✅ برنامهی ساعتی پیشنهاد انرژی به بازار برای ۲۴ ساعت روز بعد تعیین شود
- ✅ برنامهی در مدار قرارگیری و تولید نیروگاه حرارتی و برنامهی شارژ و دشارژ باتری بهصورت هماهنگ تعیین شود
- ✅ هزینهی انتشار کربن نیروگاه حرارتی در تصمیمگیری لحاظ شود
- ✅ اثر همزمان کمبود سوخت (سقف روزانهی گاز، مشابه محدودیتهای زمستانی ایران) و عدم قطعیت قیمت بر نقش باتری و منابع تجدیدپذیر بررسی شود
اگر با مبانی مدلسازی ریاضی مسائل بهینهسازی آشنا نیستید، دوره مدلسازی مسائل بهینهسازی پیشزمینهی خوبی میدهد.
با افزایش سهم منابع تجدیدپذیر در شبکههای برق، تولیدکنندگان کوچک و پراکنده بهتنهایی نمیتوانند به شکل مؤثری در بازار برق شرکت کنند. نیروگاه مجازی این منابع ناهمگن را تجمیع میکند و آنها را بهصورت یک بازیگر واحد وارد بازار میکند. تصویر بالا ساختار نیروگاه مجازی این پروژه را نشان میدهد: مزرعهی بادی و فارم خورشیدی تولید متغیر دارند، نیروگاه حرارتی منبع کنترلپذیر است و باتری انعطاف زمانی ایجاد میکند.
نیروگاه مجازی قیمتپذیر فرض میشود؛ یعنی سهم آن از بازار آنقدر کوچک است که تصمیمهایش اثری بر قیمت تسویه ندارد. چالش اصلی این است که قیمت بازار روز بعد در زمان تصمیمگیری معلوم نیست. اگر تصمیمگیری بر اساس قیمت پیشبینیشده انجام شود و قیمت واقعی کمتر از پیشبینی باشد، ممکن است سود نیروگاه مجازی بهشدت کاهش یابد یا حتی زیانده شود. علاوه بر این، تولید نیروگاه حرارتی هم با هزینهی انتشار کربن و هم با سقف روزانهی گاز قابل تحویل محدود میشود؛ در این شرایط نقش باتری و منابع تجدیدپذیر پررنگتر میشود.
فرضیات مسئله:
- افق برنامهریزی ۲۴ ساعته و با گام زمانی یک ساعت است
- تنها منبع عدم قطعیت، قیمت بازار روز بعد است؛ برای قیمت هر ساعت یک مقدار پیشبینیشده و یک بازهی انحراف مشخص در نظر گرفته میشود
- تولید مزرعهی بادی و فارم خورشیدی برابر مقادیر پیشبینیشده و قطعی فرض میشود
- نیروگاه مجازی قیمتپذیر است و فقط در بازار روز بعد شرکت میکند
- محدودیتهای شبکهی داخلی نیروگاه مجازی در نظر گرفته نمیشوند
- ضریب انتشار کربن نیروگاه حرارتی و قیمت هر واحد انتشار، معلوم و ثابت فرض میشوند
- سقف روزانهی گاز قابل تحویل به نیروگاه حرارتی معلوم است
🎯 ۵ تحویل پروژه
تحویل ۱: مدلسازی ریاضی و تدوین مسئله
اهداف:
- تعریف متغیرهای تصمیم: انرژی پیشنهادی به بازار در هر ساعت، وضعیت روشن/خاموش و سطح تولید نیروگاه حرارتی، شارژ و دشارژ باتری، و میزان بهرهبرداری از تولید بادی و خورشیدی (با امکان کاهش تولید)
- تدوین قیود: تعادل توان، قیود نیروگاه حرارتی (حداقل و حداکثر تولید، نرخ افزایش و کاهش، حداقل زمان روشن و خاموش ماندن، هزینهی راهاندازی)، سقف روزانهی سوخت، قیود باتری (ظرفیت انرژی، حداکثر توان، راندمان، عدم شارژ و دشارژ همزمان، حالت شارژ اولیه و نهایی)، و محدودیت تولید تجدیدپذیرها به مقادیر پیشبینیشده
- تدوین تابع هدف: درآمد فروش انرژی منهای هزینهی سوخت، راهاندازی و انتشار کربن
- استخراج همتای مقاوم مدل با رویکرد Bertsimas–Sim و دوگانسازی مسئلهی داخلی
خروجی:
- گزارش مدل ریاضی کامل (مدل قطعی و همتای مقاوم)
- نمونهای از قیود کلیدی:
قید تعادل توان (انرژی پیشنهادی برابر مجموع تولید منابع و توان خالص باتری):
قید سقف روزانهی سوخت نیروگاه حرارتی:
هزینهی انتشار کربن در هر ساعت:
تابع هدف همتای مقاوم پس از دوگانسازی:
تحویل ۲: جمعآوری و آمادهسازی دادهها
اهداف:
- تولید یا جمعآوری پروفایل ساعتی پیشبینی تولید بادی و خورشیدی برای ۲۴ ساعت
- تعیین قیمت پیشبینیشدهی بازار روز بعد و بازهی انحراف قیمت در هر ساعت
- تعیین پارامترهای فنی و اقتصادی نیروگاه حرارتی (حدود تولید، نرخ تغییر، حداقل زمان روشن و خاموش، ضرایب مصرف سوخت، هزینهی راهاندازی)
- تعیین ضریب انتشار کربن، قیمت انتشار و سقف روزانهی گاز
- تعیین پارامترهای باتری (ظرفیت، توان، راندمان، حالت شارژ اولیه و نهایی)
خروجی:
- فایل داده شامل تمام پروفایلها و پارامترها
- نمودار قیمت پیشبینیشده همراه با بازهی انحراف، و نمودار پروفایل تولید بادی و خورشیدی
تحویل ۳: پیادهسازی مدل قطعی و مدل مقاوم در Pyomo
اهداف:
- پیادهسازی مدل قطعی (معادل Γ = 0) بهعنوان مبنای مقایسه
- پیادهسازی همتای مقاوم Bertsimas–Sim بهصورت یک MILP تکسطحی
- حل با سالورهای HiGHS یا Gurobi و بررسی معقولبودن رفتار نیروگاه حرارتی و باتری
خروجی:
from pyomo.environ import *
m = ConcreteModel()
m.T = RangeSet(1, 24)
# Decision variables
m.P_bid = Var(m.T, within=NonNegativeReals) # energy offered to the DA market
m.p_th = Var(m.T, within=NonNegativeReals) # thermal unit output
m.u = Var(m.T, within=Binary) # thermal unit on/off status
m.p_ch = Var(m.T, within=NonNegativeReals) # battery charging power
m.p_dis = Var(m.T, within=NonNegativeReals) # battery discharging power
m.soc = Var(m.T, within=NonNegativeReals) # battery state of charge
# Robust counterpart auxiliary variables
m.z = Var(within=NonNegativeReals)
m.q = Var(m.T, within=NonNegativeReals)
# Daily fuel supply limit
m.fuel_cap = Constraint(
expr=sum(a * m.u[t] + b * m.p_th[t] for t in m.T) <= F_max
)
- برنامهی ساعتی پیشنهاد، تولید حرارتی و شارژ و دشارژ باتری برای مدل قطعی و مدل مقاوم
- مقایسهی نتایج دو مدل
تحویل ۴: تحلیل حساسیت نسبت به بودجهی عدم قطعیت
اهداف:
- حل مدل برای مقادیر مختلف Γ از ۰ (مدل قطعی) تا ۲۴ (محافظهکارانهترین حالت)
- بررسی تغییر برنامهی پیشنهاد، تولید حرارتی و رفتار باتری با افزایش Γ
- تعیین هزینهی مقاومبودن
خروجی:
- منحنی سود نسبت به Γ
- جدول تغییرات برنامهی پیشنهاد و تولید در Γهای مختلف
- گزارش هزینهی مقاومبودن
تحویل ۵: تحلیل اثر همزمان سقف سوخت و عدم قطعیت قیمت، و گزارش نهایی
اهداف:
- حل مدل برای ترکیبهای مختلف سقف روزانهی سوخت و Γ
- بررسی اثر همزمان این دو عامل بر سود، میزان انتشار کربن و نقش باتری و منابع تجدیدپذیر
- جمعبندی یافتهها
خروجی:
- نمودارهای اثر سقف سوخت و Γ بر سود، انتشار کربن، میزان کاهش تولید تجدیدپذیرها و الگوی شارژ و دشارژ باتری
- گزارش نهایی
- کد کامل با مستندات و فایلهای داده و نتایج
📊 نتایج انتظاری
پس از تکمیل پروژه، باید بتوانید:
✅ مسئلهی پیشنهاددهی یک نیروگاه مجازی قیمتپذیر در بازار روز بعد را به شکل ریاضی فرموله کنید ✅ عدم قطعیت قیمت را با رویکرد Bertsimas–Sim مدل کنید و همتای مقاوم را با دوگانسازی استخراج کنید ✅ مدل قطعی و مدل مقاوم را در Pyomo پیادهسازی و حل کنید ✅ هزینهی انتشار کربن و سقف تأمین سوخت را در مدل بهرهبرداری نیروگاه حرارتی وارد کنید ✅ هزینهی مقاومبودن را تعیین و تحلیل حساسیت نسبت به Γ را انجام دهید ✅ اثر همزمان کمبود سوخت و عدم قطعیت قیمت را بر نقش باتری و منابع تجدیدپذیر تحلیل کنید
📁 فایلهای پروژه
| تحویل | فایل | توضیح |
|---|---|---|
| ۱ | model_formulation.pdf | مدل ریاضی قطعی و همتای مقاوم |
| ۲ | vpp_data.xlsx | پروفایلهای بادی و خورشیدی، قیمت و بازهی انحراف، پارامترهای واحدها |
| ۳ | vpp_deterministic.py, vpp_robust.py | کد مدل قطعی و مدل مقاوم |
| ۴ | gamma_sensitivity.py | تحلیل حساسیت نسبت به Γ و هزینهی مقاومبودن |
| ۵ | fuel_gamma_analysis.py + final_report.pdf | تحلیل همزمان سقف سوخت و Γ، و گزارش نهایی |
🚀 شروع کار
پیش از شروع کدنویسی، مرور یادداشت مدلسازی ریاضی و اهمیت آن کمک میکند مسئله را درست فرموله کنید. برای اجرای کد بدون نصب چیزی روی سیستم خودتان، راهنمای Google Colab و برای انتخاب سالور مناسب، یادداشت سه روش عملی استفاده از سالورها در Pyomo را ببینید. برای آشنایی عمیقتر با بهینهسازی مقاوم و سایر روشهای مدلسازی عدم قطعیت، دوره مدلسازی عدمقطعیت ابزار لازم را میدهد.
سوالات متداول
منظور از قیمتپذیر بودن نیروگاه مجازی چیست؟
یعنی سهم نیروگاه مجازی از بازار آنقدر کوچک است که پیشنهادهای آن اثری بر قیمت تسویهی بازار ندارد و قیمت برای آن یک پارامتر بیرونی است. به همین دلیل مدل تکسطحی است و نیازی به مدلسازی دوسطحی تسویهی بازار نیست.
بودجهی عدم قطعیت (Γ) چه نقشی دارد؟
Γ تعیین میکند که در حداکثر چند ساعت از افق برنامهریزی، قیمت میتواند به بدترین مقدار خود برسد. با تغییر Γ، تصمیمگیرنده میان سود مورد انتظار و میزان محافظهکاری توازن برقرار میکند. حالت Γ = 0 معادل مدل قطعی است و حالت Γ = 24 محافظهکارانهترین حالت ممکن است.
چرا سقف روزانهی سوخت در مدل لحاظ شده است؟
در شرایطی مانند محدودیتهای زمستانی ایران، میزان گاز قابل تحویل به نیروگاههای حرارتی محدود میشود. با افزودن این قید، نیروگاه حرارتی نمیتواند در همهی ساعات با ظرفیت کامل کار کند و باید سوخت محدود خود را در ساعات پرسودتر مصرف کند؛ در این حالت نقش باتری و منابع تجدیدپذیر در پوشش تعهدات بازار پررنگتر میشود.
ثبتنام و دریافت پروژه
برای دریافت پروژه و راهنمایی، در تلگرام به آیدی @pypyid در تلگرام در تماس باشید.