当前位置: 首页 > article >正文

Electricity Market Optimization 探索系列(一)


本文参考链接:Linear Programming Mini Example

先从一个线性规划的例子说起:

问题背景:
现在需要使用两台发电机满足用户的用电需求,发电机一的发电功率上限是 6MW,发电机二的发电功率上限是 4MW,发电机一的度电成本是0.015,发电机二的度电成本是0.03,用电需求是8 MW,求这两台发电机应该发多少电,满足需求的同时成本最小(我知道很简单,但是先听我说完)

min ⁡ ∑ i ∈ [ G ] c i p i s.t. ∑ i ∈ [ G ] p i = D 0 ≤ p i ≤ P ‾ i ∀ i ∈ [ G ] \begin{align} \min \quad & \sum_{i\in[G]}c_i p_i \\ \text{s.t.} \quad & \sum_{i\in[G]}p_i = D \\ & 0 \le p_i \le \overline{P}_i && \forall i \in [G] \end{align} mins.t.i[G]cipii[G]pi=D0piPii[G]
怎么用代码实现上面的模型呢?见如下代码:

import gurobipy as gp
from gurobipy import GRB
import numpy as np

n_generators = 2 # G
p_lim = np.array([6,4]) # MW
cost = np.array([0.015,0.03]) # $/kWh
D = 8 # MW

# 创建模型并隐去模型初始信息
m = gp.Model()
m.setParam("OutputFlag", 0)

# 两个决策变量分别为发电机一和发电机二的发电功率,这两决策变量的下界都是0
p = m.addVars(n_generators, name="p")
m.update()
# 供需平衡约束
m.addConstr(gp.quicksum(p.values()) == D)

# 两台发电机的最大发电功率约束
# 写法一:
# for i in range(n_generators):
#     m.addConstr(p[i] == [0, p_lim[i]])
# 写法二:
m.addConstrs(p[i] == [0, p_lim[i]] for i in range(n_generators))

# 添加目标函数
# 写法一:
# m.setObjective(sum(p[i]*cost[i]*1000 for i in range(n_generators)), GRB.MINIMIZE)
# 写法二:
m.setObjective(gp.LinExpr(cost * 1000, list(p.values())), GRB.MINIMIZE)

m.optimize()

# 打印最优解
status = m.Status
if status == GRB.OPTIMAL:
    print("The model is optimal.")
elif status == GRB.INFEASIBLE:
    print("The model is infeasible.")
elif status == GRB.UNBOUNDED:
    print("The model is unbounded.")
else:
    print(f"Optimization ended with status {status}.")
print()

# Objective value
objective = m.ObjVal
print(f"Objective value {objective:.1f}.\n")

print("Variables values:")
# Print the values of all variables
for v in m.getVars():
    print(f"{v.VarName} = {v.X}")

至于 gurobi 的语法可以看看我的其他博客:
Gurobi之tupledict 和 tuplelist
Gurobi中quicksum的使用


http://www.kler.cn/a/528733.html

相关文章:

  • 比较热门的嵌入式项目
  • C语言数组编程实例
  • TypeScript 运算符
  • SQLite Update 语句详解
  • Python 梯度下降法(二):RMSProp Optimize
  • 87.(3)攻防世界 web simple_php
  • 【SQL】SQL注入知识总结
  • 【Java异步编程】CompletableFuture实现:异步任务的合并执行
  • 跨平台的客户端gui到底是选“原生”还是web
  • Vue.js组件开发-实现全屏幻灯片左右切换特效
  • C# 语言基础全面解析
  • 网站快速收录:利用网站导航优化用户体验
  • Pandas基础07(Csv/Excel/Mysql数据的存储与读取)
  • Linux抢占式内核:技术演进与源码解析
  • Cubemx文件系统挂载多设备
  • C#接口(Interface)
  • AD中如何画插件的封装
  • ECharts 样式设置
  • LabVIEW无线齿轮监测系统
  • 【LeetCode 刷题】回溯算法-组合问题
  • Jenkins未在第一次登录后设置用户名,第二次登录不进去怎么办?
  • c#aot做跨平台动态库
  • 16.[前端开发]Day16-HTML+CSS阶段练习(网易云音乐五)
  • 【2025年更新】1000个大数据/人工智能毕设选题推荐
  • Android逆向(Apktool)
  • 【机器学习理论】朴素贝叶斯网络