CMAES优化方法测试--python

进行配准的时候发现有些研究说CMAES优化方法算是status-of-art的方法,找了一下相关的CMAES实现。在python中可以直接使用cma库,通过pip isntall cma就可以进行安装。由于CMAES是通过协方差优化,优化变量至少是2D的。example中都是使用cma.ff中的目标函数,如果是自定义的目标函数需要参照以下写,目标函数带一个参数x0, 注意需要是list对象:

import cma
import numpy as np

def obj_func(x0):
    """
    z(x,y) = 10* sin(sqrt(x^2+y^2))/ sqrt(x^2+y^2)
    :param x0:
    :return:
    """
    l = np.linalg.norm(x0)  # sqrt(x^2+y^2)
    f = -10 * np.sin(l) / l
    return f

然后在optimize中传入这个目标函数即可。在cma.CMAEvolutionStrategy([1,2], 0.5)注意输入初始化的参数,数据大小与木目标函数的输入一致。

def test_cma():
    es = cma.CMAEvolutionStrategy([1,2], 0.5)
    es.optimize(obj_func)
    es.logger.plot()
    print(es.result_pretty())

if __name__ == '__main__':
    test_cma()

最终输出:

CMAEvolutionStrategyResult(xbest=array([2.37504437e-08, 1.24986992e-08]), fbest=-10.0, evals_best=469, evaluations=510, iterations=85, xfavorite=array([ 1.35373800e-08, -1.54743957e-08]), stds=array([1.81745542e-08, 2.55343095e-08]), stop={'tolfun': 1e-11})

表示在[2.37504437e-08, 1.24986992e-08]位置取到最小值fbest=-10.0.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值