优化算法——坐标上升法

一、坐标上升法算法原理

更新过程为每次固定除αi\alpha _i以外的参数,求得满足条件的αi\alpha _i,直到算法收敛,具体的算法过程如下所示:

(图片来自参考文献1)

不断按照上述的过程,直到算法收敛。下图是算法在整个过程中的更新曲线:

代码如下:

'''
Date: 20160406
@author: zhaozhiyong
'''
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = -(X**2)
Z2 = -(Y**2)
Z = 1.0 * (Z1 + 3 * Z2 + 2 * X * Y)+6.0

plt.figure()

CS = plt.contour(X, Y, Z)

a = []
b = []

a.append(2.0)
b.append(2.0)

j = 1

for i in xrange(200):
    a_tmp = b[j-1]
    a.append(a_tmp)
    b.append(b[j-1])

    j = j+1

    b_tmp = a[j-1] / 3
    a.append(a[j-1])
    b.append(b_tmp)

plt.plot(a,b)

plt.title('Coordinate Ascent')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

二、坐标上升法在函数优化中的应用

最终的结果为:

代码如下:

#!/bin/python
'''
Date: 20160406
@author: zhaozhiyong
'''

def f(x):
    x_1 = x[0]
    x_2 = x[1]
    x_3 = x[2]

    result = -(x_1*x_1)-2*(x_2*x_2)-3*(x_3*x_3)+2*x_1*x_2+2*x_1*x_3-4*x_2*x_3+6

    return result


if __name__ == "__main__":
    #print "hello world"
    err = 1.0e-10
    x = [1.0, 1.0, 1.0]
    f_0 = f(x)
    while 1:
        #print "Hello"
        x[0] = x[1] + x[2]
        x[1] = x[0] / 2 - x[2]
        x[2] = x[0] / 3 - 2 * x[1] / 3

        f_t = f(x)

        if (abs(f_t - f_0) < err):
            break

        f_0 = f_t

    print "max: " + str(f_0)
    print x

参考文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GAN&CV

手把手教你创建自己的object detector

本文译自:http://www.hackevolve.com/create-your-own-object-detector/

1731
来自专栏云时之间

深度学习与神经网络:mnist数据集实现手写数字识别

对于mnist数据集,具体的一些介绍我这里就不搬运过来了,这里我直接说我们如何在TensorFlow上使用mnist数据集.

38411
来自专栏chenjx85的技术专栏

超参数搜索——网格搜索和随机搜索

我们在搜索超参数的时候,如果超参数个数较少(三四个或者更少),那么我们可以采用网格搜素,一种穷尽式的搜索方法。

1283
来自专栏目标检测和深度学习

手把手教你搭建目标检测器-附代码

1252
来自专栏素质云笔记

caffe︱ImageData层、DummyData层作为原始数据导入的应用

Part1:caffe的ImageData层 ImageData是一个图像输入层,该层的好处是,直接输入原始图像信息就可以导入分析。 在案例中利用Image...

68910
来自专栏应兆康的专栏

“西瓜书”——第三章_线性模型(笔记)

线性模型形式简单、易于建模,许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。 ? ? ? ? ?

42015
来自专栏机器学习算法工程师

手把手教你搭建目标检测器-附代码

翻译:刘威威 编辑:祝鑫泉 前 言 本文译自:[http://www.hackevolve.com/create-your...

3454
来自专栏企鹅号快讯

用keras搭建3D卷积神经网络

资源: 3D卷积神经网络相关博客:http://blog.csdn.net/lengxiaomo123/article/details/68926778 ker...

7247
来自专栏Python小屋

Python使用扩展库numpy计算矩阵加权平均值

本文介绍Python扩展库numpy的函数average()的用法。 >>> import numpy as np # 创建二维矩阵 >>> x = np.ma...

3555
来自专栏数值分析与有限元编程

列主元消去法解方程组

高斯消去法解方程组较为简单,然而如果在消去过程中出现0主元或者是主元非常小的话,消去法将失败或者数值不稳定。这时可以采用选主元的方法,进行处理。下面给出列主元消...

4029

扫码关注云+社区

领取腾讯云代金券