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日

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示