python实现最速下降法

 更新时间:2020-03-25 02:16:27   作者:佚名   我要评论(0)

本文实例为大家分享了python实现最速下降法的具体代码,供大家参考,具体内容如下
代码:


from sympy import *
import numpy as np
def backtracking_line_search

本文实例为大家分享了python实现最速下降法的具体代码,供大家参考,具体内容如下

代码:

from sympy import *
import numpy as np
def backtracking_line_search(f,df,x,x_k,p_k,alpha0):
  rho=0.5
  c=10**-4
  alpha=alpha0
  replacements1=zip(x,x_k)
  replacements2=zip(x,x_k+alpha*p_k)
  f_k=f.subs(replacements1)
  df_p=np.dot([df_.subs(replacements1) for df_ in df],p_k)
  while f.subs(replacements2)>f_k+c*alpha*df_p:
    alpha=rho*alpha
    replacements2 = zip(x, x_k +alpha * p_k)
  return alpha
def stepest_line_search(f,x,x0,alpha0):
  df = [diff(f, x_) for x_ in x]
  x_k=x0
  alpha=alpha0
  replacements=zip(x,x_k)
  len_df = sqrt(np.sum([df_.subs(replacements) ** 2 for df_ in df]))
  while len_df>1e-6:
    p_k=-1*np.array([df_.subs(replacements) for df_ in df])
    alpha = backtracking_line_search(f, df, x, x_k, p_k, alpha)
    x_k=x_k+alpha*p_k
    replacements = zip(x, x_k)
    len_df=np.sum([df_.subs(replacements)**2 for df_ in df])
  return x_k
if __name__=="__main__":
  init_printing(use_unicode=True)
  x1 = symbols("x1")
  x2 = symbols("x2")
  x = np.array([x1, x2])
  f = 100 * (x2 - x1 ** 2)**2 + (1 - x1) ** 2
  ans=stepest_line_search(f, x, np.array([1.2, 1]), 1)
  print "the minimal value in point:",ans

分析:

这个采用的是backtracking line search来寻找alpha。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • python实现梯度下降法
  • python梯度下降算法的实现
  • python梯度下降法的简单示例
  • 基于随机梯度下降的矩阵分解推荐算法(python)
  • python实现梯度下降算法
  • python+numpy+matplotalib实现梯度下降法
  • python实现随机梯度下降法
  • Python编程实现线性回归和批量梯度下降法代码实例
  • Python语言描述随机梯度下降法
  • python实现随机梯度下降(SGD)

相关文章

  • python实现最速下降法

    python实现最速下降法

    本文实例为大家分享了python实现最速下降法的具体代码,供大家参考,具体内容如下 代码: from sympy import * import numpy as np def backtracking_line_search
    2020-03-25
  • Java this super代码实例及使用方法总结

    Java this super代码实例及使用方法总结

    这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ 一、this this是自身的一个对象,代表对象本身,可以理解为:指向
    2020-03-25
  • python使用梯度下降算法实现一个多线性回归

    python使用梯度下降算法实现一个多线性回归

    python使用梯度下降算法实现一个多线性回归,供大家参考,具体内容如下 图示: import pandas as pd import matplotlib.pylab as plt import numpy as np # Rea
    2020-03-25
  • 详解nginx请求头数据读取流程

    详解nginx请求头数据读取流程

    在上一篇文章中,我们讲解了nginx是如何读取请求行的数据,并且解析请求行的。本文我们则主要讲解nginx是如何读取客户端发送来的请求头的数据,并且解析这些数据的。
    2020-03-25
  • PyQt5+python3+pycharm开发环境配置教程

    PyQt5+python3+pycharm开发环境配置教程

    1.下载PyQt 官方网站:http://www.riverbankcomputing.com/software/pyqt/download5 我的操作系统是64位的,安装的是Python3.4.3,所以我选择下载:PyQt5-5.4.1-gpl
    2020-03-25
  • Java 5亿整数大文件怎么排序

    Java 5亿整数大文件怎么排序

    问题 给你1个文件bigdata,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数: 6196302 3557681 6121580 2039345 2095006 1746773 7934312 2
    2020-03-25
  • Golang通过小程序获取微信openid的方法示例

    Golang通过小程序获取微信openid的方法示例

    为什么要获取小程序的 openid 在开发微信小程序的过程中,小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。那
    2020-03-25
  • 详解Python 实现 ZeroMQ 的三种基本工作模式

    详解Python 实现 ZeroMQ 的三种基本工作模式

    简介 引用官方说法:ZMQ(以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单、简洁和性能更高。 是
    2020-03-25
  • 微信小程序 flexbox layout快速实现基本布局的解决方案

    微信小程序 flexbox layout快速实现基本布局的解决方案

    问题描述 flexbox layout ——弹性盒子布局。弹性盒子可以快速的对小程序进行布局。一般传统的小程序布局方法对内容量少的页面而言很方便,但对页面比较复杂的来讲
    2020-03-25
  • 解决Android Studio Gradle Metadata特别慢的问题

    解决Android Studio Gradle Metadata特别慢的问题

    如下所示: 更改build.gradle buildscript { repositories { // jcenter() // jcenter(){ url 'http://jcenter.bintray.com/'} maven{url 'http://m
    2020-03-25

最新评论