我是使用Python的新手。这些天我正在尝试学习新的优化算法和python。
Python中的CMA-ES优化算法源代码可以在这里找到: 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
x y z
----------------------
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
非线性模型:a(1) - a(5)是参数:
z = a(1)*y^a(2)*x^a(3)+a(4)*x^a(5)
答案 0 :(得分:1)
你可以尝试
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))
或修改以使用您的求解器。但是,该功能非常可怕,并且有很多参数。