بهینهسازی پیشرفته سیستمهای قدرت در پایتون با Pyomo
۳۰ خرداد ۱۴۰۵
مدرس دوره: دکتر علیرضا سرودی محیط کار: Python | سطح: پیشرفته | تعداد مباحث: ۱۰
در این دوره پیشرفته آموزش بهینهسازی سیستمهای قدرت در پایتون، با تدریس دکتر علیرضا سرودی، به صورت کاملاً کاربردی با مدلسازی مسائل کلیدی صنعت برق مانند آرایش بهینه واحدها (Unit Commitment)، پخش بار بهینه (OPF) و برنامهریزی توسعه شبکه با استفاده از Pyomo آشنا میشوید.

بخش ۱ — آرایش بهینه واحدها (Unit Commitment)
آشنایی با یکی از کلیدیترین مسائل بهرهبرداری سیستم قدرت: تصمیم درباره روشن یا خاموشبودن هر واحد تولیدی در هر ساعت. منطق و اهمیت مسئله بررسی میشود و انواع قیود واقعی آن مرور میشوند: بالانس توان، ذخیره چرخان، حدود تولید، قیود رمپ، حداقل زمان روشن/خاموشبودن و هزینههای راهاندازی. این جلسه پایه فرمولبندی و حل مسائل جلسات بعد است. در پایان، خروجی را بهصورت نمودار زمانبندی روشن/خاموش واحدها و سهم تولید هر واحد در طول شبانهروز تصویرسازی میکنیم.
بخش ۲ — پخش بار DC و قیود امنیت N-1
مدل سادهشده، خطی و سریع شبکه برای استفاده در مسائل بهینهسازی بزرگ. ابتدا منطق و فرضهای مدل DC مرور میشود، سپس معیار امنیت N-1 معرفی میگردد: شبکه باید بتواند خروج هر یک عضو (خط یا ترانس) را بدون اضافهبار شدن خطوط دیگر تحمل کند. برای کارایی محاسباتی، استفاده از ضرایب حساسیت آماده (PTDF و LODF) آموزش داده میشود. همچنین بارگذاری خطوط در حالت عادی و در سناریوهای خروج N-1 را روی نمودار رسم میکنیم تا خطوط بحرانی مشخص شوند.
بخش ۳ — پخش بار AC و AC-OPF
مدل کامل و واقعی شبکه با ولتاژ متغیر، توان راکتیو و تلفات واقعی. تفاوت آن با مدل DC و دلیل سنگینتر و غیرخطی بودنش بررسی میشود. سپس AC-OPF معرفی میشود: یافتن بهترین نقطه کاری شبکه با هدف کمینهکردن هزینه و رعایت قیود ولتاژ، توان ژنراتورها و ظرفیت خطوط. تأکید بر غیرمحدب بودن مسئله و چالش رسیدن به جواب بهینه سراسری. در ادامه پروفایل ولتاژ باسها و مقایسه تصویری نتایج AC با DC را رسم میکنیم.
بخش ۴ — جایابی باتری در شبکه انتقال (DC-OPF + Storage)
تصمیم درباره محل و ظرفیت نصب باتری ذخیرهساز در شبکه انتقال، روی پایه مدل DC-OPF و در یک افق چندبازهای. دو نوع تصمیم در هم تنیده بررسی میشود: سرمایهگذاری (محل و اندازه) و بهرهبرداری (الگوی شارژ/دشارژ). قیود کلیدی شامل حدود شارژ/دشارژ، حالت شارژ (SOC) و محدودیت محلهای نصب است. نتیجه نشان میدهد باتری کجا بیشترین فایده را برای رفع گرفتگی خطوط و کاهش هزینه پیک دارد. محل بهینه باتری روی نقشه شبکه و منحنی شارژ/دشارژ و حالت شارژ آن در طول روز را نیز تصویرسازی میکنیم.
بخش ۵ — مدیریت مصرف در شبکه انتقال (Demand Response)
ورود انعطاف سمت تقاضا به بهینهسازی: بخشی از بار میتواند کاهش یابد یا به ساعات کمباری منتقل شود. روی پایه DC-OPF و بهصورت چندبازهای، دو رفتار اصلی بررسی میشود: کاهش بار و انتقال بار. هدف، کاهش هزینه سیستم و رفع گرفتگی و بار پیک است. نشان داده میشود فعالکردن انعطاف تقاضا چطور نیاز به تولید گران در ساعات اوج مصرف را کم میکند. برای درک بهتر، پروفایل بار قبل و بعد از مدیریت مصرف را کنار هم رسم میکنیم تا اثر کاهش و انتقال بار بهصورت تصویری دیده شود.
بخش ۶ — برنامهریزی توسعه شبکه انتقال (TEP)
تصمیم بلندمدت و سرمایهای درباره ساخت خطوط انتقال جدید برای پاسخ به رشد بار و اتصال منابع تازه. روی پایه DC-OPF و بهصورت مسئله عدد صحیح-مخلوط (ساختن یا نساختن هر خط کاندید). ماهیت مسئله یک مصالحه اقتصادی است: هزینه سرمایهگذاری در برابر منفعت کاهش هزینه بهرهبرداری و رفع ازدحام. خروجی نشان میدهد کدام خطوط کاندید بیشترین ارزش را دارند. در پایان، شبکه توسعهیافته همراه با خطوط جدید پیشنهادی را روی نمودار شبکه بهصورت تصویری نمایش میدهیم.
بخش ۷ — بهینهسازی چندهدفه با پخش بار DC
دنبالکردن همزمان دو هدف متضاد: کمینهکردن هزینه تولید و کمینهکردن آلودگی. چون این دو در تضادند، بهجای یک جواب واحد دنبال «جبهه پارتو» میگردیم که مجموعهای از مصالحههای متعادل بین هزینه و آلودگی است. روشهای جمع وزنی و اپسیلون-قید برای ساخت این جبهه آموزش داده میشود. خروجی، نمودار هزینه در برابر آلودگی است که دامنهای از انتخابهای منطقی را پیش روی بهرهبردار میگذارد. خود جبهه پارتو را نیز بهصورت نمودار رسم و تفسیر میکنیم تا مصالحه میان دو هدف ملموس شود.
بخش ۸ — عدم قطعیت در آرایش بهینه واحدها (بدون قیود شبکه)
بازگشت به مسئله آرایش واحدها، اما این بار با کنار گذاشتن فرض معلومبودن بار و تولید. عدم قطعیت بار و تولید تجدیدپذیر وارد مسئله میشود و برای تمرکز بر خود مفهوم، قیود شبکه کنار گذاشته میشوند. رویکرد اصلی، تعیین آرایش بهینه واحدها با رویکرد تصادفی سناریو محوراست؛ تفاوت تصمیمهای مرحله اول (روشن/خاموش مشترک بین سناریوها) و مرحله دوم (تنظیم تولید پس از مشخصشدن سناریو) بررسی میشود. نتیجه: لحاظ عدم قطعیت معمولاً واحدهای بیشتری را بهصورت احتیاطی روشن نگه میدارد. پراکندگی سناریوهای بار و تجدیدپذیر و تصمیمهای احتیاطی واحدها را هم بهصورت تصویری نشان میدهیم.
بخش ۹ — سوئیچینگ بهینه خطوط انتقال (Optimal Transmission Switching)
ایدهای خلافانتظار: گاهی باز کردن عمدی یک خط انتقال، با هدایت جریان به مسیرهای بهتر، کل سیستم را بهبود میدهد. روی پایه DC-OPF و بهصورت مسئله عدد صحیح-مخلوط، وضعیت وصل/قطع هر خط به متغیر تصمیم تبدیل میشود. نکته فنی کلیدی، غیرفعالشدن معادله جریان خط هنگام قطع آن است. معمولاً تعداد خطوط قابل سوئیچینگ محدود میشود تا مسئله عملی بماند. خروجی نشان میدهد سوئیچینگ هوشمندانه چند خط محدود چطور گرفتگی خطوط را کاهش میدهد. وضعیت شبکه و بارگذاری خطوط را پیش و پس از سوئیچینگ بهصورت تصویری کنار هم مقایسه میکنیم.
بخش ۱۰ — کنترل پیوسته توان راکتیو منابع خورشیدی در شبکه توزیع (Inverter Volt/VAR Optimization)
جمعبندی دوره با حرکت از شبکه انتقال به توزیع و حل یک مسئله کاملاً پیوسته و بدون متغیر باینری. منابع خورشیدی با محل و ظرفیت مشخص از قبل نصب شدهاند و تنها تصمیم، تنظیم پیوسته توان راکتیو هر اینورتر است تا ولتاژ گرهها در محدوده مجاز بماند و تلفات کمینه شود. نکته فنی کلیدی، رابطه ظرفیت اینورتر است: توان اکتیو و راکتیو با هم ظرفیت ثابت اینورتر را پر میکنند، پس هرچه تولید توان اکتیو بیشتر باشد، جای کمتری برای توان راکتیو میماند. خروجی نشان میدهد چطور با همان اینورترهای موجود و بدون سرمایهگذاری جدید میتوان پروفایل ولتاژ را بهبود داد و تلفات را کم کرد. در پایان، پروفایل ولتاژ فیدر را پیش و پس از کنترل، در کنار منحنی قابلیت اینورتر، تصویرسازی میکنیم.
نمای کلی مسیر دوره
| بخش | موضوع | مدل پایه |
|---|---|---|
| ۱ | قیود فنی اقتصادی واحدها | UC (MILP) |
| ۲ | پخش بار DC و N-1 | DC |
| ۳ | پخش بار AC و AC-OPF | AC (غیرخطی) |
| ۴ | جایابی باتری | DC-OPF + ذخیره |
| ۵ | مدیریت مصرف | DC-OPF |
| ۶ | توسعه شبکه انتقال | DC-OPF (MILP) |
| ۷ | بهینهسازی چندهدفه | DC-OPF (پارتو) |
| ۸ | عدم قطعیت در UC | UC تصادفی |
| ۹ | سوئیچینگ خطوط | DC-OPF (MILP) |
| ۱۰ | کنترل ولتاژ توزیع | DG units |
دستاوردهای دوره
در پایان این دوره، شرکتکنندگان میتوانند مهمترین مسائل بهینهسازی سیستم قدرت را بهدرستی فرمولبندی کرده و با ابزارهای استاندارد پایتون (مانند Pyomo) مدلسازی و حل کنند. آنها با تفاوت مدلهای DC و AC، مسائل خطی و غیرخطی، و مسائل پیوسته و عدد صحیح آشنا میشوند و میدانند برای هر مسئله کدام رویکرد و سالور مناسب است. علاوه بر مسائل کلاسیک بهرهبرداری مانند آرایش بهینه واحدها و پخش بار بهینه، شرکتکنندگان یاد میگیرند چطور با موضوعات روز مثل ذخیرهسازها، مدیریت مصرف، عدم قطعیت منابع تجدیدپذیر، اهداف متضاد و مسائل شبکه توزیع کار کنند. مهارت مهم دیگر، توانایی تحلیل و تصویرسازی نتایج است: در هر جلسه خروجی مسئله بهصورت نمودار رسم و تفسیر میشود تا تصمیمها قابلفهم و قابلارائه شوند. در مجموع، هر شرکتکننده در پایان دوره مجموعهای از کدهای قابلاجرا برای مسائل واقعی در اختیار دارد که پایهای محکم برای پروژههای پژوهشی و صنعتی او خواهد بود.
یک نمونه کد Pyomo از پایه دوره
پیش از ورود به مسائل پیشرفته، پایهی همهچیز «پخش بار اقتصادی» است: تعیین اینکه هر واحد تولیدی چقدر تولید کند تا هزینه سوخت کمینه شود و تعادل تولید و مصرف برقرار بماند. سه جزء اصلی هر مدل بهینهسازی در همین مثال دیده میشود: متغیر تصمیم (توان هر واحد)، تابع هدف (کمینهکردن هزینه) و قید (تعادل توان).
# پخش بار اقتصادی سه واحد تولیدی با Pyomo
# هدف: کمینهکردن هزینه سوخت با رعایت تعادل توان
from pyomo.environ import (ConcreteModel, Set, Var, Objective, Constraint,
NonNegativeReals, minimize, SolverFactory, value)
# داده واحدها: a,b ضرایب هزینه — Pmin/Pmax حدود تولید (مگاوات)
gens = {
'G1': {'a': 0.110, 'b': 5.0, 'Pmin': 10, 'Pmax': 100},
'G2': {'a': 0.085, 'b': 1.2, 'Pmin': 10, 'Pmax': 100},
'G3': {'a': 0.122, 'b': 1.0, 'Pmin': 10, 'Pmax': 100},
}
demand = 210 # تقاضای کل شبکه (مگاوات)
m = ConcreteModel()
m.G = Set(initialize=list(gens.keys()))
# متغیر تصمیم: توان تولیدی هر واحد
m.P = Var(m.G, domain=NonNegativeReals,
bounds=lambda m, g: (gens[g]['Pmin'], gens[g]['Pmax']))
# تابع هدف: هزینه درجهدوم سوخت
m.cost = Objective(
rule=lambda m: sum(gens[g]['a'] * m.P[g]**2 + gens[g]['b'] * m.P[g]
for g in m.G),
sense=minimize)
# قید تعادل توان: مجموع تولید = تقاضا
m.balance = Constraint(rule=lambda m: sum(m.P[g] for g in m.G) == demand)
# حل مدل (برای هدف غیرخطی از ipopt استفاده میکنیم)
SolverFactory('ipopt').solve(m)
for g in m.G:
print(f"{g}: {value(m.P[g]):.2f} MW")
print(f"هزینه کل: {value(m.cost):.2f}")
چون تابع هزینه درجهدوم است، از solver غیرخطی ipopt استفاده میکنیم؛ اگر تابع هزینه را خطی کنید میتوانید از glpk استفاده کنید. نصب: pip install pyomo و برای solver conda install -c conda-forge ipopt glpk. همین ساختار (متغیر، هدف، قید) در تمام جلسات دوره — از Unit Commitment تا AC-OPF — گسترش مییابد.
سوالات متداول درباره دوره
پیشنیاز این دوره چیست؟
آشنایی مقدماتی با پایتون و مفاهیم پایه سیستم قدرت کافی است. آشنایی قبلی با مدلسازی مسائل بهینهسازی توصیه میشود اما الزامی نیست.
از چه ابزار و solverهایی استفاده میشود؟
مدلسازی با Pyomo در پایتون انجام میشود. بسته به نوع مسئله از solverهای رایگان مانند GLPK و CBC برای مسائل خطی و عدد صحیح و IPOPT برای مسائل غیرخطی استفاده میکنیم.
چه مسائلی در دوره پوشش داده میشود؟
آرایش بهینه واحدها، پخش بار DC و AC، قیود امنیت N-1، جایابی باتری، مدیریت مصرف، توسعه شبکه انتقال، بهینهسازی چندهدفه، عدم قطعیت و سوئیچینگ بهینه خطوط.
خروجی نهایی دوره چیست؟
مجموعهای از کدهای قابلاجرای پایتون برای مسائل واقعی سیستم قدرت که پایهای برای پروژههای پژوهشی و صنعتی است.
💬 سوالات و راهنمایی
سوالی درباره ثبت نام داری؟ با آیدی @pypyid در تلگرام تماس بگیرید.