首页 > 编程语言 >优化算法——拟牛顿法之DFP算法

优化算法——拟牛顿法之DFP算法

时间:2023-06-28 15:35:57浏览次数:37  
标签:yk 牛顿 DFP Hk 算法 result fun import x0

优化算法——拟牛顿法之DFP算法_牛顿法

优化算法——拟牛顿法之DFP算法_拟牛顿法_02


优化算法——拟牛顿法之DFP算法_牛顿法_03



4、求解具体的优化问题


    求解无约束优化问题


优化算法——拟牛顿法之DFP算法_牛顿法_04


  1. function.py
#coding:UTF-8
'''
Created on 2015年5月19日

@author: zhaozhiyong
'''

from numpy import *

#fun
def fun(x):
    return 100 * (x[0,0] ** 2 - x[1,0]) ** 2 + (x[0,0] - 1) ** 2

#gfun
def gfun(x):
    result = zeros((2, 1))
    result[0, 0] = 400 * x[0,0] * (x[0,0] ** 2 - x[1,0]) + 2 * (x[0,0] - 1)
    result[1, 0] = -200 * (x[0,0] ** 2 - x[1,0])
    return result
  1. dfp.py
#coding:UTF-8
'''
Created on 2015年5月19日

@author: zhaozhiyong
'''

from numpy import *
from function import *

def dfp(fun, gfun, x0):
    result = []
    maxk = 500
    rho = 0.55
    sigma = 0.4
    m = shape(x0)[0]
    Hk = eye(m)
    k = 0
    while (k < maxk):
        gk = mat(gfun(x0))#计算梯度
        dk = -mat(Hk)*gk
        m = 0
        mk = 0
        while (m < 20):
            newf = fun(x0 + rho ** m * dk)
            oldf = fun(x0)
            if (newf < oldf + sigma * (rho ** m) * (gk.T * dk)[0,0]):
                mk = m
                break
            m = m + 1
        
        #DFP校正
        x = x0 + rho ** mk * dk
        sk = x - x0
        yk = gfun(x) - gk
        if (sk.T * yk > 0):
            Hk = Hk - (Hk * yk * yk.T * Hk) / (yk.T * Hk * yk) + (sk * sk.T) / (sk.T * yk)
        
        k = k + 1
        x0 = x
        result.append(fun(x0))
    
    return result
  1. testDFP.py
#coding:UTF-8
'''
Created on 2015年5月19日

@author: zhaozhiyong
'''

from bfgs import *
from dfp import dfp

import matplotlib.pyplot as plt  

x0 = mat([[-1.2], [1]])
result = dfp(fun, gfun, x0)

n = len(result)
ax = plt.figure().add_subplot(111)
x = arange(0, n, 1)
y = result
ax.plot(x,y)

plt.show()

5、实验结果



优化算法——拟牛顿法之DFP算法_优化算法_05






标签:yk,牛顿,DFP,Hk,算法,result,fun,import,x0
From: https://blog.51cto.com/u_16161414/6572382

相关文章

  • 优化算法——拟牛顿法之BFGS算法
    一、BFGS算法简介  BFGS算法是使用较多的一种拟牛顿方法,是由Broyden,Fletcher,Goldfarb,Shanno四个人分别提出的,故称为BFGS校正。  同DFP校正的推导公式一样,DFP校正见博文“优化算法——拟牛顿法之DFP算法”。对于拟牛顿方程:。function.py#codin......
  • 优化算法——拟牛顿法之L-BFGS算法
    四、L-BFGS算法中的方向的计算方法五、实验仿真lbfgs.py#coding:UTF-8fromnumpyimport*fromfunctionimport*deflbfgs(fun,gfun,x0):result=[]#保留最终的结果maxk=500#最大的迭代次数rho=0.55sigma=0.4H0=eye(shape(x0)[0])......
  • 简单易学的机器学习算法——EM算法
    (图片来自参考文章1)Python代码#coding:UTF-8'''Createdon2015年6月7日@author:zhaozhiyong'''from__future__importdivisionfromnumpyimport*importmathasmt#首先生成一些用于测试的样本#指定两个高斯分布的参数,这两个高斯分布的方差相同sigma=6miu_......
  • 简单易学的机器学习算法——AdaBoost
    是符号函数。具体过程可见下图所示:(图片来自参考文件1)三、AdaBoost算法流程  上述为AdaBoost的基本原理,下面给出AdaBoost算法的流程:(来自参考文献2)四、实际的例子  AdaBoost算法是一种具有很高精度的分类器,其实AdaBoost算法提供的是一种框架,在这种框架......
  • 优化算法——截断梯度法(TG)
    一、L1正则的表达形式  在机器学习中,几乎无人不知无人不晓L1正则与L2正则,L1正则与L2正则都有参数控制的作用,对模型起到约束的作用,防止过拟合。但是L1正则与L2正则也有区别,L1正则更容易产生稀疏解,使得某些参数等于0,而L2正则却没有这样的优势,只能使得参数趋近于0。利用这样的优势......
  • ​​动态规划算法
    以下是一个用C++实现的动态规划算法来解决最长子序列问题(LongestCommonSubsequence)的示例代码:#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intlongestCommonSubsequence(stringtext1,stringtext2){intm=text1.length();......
  • 【算法】根据输入的正整数,重新排列生成一个更大的数字
    需求:创建一个函数,该函数取一个正整数,并返回下一个较大的数字,该数字可以通过重新排列其数字来形成。例如:12===>21513==>5312017===>2071如果数字不能重新排列以形成更大的数字,则返回-1:9===>-1111=>-1531=>-1......
  • YBTOJ 1.2贪心算法
    A.奶牛晒衣服......
  • 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟
    强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解1.核心词汇深度确定性策略梯度(deepdeterministicpolicygradient,DDPG):在连续控制领域经典的强化学习算法,是深度Q网络在处定性”表示其输出的是一个确定的动作,......
  • 强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定
    强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解项目实战1、定义算法1.1定义模型!pipuninstall-yparl!pipinstallparlimportparlimportpaddleimportpaddle.nnasnnimportpaddle.nn.functionalasFcl......