Cplex +Python下的虚拟电厂智能调度实例(附代码)

本文参考阿里_MindOpt_求解器_优化_决策智能智能调度案例,该案例使用阿里MindOPT进行求解,本文使用Cplex求解器进行求解。


本文为单用户场景,多用户场景见(多用户)Cplex +Python下的虚拟电厂智能调度实例(附代码)_椰吉酒的博客-CSDN博客


一、问题描述

虚拟电厂场景下,光储荷经济性调度。针对单个用户、单个光伏和单个储能设备的虚拟电厂场景,在满足用户用电需求的情况下,短周期(4个小时)的经济最优目标。

二、数学模型

变量

充电变量: X=\left ( x_{t} \right )\in \left [ 0,\alpha \right ]

放电变量:Y=\left ( y_{t} \right )\in \left [ -\alpha ,0 \right ]

储能设备能量状态:S=\left ( s_{t} \right )\in \left [ 0,1 \right ]

以上三个变量为continuous_var_list连续变量列表

参数

负荷: load

功率:power

电价:price

充电效率:charge_efficiency

放电效率:discharge_efficiency

储能单次充放电限制:nominal_power

目标函数

最小化经济性最优目标:

minimize\: \; Cost=\sum_{t=1}^{T}\left ( load\left ( t \right )-power\left ( t \right ) +x\left ( t \right )+y\left ( t \right )\right )\times price\left ( t \right )\div costbase

其中costbase为不使用储能的情况下的花费:

costbase = \sum_{t=1}^{T}\left ( load\left ( t \right )-power\left ( t \right ) \right )\times price\left ( t \right )

约束条件

储能能量状态:

储能初始状态为0:s_{0}=0

储能状态更新:s_{t}=s_{t-1}+c_{1}\cdot x_{t}+\frac{y_{t}}{c_{2}}

三、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%电费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值