我是Python新手,我想将CMA-ES功能应用于参数优化。我在R中使用了CMA_ES包,这个例子的实现简单明了。现在Python中的实现对我来说并不是那么清楚。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
itr=np.array([ 803.3333,788.3333,779.5000,765.8333,753.3333,735.8333,
717.6666,704.6666,691.6666])
Tcell=np.array([39.5333,38.5499, 37.7999,37.5999,
38.3333,37.4166,37.4166,37.3833,36.5666])
#### THE MODEL######
def pvwatts2(Pdc0,gammapdc,Tref):
return itr/1000*Pdc0*(1+gammapdc*(Tcell-Tref))
r=(pvwatts2(75,-0.005,25))
####THE ORIGINAL DATA########
P=np.array([55.7666,54.6817,54.2812,
53.6679,52.6567,51.4856,50.4057,49.3098,48.8929])
#####RMSE#########
def RMSE(gammapdc):
return np.sqrt(((pvwatts2(75,gammapdc,25)-P)**2).mean())
print(RMSE(-0.005))# This is the value of RMSE 0.253590052077
现在我想借助Python中的CMAES来最小化RMSE。我知道gammapdc的理想值应该在-0.005左右,其中RMSE的值最小。
########################### MINIMIZING THE RMSE WITH CMA_ES########
import cma
help(cma.fmin)
对我而言,目前尚不清楚如何使用该函数获取gamapdc的值以最小化RMSE。任何建议将不胜感激。我可以使用任何可重复的示例吗?
答案 0 :(得分:1)
如果要优化一维函数,则不需要协方差矩阵自适应,因此CMA-ES可能不是您想要的。 CMA-ES仍然提供“步长调整”,即使对于一维来说也可能很有趣,而且这非常简单,因此您可以自己实施,检查有关第五成功规则的文献。
我建议您从scipy.optimize
API:https://docs.scipy.org/doc/scipy/reference/optimize.html开始,然后看第一部分标量函数优化。有很多方法更适合您的问题。
答案 1 :(得分:0)
Python中的CMA_ES优化并不支持一维优化。所以解决方案是添加一个额外的参数