本文参考阿里_MindOpt_求解器_优化_决策智能智能调度案例,该案例使用阿里MindOPT进行求解,本文使用Cplex求解器进行求解。
一、问题描述
虚拟电厂场景下,光储荷经济性调度。针对单个用户、单个光伏和单个储能设备的虚拟电厂场景,在满足用户用电需求的情况下,全天(24小时)的经济最优目标。
二、数学模型
变量
充电变量:
放电变量:
储能设备能量状态:
以上三个变量为连续变量
参数
负荷: load
功率:power
电价:price
充电效率:charge_efficiency
放电效率:discharge_efficiency
储能单次充放电限制:nominal_power
目标函数
最小化经济性最优目标:
其中costbase为不使用储能的情况下的花费:
约束条件
储能能量状态:
储能初始状态为0:
储能状态更新:
三、Python代码
from docplex.mp.model import Model
import numpy as np
np.random.seed(0)
model = Model(name="muti-users")
# 创建用户、时间、状态时间
users = range(0, 2)
times = range(0, 24)
times0 = range(0, 25)
# 创建负荷、功率 shape(2,24) 对应2个用户 24个小时
load = np.random.uniform(0, 1, size=(2, 24))
power = np.random.uniform(0, 1, size=(2, 24))
# 电价
price = {
t: 0.54 if t in [17, 18, 19, 20, 21] else 0.22 for t in times
}
# 充放电效率
charge_efficiency = 0.92
discharge_efficiency = 0.95
# 储能单次充放电限制
nominal_power = 0.8
# 不使用储能情况下花费
cost_base = sum((load[user, t] - power[user, t]) * price[t] for user in users for t in times)
# x = {(user, t): model.continuous_var(lb=0, ub=nominal_power, name=f'x[{user}_{t}]') for user in users for t in times}
# y = {(user, t): model.continuous_var(lb=-nominal_power, ub=0, name=f'y[{user}_{t}]') for user in users for t in times}
# soc = {(user, t): model.continuous_var(lb=0, ub=1, name=f'soc[{user}_{t}]') for user in users for t in times0}
x = model.continuous_var_matrix(users,times,lb=0,ub=nominal_power)
y = model.continuous_var_matrix(users,times,lb=-nominal_power,ub=0)
soc = model.continuous_var_matrix(users,times,lb=0,ub=1)
# 目标函数,总花费
total_cost = model.sum(
((load[user, t] - power[user, t] + x[user, t] + y[user, t]) * price[t]) / cost_base for user in users for t in
times)
model.minimize(total_cost)
# 约束条件,初始状态状态为0
for user in users:
model.add_constraint(
soc[user, 0] == 0
)
# 约束条件,储能状态更新
for user in users:
for t in times:
if t < 23:
model.add_constraint(
soc[user, t + 1] == soc[user, t] + x[user, t] * charge_efficiency + y[user, t] / discharge_efficiency
)
model.solve()
print("-----------------Display---------------")
print("Charging(+) / Discharging (-) Solution (only print non-zero results):")
for user in users:
for t in times:
if x[user, t].solution_value > 0 or y[user, t].solution_value < 0:
print(f'Time {t}, User {user}, Solution: {x[user, t].solution_value + y[user, t].solution_value}')
print("-----------------Evaluation Metrics---------------")
print("Direct Cost = ", total_cost.solution_value)
四、求解结果
结果:(因负荷和功率使用随机生成浮点数,不符合实际情况,结果可能出现较大出入)
最终目标Cost为0.57,即使用最优储能调度方案电费为不使用储能电费的65%,节省43%电费。