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

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


一、问题描述

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

二、数学模型

变量

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

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

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

以上三个变量为连续变量

参数

负荷: 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_{u,0}=0

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值