liudinglldd 2023-04-06 17:57 采纳率: 22.2%
浏览 70
已结题

如何利用Gurobi建立储能充放电模型?

利用Gurobi对储能进行建模

利用Gurobi求解电力系统的优化问题,在构建储能的充放电过程时遇到问题。
定义变量:

ESS = model.addVars(1, T, vtype=GRB.CONTINUOUS, name="ESS")
for t in range(T):
    ESS[0, t].setAttr(GRB.Attr.LB, -100)  # 小于0放电
 ESS[0, t].setAttr(GRB.Attr.UB, 100)  # 大于0充电
SOC = model.addVars(1, T, lb=0.2, ub=1.0, vtype=GRB.CONTINUOUS, name="SOC") 

约束条件按照下面的方式构建可以求解:

for t in range(T):
 if t == 0:
        model.addConstr(SOC[0, 0] == SOC_init, name="initial_soc")
 else:
        model.addConstr(SOC[0, t] == SOC[0, t - 1] + ESS[0, t] / 400, name="charge_soc")

约束条件按照下面这个方式设置则无法求解:

for t in range(T):
 if t == 0:
        model.addConstr(SOC[0, 0] == SOC_init, name="initial_soc")
 else:
       if ESS[0, t] >= 0.0:
             model.addConstr(SOC[0, t] == SOC[0, t - 1] + ESS[0, t] * 0.95 / 400, name="charge_soc")
        else:
             model.addConstr(SOC[0, t] == SOC[0, t - 1] + ESS[0, t] / (0.95 * 400), name="discharge_soc")

实际充放电模型是下面这种方式,如何可以解决这个问题?

  • 写回答

5条回答 默认 最新

  • zuogle 2023-04-06 19:04
    关注

    该回答引用ChatGPT GPT-4

    运行结果

    img

    img

    代码如下

    
    import gurobipy as gp
    from gurobipy import GRB
    
    # 参数设置
    T = 24
    SOC_init = 0.5
    
    # 创建模型
    model = gp.Model("energy_storage")
    
    # 定义变量
    ESS = model.addVars(1, T, vtype=GRB.CONTINUOUS, name="ESS")
    for t in range(T):
        ESS[0, t].setAttr(GRB.Attr.LB, -100)  # 小于0放电
        ESS[0, t].setAttr(GRB.Attr.UB, 100)   # 大于0充电
    SOC = model.addVars(1, T, lb=0.2, ub=1.0, vtype=GRB.CONTINUOUS, name="SOC")
    
    # 定义条件变量,表示充电状态
    is_charging = model.addVars(1, T, vtype=GRB.BINARY, name="is_charging")
    
    # 添加约束
    for t in range(T):
        if t == 0:
            model.addConstr(SOC[0, 0] == SOC_init, name="initial_soc")
        else:
            # 充电状态约束
            charge_expr = SOC[0, t] - (SOC[0, t - 1] + ESS[0, t] * 0.95 / 400)
            model.addGenConstrIndicator(is_charging[0, t], 1, charge_expr, GRB.EQUAL, 0)
    
            # 放电状态约束
            discharge_expr = SOC[0, t] - (SOC[0, t - 1] + ESS[0, t] / (0.95 * 400))
            model.addGenConstrIndicator(is_charging[0, t], 0, discharge_expr, GRB.EQUAL, 0)
    
            # 充放电状态约束
            model.addGenConstrIndicator(is_charging[0, t], 1, ESS[0, t], GRB.GREATER_EQUAL, 0)
    
    # 添加目标函数(请根据您的问题自定义目标函数)
    model.setObjective(0, GRB.MINIMIZE)
    
    # 求解模型
    model.optimize()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 创建了问题 4月6日

悬赏问题

  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)