如何将CMAES优化应用于Python中任意用户定义的目标函数?

2024-05-26 20:46:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我对使用Python是新手。这些天我在努力学习新的优化算法和python。在

CMA-ES优化算法Python源代码可在此处找到: CMA-ES.py

我已经安装了所有必需的Python包(numpy、matplotlib、winpython等等)。运行源代码提供的测试函数也很容易,例如

            >>> import cma
            >>> res = cma.fmin(cma.fcts.rosen, 4*[-1],1, ftarget=1e-6, restarts=3, verb_time=0, verb_disp=500, seed=3)

期望的定制目标函数来自数据的非线性最小二乘拟合:

数据集:23x3

^{pr2}$

非线性模型:a(1)--a(5)为参数:

 z = a(1)*y^a(2)*x^a(3)+a(4)*x^a(5)

Tags: 数据pyimportnumpy算法源代码esmatplotlib
1条回答
网友
1楼 · 发布于 2024-05-26 20:46:25

你可以试试

data = """
1100.21 57.66   1.8
1157.88 57.79   1.7
1272.85 58.03   1.67
1330.34 58.22   1.67
1389.   57.69   1.7
1590.   57.01   1.67
1820.   55.42   1.6
2049.   59.35   1.5
2308.   58.32   1.56
2596.   57.28   1.6
2711.   57.13   1.368
2826.   55.61   1.33
2883.   54.79   1.315
2940.   53.78   1.325
3001.   54.41   1.3
3117.   55.93   1.2495
3291.   57.15   1.28
3377.   58.05   1.25
3522.   58.41   1.31
3725.   57.61   1.31
3899.   53.55   1.195
4015.   51.22   1.178
4188.   50.89   1.185"""
data = np.array([line.split() for line in data.strip().split('\n')], dtype='f8')
x, y, z = data[:, 0], data[:, 1], data[:, 2]

def obj(a):
    z_hat = a[0]*y**a[1]*x**a[2]+a[3]*x**a[4]
    return ((z-z_hat)**2).sum()

import scipy.optimize as opt
print opt.minimize(obj, np.ones(5))

或修改以使用解算器。但是,这个函数非常可怕,而且有很多参数。在

相关问题 更多 >

    热门问题