电力系统优化算法实际应用介绍
优化问题可以分成凸(convex)问题和非凸问题。凸问题都是可以找到最优解的,只是算力问题,小问题可以用现有的解法器非常快的找到最优解,大型问题则一般要用一些定制的分解算法。非凸问题则要具体情况具体讨论,如果只是带有整数变量的话一般也可以找到不错的解。
电力系统这边常用的优化就是线性规划(LP),二次规划(QP),和整数规划(MIP)。LP和QP常用在解最优调度上,MIP用来做日前机组组合(unit commitment)。这几种问题都是有很成熟的算法,比如多边形法(simplex)和branch&bound法,和解法器(solver),比如Gurobi和Cplex。此外还有一种电力系统专有的问题是交流潮流计算(ACOPF),属于非凸问题,可以用梯度下降法找到次优解,而工业界这些年来也找到了许多启发式算法来提高解的速度和质量。最近10年以Caltech Steven Low为代表的网络控制研究领域也提出了一些ACOPF的凸优化近似解法,比如用到了正定规划(semi-definite programming),只是假设具有局限性,目前看来并不被工业界认可。
下面再讲一下优化分解算法(decomposition),电力领域的优化研究主要就是建模和分解大型优化问题,问题的维度主要体现在空间维度(spatial),时间维度(temporal),和不确定性上(uncertainty)。常用的分解算法有primal / dual分解法,这个可以参考斯坦福Stephen Boyd的课件,思路就是利用问题本身的结构通过固定偶和变量(coupling variable)把一个大问题分拆成可以独立平行解决的小问题(subproblem),再把小问题的结果汇总起来update coupling variable(使用梯度/次梯度法,或者平面切割法),以此循环来解决整个问题(master problem),在与平行计算的结合基础上通常可以带来级数级别的速度提升,比如原来需要数小时甚至数日才能解决的问题通过分解+平行计算,可以在数分钟内解决。这类分解算法常用于空间分拆和情景分拆(scenario decomposition)。
另一种常用的分解算法就是动态规划(dynamic programming),用来解决长时间尺度下带有不确定性的优化控制问题,比如水电规划的经典算法就是stochastic dual dynamic programming。这方面Gatech的Alex Shapiro写过一些不错的资料。最后从学习上在搞懂一些基本的经典优化算法远离比如梯度下降和多边形法外,答主觉得优化在电力方面的应用主要体现在对primal和dual问题之间关联的以及KKT condition的理解,比如primal约束对应的dual是该约束的sub-gradient也就是该约束的price,很多优化分解问题都可以通过这种对这种关系的理解来解决。另一个难点在于对multi-stage decision和uncertainty的理解,比如要理解nonanticipatory control和model predictive control的区别,这个问题甚至可以延伸到当前大火的机器学习上(优化控制上的approximate dynamic programming),这方面答主看过不少资料,感觉还是Shapiro写的最好。
作者:匿名用户
链接:https://www.zhihu.com/question/319315868/answer/685661271
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。