优化算法——坐标上升法
时间:2022-05-04
本文章向大家介绍优化算法——坐标上升法,主要内容包括一、坐标上升法算法原理、二、坐标上升法在函数优化中的应用、参考文章、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一、坐标上升法算法原理
更新过程为每次固定除αialpha _i以外的参数,求得满足条件的αialpha _i,直到算法收敛,具体的算法过程如下所示:
不断按照上述的过程,直到算法收敛。下图是算法在整个过程中的更新曲线:
代码如下:
'''
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
参考文章
- Jexus 负载均衡
- 用.NET Framework 2.0创建 Form设计器[翻译]
- jquery事件绑定
- Fontello:免费Web-font 图标大集合(font-face 图标集)
- 通过 wp-config.php 禁止安装、升级或编辑WordPress 主题与插件
- 利用VS2005中的Code Snippets提高开发效率
- 用schemaSpy制作数据库文档
- WordPress 投票插件Post Ratings,可在谷歌搜索显示星级投票(附中文包下载)
- Spark学习笔记——共享变量
- 如何升级Mono
- 使用信息架构视图访问数据库元数据
- Java 基础标识符
- 在Windows上玩转Mono/Linux
- Active Record和Domain Object + Dao
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法