衡量不同分布间距离
在构建模糊集的方式上,除了利用矩信息之外,另一种思路是衡量真实分布与经验分布之间的距离。在这种情况下,我们以经验分布为中心,将与经验分布不超过某一距离的所有分布纳入模糊集中。于是,如何定义两个概率分布间的距离成了关键,这一度量不仅需要有统计学意义,还应尽量让相应的分布鲁棒优化模型可处理。
Wasserstein 度量
目前很受欢迎的一种度量方式是 Wasserstein 距离。
分布鲁棒优化与机器学习
电力系统方面应用
在电力系统中,分布鲁棒优化(distributionallyrobust optimization,DRO)是一种既不需要假设具体概率分布又不完全忽略概率信息的方法,可以针对性地用于解决由风光不确定性引起的电力系统安全问题。
基于Wasserstein距离的分布鲁棒在风光不确定方面的建模,推荐给大家一个研究文献《Distributionally Robust Chance-Constrained Approximate AC-OPF with Wasserstein Metric 》,在该文献中,给出了Wasserstein 球半径的计算公式:
其中,
球半径计算python代码实现如下:
def obj_c(alpha: float)-> float:
# test = np.absolute(self.thet)
test = np.abs(self.samples-self.mu)
J = np.sqrt( np.absolute( (1/(2*alpha))*(1+np.log((1/self.m)*np.sum(np.exp(alpha*test**2))))) )
# Artificial constraint (for BFGS):
if alpha<0:
J=100
return J
if self.known_support:
Dd = np.sqrt(2)*self.support
else:
alphaX = minimize(obj_c, x0=1, method='BFGS', tol=1e-8)
C = 2*obj_c(alphaX.x)
Dd = C
self.epsilon = Dd*np.sqrt((2/self.m)*np.log(1/(1-self.beta)))
很多同学比较困惑,虽然知道了Wasserstein球半径,但是仍然不清楚如何求解风光等不确定变量对系统的影响。因为还有更大的一个“弯”需要搞清楚,就揭开了分布鲁棒的“神秘面纱”。
风光等不确定性变量存在一个样本集,将该样本集进行标准化处理,具体操作方式如下:
对应的示意图如下:
该转换过程对应的python代码如下:
if self.n==1:
SIG = (self.samples.std())
sigi = SIG**(-1)
mu = np.mean(self.samples)
thet = np.expand_dims(np.multiply(self.samples - mu, sigi), axis=1).T
else:
SIG = (self.samples.std(axis=1))
sigi = SIG**(-1)
mu = np.reshape(np.mean(self.samples, axis=1), (self.n, 1))
thet = np.multiply(self.samples - mu, sigi[:,np.newaxis])
self.mu = mu
self.SIG = np.reshape(SIG, (self.n, 1))
self.sigi = np.reshape(sigi, (self.n, 1))
self.thet = thet
利用分布鲁棒数学理论研究成果(详见文献《Distributionally robust stochastic optimization with wasserstein distance》):
最终形成如下结论:
从而方便了进一步求解,因此,分布鲁棒的核心是要通过数学工具将不易于求解的变量问题转化为易于求解的问题,这个转换至关重要。在日常的学习积累过程中,关注该方面数学研究成果很有助益,不同的变量环境和研究假设下,存在不同的分布鲁棒约束转换方法,这也是大家争相研究的热点。
想了解更多程序?按照下面教程查看程序目录!