【问题标题】:Python Gurobi: How can I implement a maximum value of a decision variable in the objective function?Python Gurobi:如何在目标函数中实现决策变量的最大值?
【发布时间】:2020-02-15 00:04:47
【问题描述】:

希望有人可以帮助我。我正在开发一个优化模型,在该模型中,随着时间的推移 (t) 和不同的交易 (s) 最小化电力成本。 (其中:标准功率(p)*电费(c)=电费)。

现在我正在尝试在目标函数中实现一个成本组件,该成本组件基于发生的最大功耗(有些类似:max(P[s,t]))。但是,np.max() 返回错误,因为 P[s,t] 是 np.max() 不支持的类。 Gurobi 函数 gp.max_(P[s,t]) 也给出了不支持的类错误。有人有解决方案吗?

代码:

obj = gp.quicksum(p[s, t] * Cost_elect[t]e for t in range(T) for s in range(S)) + gp.max_(p_batt_ch[s,t]*fixed_cost for t in range(T) for s in range(S))

【问题讨论】:

    标签: python optimization gurobi


    【解决方案1】:

    您需要将max 约束分配给一个新的辅助变量,并将此变量放入目标而不是实际约束。

    maxobj = model.addVar()
    max_constr = model.addConstr(maxobj == gp.max_(p_batt_ch[s,t] * fixed_cost
                                 for t in range(T) for s in range(S)))
    
    obj = gp.quicksum(p[s,t] * Cost_elect[t] for t in range(T) for s in range(S)) + maxobj)
    
    

    Gurobi documentation

    【讨论】:

    • 您好,谢谢!这确实按我的要求工作,但我没有预料到一个非常重要的部分。我想要在时间 t 对每个 s 求和的列的最大值。所以基本上是正常的代码: P_batt_charge['total'] = P_batt_ch.sum(axis= 1) Pmax = P_batt_charge['total'].max() 在“正常”脚本中很容易,但我无法让它在其中工作优化。你也有解决这个问题吗? :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多