本文参考阿里_MindOpt_求解器_优化_决策智能智能调度案例,该案例使用阿里MindOPT进行求解,本文使用Cplex求解器进行求解。
本文为单用户场景,多用户场景见(多用户)Cplex +Python下的虚拟电厂智能调度实例(附代码)_椰吉酒的博客-CSDN博客
一、问题描述
虚拟电厂场景下,光储荷经济性调度。针对单个用户、单个光伏和单个储能设备的虚拟电厂场景,在满足用户用电需求的情况下,短周期(4个小时)的经济最优目标。
二、数学模型
变量
充电变量:
放电变量:
储能设备能量状态:
以上三个变量为continuous_var_list连续变量列表
参数
负荷: load
功率:power
电价:price
充电效率:charge_efficiency
放电效率:discharge_efficiency
储能单次充放电限制:nominal_power
目标函数
最小化经济性最优目标:
其中costbase为不使用储能的情况下的花费:
约束条件
储能能量状态:
储能初始状态为0:
储能状态更新:
三、Python代码
from docplex.mp.model import Model
import random
# 设置随机种子,保证运行结果一致
random.seed(0)
# 4个时间段
time = 4
# 5个状态
time1 = 5
# 用户负荷
load = [round(random.uniform(0, 1), 2) for _ in range(time)]
# 用户功率
power = [round(random.uniform(0, 1), 2) for _ in range(time)]
# 每个时间段的电价
price = [0.54, 0.22, 0.32, 0.24]
# 充放电效率
charge_efficiency = 0.91
discharge_efficiency = 0.95
# 储能单次充放电限制
nominal_power = 0.8
model = Model(name="abc")
# 创建连续变量列表,充电变量x,放电变量y,储能设备能量状态soc
x = model.continuous_var_list(time, lb=0, ub=nominal_power, name="x")
y = model.continuous_var_list(time, lb=-nominal_power, ub=0, name="y")
soc = model.continuous_var_list(time1, lb=0, ub=1, name="soc")
# 不使用储能情况下的花费
cost_base = sum(((load[t] - power[t]) * price[t]) for t in range(time))
# 总花费
total_cost = model.sum(((load[t] - power[t] + x[t] + y[t]) * price[t] / cost_base) for t in range(time))
# 求解最小值
model.minimize(total_cost)
# 初始状态约束
model.add_constraint(soc[0] == 0)
# 电池状态更新约束
for t in range(time):
model.add_constraint(soc[t + 1] == soc[t] + x[t] * charge_efficiency + y[t] / discharge_efficiency)
model.solve()
print("-----------------Display---------------")
print("Charging(+) / Discharging (-) Solution:")
for t in range(time):
print('Time{}:Solution:'.format(t),x[t].solution_value+y[t].solution_value)
for t in range(time1):
print('Time{}:State-of-Charge {}'.format(t,soc[t].solution_value))
print("-----------------Evaluation Metrics---------------")
print("Cost={}".format(total_cost.solution_value))
四、求解结果
结果:
时段1:不进行储能操作
时段2:充电80%
时段3:放电69.1%
时段4:不进行储能操作
最终目标Cost为0.65,即使用最优储能调度方案电费为不使用储能电费的65%,节省35%电费。