电气博文传送门
学好电气全靠它,个人电气博文目录(持续更新中…)
题:

例题:

python代码求解 :

思路上面就有,照着敲吧。

主要是为了学习下python 求解优化问题和学习下电网调度。在这之前很少涉足这来。

工具包介绍
非线性规划(scipy.optimize.minimize)
一.背景:
现在项目上有一个用python 实现非线性规划的需求。非线性规划可以简单分两种,目标函数为凸函数 or 非凸函数。

凸函数的 非线性规划,比如fun=x2+y2+x*y,有很多常用的python库来完成,网上也有很多资料,比如CVXPY

非凸函数的 非线性规划(求极值),从处理方法来说,可以尝试以下几种:

1.纯数学方法,求导求极值;

2.使用神经网络,深度学习来处理,可参考反向传播算法中链式求导的过程;

3.寻找一些python库来做,本文介绍scipy.optimize.minimize的使用方法

二.库方法介绍

官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

来看下改方法的入参

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

解释:
fun: 求最小值的目标函数
x0:变量的初始猜测值,如果有多个变量,需要给每个变量一个初始猜测值。minimize是局部最优的解法,所以
args:常数值,后面demo会讲解,fun中没有数字,都以变量的形式表示,对于常数项,需要在这里给值
method:求极值的方法,官方文档给了很多种。一般使用默认。每种方法我理解是计算误差,反向传播的方式不同而已,这块有很大理论研究空间
constraints:约束条件,针对fun中为参数的部分进行约束限制

代码:

# coding=utf-8
from scipy.optimize import minimize
import numpy as np
#目标函数
def fun(args):a1,a2,a3,b1,b2,b3,c1,c2,c3=argsv=lambda x: (a1+a2*x[0]+a3*x[0]*x[0]+b1+b2*x[1]+b3*x[1]*x[1]+c1+c2*x[2]+c3*x[2]*x[2])return vdef con(args):# 约束条件 分为eq 和ineq#eq表示 函数结果等于0 ; ineq 表示 表达式大于等于0d1, d2, d3, d4, d5, d6 ,d7= args1cons = ({'type': 'eq', 'fun': lambda x: d1+d2*x[0]-d3-d4*x[1]},\{'type': 'eq', 'fun': lambda x: d1+d2*x[0]-d5-d6*x[2]},\{'type': 'eq', 'fun': lambda x: x[0]+x[1]+x[2]-d7})return consif __name__ == "__main__":# 定义常量值args = (300,10,0.15,200,20,0.2,100,10,0.3)  #  a1,a2,a3,b1,b2,b3,c1,c2,c3# 设置参数范围/约束条件args1 = (10, 0.3, 20, 0.4, 10, 0.6,320)  # d1, d2, d3, d4, d5, d6,d7cons = con(args1)# 设置x初始猜测值x0 = np.array((100, 50, 100))res = minimize(fun(args), x0, method='SLSQP', constraints=cons)print(res.fun)print(res.success)print(res.x)

结果:
和给出的答案一样的。

解释说明:

目标函数:使三台机组的成本曲线和最小。
args 对应原始成本曲线中的数:(300,10,0.15,200,20,0.2,100,10,0.3)
后面会传进来

def fun(args):a1,a2,a3,b1,b2,b3,c1,c2,c3=argsv=lambda x: (a1+a2*x[0]+a3*x[0]*x[0]+b1+b2*x[1]+b3*x[1]*x[1]+c1+c2*x[2]+c3*x[2]*x[2])return v

约束条件
最优情况: 发电机组1成本曲线对功率求导 =发电机组2成本曲线对功率求导=发电机组3成本曲线对功率求导
为什么是求导 相等 。这个电分里教的有,最基本的,不想解释。
发电机组1功率+发电机组2功率+发电机组3功率=负荷功率

本文约束条件可以表达为:
1.发电机组1成本曲线对功率求导 =发电机组2成本曲线对功率求导
2.发电机组1成本曲线对功率求导 =发电机组3成本曲线对功率求导
3.发电机组1功率+发电机组2功率+发电机组3功率=负荷功率

参数:
d1, d2, d3, d4, d5, d6 表示各发电机组成本曲线求导后的系数。
d7 为负荷功率

def con(args):# 约束条件 分为eq 和ineq#eq表示 函数结果等于0 ; ineq 表示 表达式大于等于0d1, d2, d3, d4, d5, d6 ,d7= args1cons = ({'type': 'eq', 'fun': lambda x: d1+d2*x[0]-d3-d4*x[1]},\{'type': 'eq', 'fun': lambda x: d1+d2*x[0]-d5-d6*x[2]},\{'type': 'eq', 'fun': lambda x: x[0]+x[1]+x[2]-d7})return cons

主函数:
要定义一些数值=
等于说 前面在定义目标函数和约束时全用字母代替,不能出现具体数
。具体数在后面传入。
x0 = np.array((100, 50, 100)) 定义x初始解
res.fun 目标函数值
res.success 是否求得值
res.x 未知数的值

if __name__ == "__main__":# 定义常量值args = (300,10,0.15,200,20,0.2,100,10,0.3)  #  a1,a2,a3,b1,b2,b3,c1,c2,c3# 设置参数范围/约束条件args1 = (10, 0.3, 20, 0.4, 10, 0.6,320)  # d1, d2, d3, d4, d5, d6,d7cons = con(args1)# 设置x初始猜测值x0 = np.array((100, 50, 100))res = minimize(fun(args), x0, method='SLSQP', constraints=cons)print(res.fun)print(res.success)print(res.x)

电网调度优化学习笔记:不考虑经济损耗的调度方式(算例代码求解)相关推荐

  1. 嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么

    嵌入式算法移植优化学习笔记5--CPU,GPU,TPU,NPU都是什么 一.什么是CPU? 二.什么是GPU? 三.什么是NPU? 四.什么是TPU? 附: 随着AI的广泛应用,深度学习已成为当前AI ...

  2. 发展规划可视化 电网_智能电网调度优化及可视化设计

    智能电网调度优化及可视化设计 摘要:调度自动化作为保障经济运行可靠性和电网安全性的支柱,随着电网快 速发展,电网管理需求和运行也在不断变化:作为重要支撑的调度自动化为了适 应这些要求,升级.改革已经成 ...

  3. mysql性能优化-学习笔记

    mysql性能优化-学习笔记

  4. 数学不好是原罪——凸优化学习笔记(个人学习记录汇总)

    中科大凸优化课程学习笔记 中科大凌青老师的课(现中山大学教授):中科大-凸优化 形而上学,不行退学,共勉!博客为个人手写笔记整理存档,不喜勿看. 凸优化学习笔记(一) 持续更新--

  5. Python+cplex运筹优化学习笔记(三)-营养膳食选择

    Python+cplex运筹优化学习笔记(三)-营养膳食选择 前言 首先呢,说明一下,本文只是自己在学习过程中运用到的例子,然后规整总结一下,随便写写自己所做的一些笔记.小白学习,有不对的地方还望大家 ...

  6. 凸优化学习笔记 11:对偶原理 拉格朗日函数

    前面讲了凸优化问题的定义,以及一些常见的凸优化问题类型,这一章就要引入著名的拉格朗日函数和对偶问题了.通过对偶问题,我们可以将一些非凸问题转化为凸优化问题,还可以求出原问题的非平凡下界,这对复杂优化问 ...

  7. 凸优化学习笔记:QP及SOCP问题

    凸优化学习笔记:QP及SOCP问题 QP问题 定义 是什么 几何意义 QP.QCQP.LP之间的关系 例子 最小二乘及回归问题 多面体间距离 方差定界问题 基于随机费用的线性规划(考虑随机变量的优化问 ...

  8. 凸优化学习笔记 15:梯度方法

    前面的章节基本上讲完了凸优化相关的理论部分,在对偶原理以及 KKT 条件那里我们已经体会到了理论之美!接下来我们就要进入求解算法的部分,这也是需要浓墨重彩的一部分,毕竟我们学习凸优化就是为了解决实际当 ...

  9. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

最新文章

  1. 13、Kubernetes核心技术Helm
  2. Directx11教程(42) 纹理映射(12)-简单的bump mapping
  3. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...
  4. Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”
  5. c++17(18)-static_cast
  6. 关于活动对像要注意的问题
  7. [导入]九个笑话能告诉你九个人生的道理
  8. Java查看字节码工具
  9. hog函数的用法 python_Python中的基本函数及常用用法简析
  10. FFmpeg安卓平台编译
  11. Linux下DNS服务管理
  12. 【PostgreSQL-9.6.3】数据库的启动、登录、退出、关闭
  13. [转]使用 HTML5 索引型数据库的待办事项简要列表
  14. 高中全国计算机信息学竞赛,高中信息学奥赛考什么
  15. C语言如何求球的体积和表面
  16. windows中查看端口占用情况以及删除端口
  17. 计算机一些简单快捷键,最全的电脑常用快捷键大全 电脑快捷键使用大全
  18. 和rgb画面质量谁好_从张艺谋到雷军,谁吹爆了透明屏神话?
  19. the little schemer 笔记(0)
  20. FLink学习笔记:12-Flink 的Table API的常用操作

热门文章

  1. 前端为什么有的接口明明是成功回调却执行了.catch失败回调_Web前端:ES6是干什么的?(下)...
  2. Middle of the Contest
  3. Sasha and Sticks
  4. netstat命令查看套接字信息
  5. Python基础day03【字符串(定义、输入输出、常用方法)、列表(定义、基本使用、增删改查、嵌套)、元组】
  6. 一次C端线上缓存问题的总结
  7. java.util.concurrent 包下面的所有类
  8. bugku——web 做题记录
  9. 从给定的N个正数中选取若干个数之和最接近M
  10. 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)