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 VS2022 C++的相关代码问题咨询
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥30 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码