今天给大家分享一下算法,用python来实现最优化算法。废话不多说,直接上代码:

一、二分法

函数详见rres,此代码使该算法运行了两次

def asdf(x):    rres=8*x**3-2*x**2-7*x+3    return rresi=2left=0right=1while i>0 :    i = i-1    ans = 0.1    mid1 = (left + right + ans) / 2    mid2 = (left + right - ans) / 2    a=asdf(mid1)    c=asdf(mid2)    if a > c :        right = mid1    else :        left = mid2b=(left+right) / 2print("左极限=%s,右极限=%s,极小值x=%s"%(left,right,b))
左极限=0.45,右极限=0.775,极小值x=0.6125

收获:

这是我第一个实现的代码。学习完该算法以后,逻辑框架基本上就有了,剩下需要明确的就是对应的python的语言。

于是我就开始了查找“如何定义函数”,“循环体”和“if条件语句”的格式(https://blog.csdn.net/qq_39407518/article/details/79822498)“数学符号”,以及print的使用。

1.def是python中指定义,一般用来定义函数,如果需要深度学习搭建网络可用来定义网络。值得注意的一点是

return必须要加在函数后面另起一行。

不太清楚为什么,但是如果没有加的话,那个函数公式就是一个花瓶,就像一个结果输不出去。

2.最坑的就是逻辑。一开始逻辑没理清楚,或者说在代码上有疏漏,导致我将left和right放在了循环体里,结果可想而知。不过也是因为这个错误,我知道pycharm中的debug怎么用,挺简单的,百度一下就出来了。

3.不知道什么原因,看的莫烦视频中的print多个变量一起输出是没有办法在我的pycharm中使用的,出来的结果很奇怪。可能是因为我是win10不是ios吧。print如果多个变量一起输出必须是print("名字:%s,名字2:%s"%(a,b))结果输出就是名字:a ,名字2:b


问题:1、为什么要加return?

return的意思是输出这个def里面任意一个变量值作为结果显示。一般情况而言,是输出函数的关系式的命名,这样当你调用这个函数的时候,变量对应的函数值才能显示出来,否则只运行没有结果,不会有效果。


二、格点法——三点等分法

import numpy as npdef qwer(x):    third = np.exp(x) - 5*x    return thirdleft = 1right = 2mid1 =float(left+right) / 2mid2 = (left+mid1) / 2mid3 = (mid1+right) /2a = qwer(mid1)b = qwer(mid2)c = qwer(mid3)i = 5while i > 0:    i=i-1    if a > b:        if c > b :            #b            right = mid1            mid1 = mid2            a=b            mid2 = (left + mid1) / 2            mid3 = (mid1 + right) / 2            b = qwer(mid2)            c = qwer(mid3)        else:#b>c            #c            left = mid1            mid1 = mid3            a = c            mid2 = (left + mid1) / 2            mid3 = (mid1 + right) / 2            b = qwer(mid2)            c = qwer(mid3)    else:#b>a            if a > c:                #C                left = mid1                mid1 = mid3                a = c                mid2 = (left + mid1) / 2                mid3 = (mid1 + right) / 2                b = qwer(mid2)                c = qwer(mid3)            else:#b>a&c>a                # a                left = mid2                right = mid3                mid2 = (left + mid1) / 2                mid3 = (mid1 + right) / 2                b = qwer(mid2)                c = qwer(mid3)print("最小值=%s"%mid1)print("函数值=%s"%a)
最小值=1.609375函数值=-3.047189552275773

关于python中数据变量。第一遍运行结果出现很明显不对,于是我采用了debug。

结果发现,mid1处一直为1而不是1.5,于是就开始了解数据变量。起初我猜测python默认所有变量为整型,但是根据二分法的结果我意识到此猜测不对,所以要改整个file的变量格式没有必要。

所以我就在mid1式子前面加了一个float,结果就显示为1.5了。但是如果我将整个式子用()括起来,前面加float,结果还是1。我不太理解为什么。

不过我知道了python的数据格式是根据输入量决定的,也就是说你的输入量如果是整型,那么与其直接相关的计算输出结果一定是整型,而且还是不采用进位的整型。

在我没有采用+float/+.0这两种方法之前,mid1~3全部是整型。

left = 1.0right = 2.0mid1 =(left+right) / 2

或者不再mid1前面加float,直接将输入量后面点个点就行。


三、Fibonacci法

def fibonacci(n):    i=0    a = 0    b = 1    for i in range(n):        i=i+1        c = a+b        a = b        b = c    return cdef bn(x):    ert = x**2 - 6*x + 2    return ertz = 2p = 0left = 0.00000right = 10.00000L1 = right - leftwhile z < 100:    m = fibonacci(z)    l = L1/m    k = 1.000/m    if k < 0.03:        print("n=%s,Fn=%s"%(z,m))        L2 = l*fibonacci(z-1)        t = left + L2        r = right -L2        while p < 3:            p = p + 1            l3 = t - r            e= bn(t)            o = bn(r)            if e>o :                right = t                t = r                r = left + l3            else:#o>e                left = r                r = t                t = right - l3        break    else:        z = z + 1okk=(left+right)/2okky=bn(okk)print(left)print(right)print("极小值x=",okk)print("极小值y=",okky)

四、黄金分割法

def gold(x):    gg= x**2 - 6*x + 9    return ggleft = 1right = 7ans = 0.4a = left + 0.618 * (right - left)b = left + 0.382*(right - left)gga = gold(a)ggb = gold(b)i = 0while i < 7:    print("i=%s" % i)    print("left=%s,right=%s" % (left, right))    print("x左=%s,x右=%s" % (a, b))    print("y左=%s,y右=%s" % (ggb, gga))    c = right - left    if c > 0.4:        i = i + 1        if gga > ggb:            right = a            a = b            b = left + 0.382*(right - left)            gga = ggb            ggb = gold(b)        else:#gga

五、间接法——二次插值法

def yy(x):    y=x**4-4*x**3-6*x**2-16*x+4    return ydef xing(xm1,xm2,xm3,fm1,fm2,fm3):    yxxx=0.5000*((xm2**2-xm3**2)*fm1+(xm3**2-xm1**2)*fm2+(xm1**2-xm2**2)*fm3)/((xm2-xm3)*fm1+(xm3-xm1)*fm2+(xm1-xm2)*fm3)    return yxxxx1 = -1.0000f1 = yy(x1)x3 = 6f3 = yy(x3)x2 = 0.50000*(x1+x3)f2 = yy(x2)xp = xing(x1,x2,x3,f1,f2,f3)fp = yy(xp)a = abs(xp-x2)while abs(xp-x2) > 0.05000:    a = abs(xp - x2)    if xp > x2:        if fp > f2:            x3=xp            f3=fp            xp = xing(x1, x2, x3, f1, f2, f3)            fp = yy(xp)            print("ans=%s" % a)            print("left=%s,right=%s" % (x1, x3))            print("x*=%s,fp*=%s" % (xp, fp))            print("x2=%s,f2=%s" % (x2, f2))            print("******************")        else:#f2>fp            x1 = x2            f1 = f2            x2 = xp            f2 = fp            xp = xing(x1, x2, x3, f1, f2, f3)            fp = yy(xp)            print("ans=%s" % a)            print("left=%s,right=%s" % (x1, x3))            print("x*=%s,fp*=%s" % (xp, fp))            print("x2=%s,f2=%s" % (x2, f2))            print("******************")    else:#xp f2:            x1 = xp            f1 = fp            xp = xing(x1, x2, x3, f1, f2, f3)            fp = yy(xp)            print("ans=%s" % a)            print("left=%s,right=%s" % (x1, x3))            print("x*=%s,fp*=%s" % (xp, fp))            print("x2=%s,f2=%s" % (x2, f2))            print("******************")        else:            x3 = x2            f3 = f2            x2 = xp            f2 = fp            xp = xing(x1, x2, x3, f1, f2, f3)            fp = yy(xp)            print("ans=%s" % a)            print("left=%s,right=%s" % (x1, x3))            print("x*=%s,fp*=%s" % (xp, fp))            print("x2=%s,f2=%s" % (x2, f2))            print("******************")

六、间接法——牛顿法

def fd(x):    y = 4*x**3-12*x**2-12*x-16    return ydef fdd(x):    ys = 12*x**2-24*x-12    return ysi = 1x0 = 3.00000ans = 0.001while i < 7:    fd0 = fd(x0)    fdd0 = fdd(x0)    if abs(fd0) > ans:        x1 = x0 - (fd0/fdd0)        x0 = x1        print("次数:%s,所得的值x:%s"%(i,x1))        i = i + 1    else:#fd0<0.001        print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")        print("Bingo!顺利通关!祝您开学愉快!")        print("Boss  X=%s"%x0)        break

一开始while里面,导致run不出来。继而,debug也没法用。

后来在网上一查才知道 “没联网”+“没选断点”。最后想尝试将else里面的内容输出来,结果发现run以后被刷屏了。于是改成i<7以后还是不行,于是想着加一个break跳出循环,结果成效了。

然后刚刚由debug了一下,才知道原来是i+1在if里面,因为没有办法+1,所以i=6一直存在,就不断循环。因为加break也好,i+1也好,都可以。

如若需要python相关学习资料:例如“人工智能”、“爬虫”、“数据库”、“web开发”等类似学习参考资料书籍。关注小编,私信即可。

1、如何获取

2、关注小编

私信小编:回复 Python 即可领取资料

头条怎么私信

点击头条,点击右下角“我的”

在个人界面点击关注,如果你关注了,点击“小杆货”就可以了

私信回复:python就可以了 但是你要先关注我哦~

c4.5算法python实现_算法:用Python实现—最优化算法相关推荐

  1. slope one 推荐算法python 代码_基于协同的SlopeOne推荐算法原理介绍和实现

    Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 的协同过滤推荐算法. --文章概要 该篇文章主要介绍Slope One算法.Slope ...

  2. 算法的优缺点_一文总结机器学习各算法优缺点

    关注上方"数据挖掘工程师",选择星标, 关键时间,第一时间送达! 转自Datawhale本期主题是详细总结一下机器学习各大常用算法的优缺点,十分值得收藏目录 正则化算法(Regul ...

  3. 算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结

    本文从实践的角度对scikit-learn SVM算法库的使用做一个小结.scikit-learn SVM算法库封装了libsvm 和 liblinear 的实现,仅仅重写了算法了接口部分. 1. s ...

  4. l bfgs算法java代码_数值优化:理解L-BFGS算法

    译自<Numerical Optimization: Understanding L-BFGS>,本来只想作为学习CRF的补充材料,读完后发现收获很多,把许多以前零散的知识点都串起来了.对 ...

  5. 学习python课程_想学习Python吗? 这是我们的免费4小时互动课程

    学习python课程 Python is a popular, versatile and easy-to-learn language. It's the go-to language for AI ...

  6. 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集

    2018年python薪资 我打算发布此收藏集 (My intention with publishing this collection) Last year I only used Medium ...

  7. python竞赛_浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  8. 初学者怎么自学python编程_怎样自学python编程?从零开始学习python,400集免费教程!...

    作为小白,在学习Python的时候,必然会走一定的弯路,有人在弯路上走丢了,有人走出了弯路.我就是属于还未走出弯路的同学,所以我想谈谈我的Python学习之路. 01先了解一下什么是python‍? ...

  9. 哪个专业学python语言_想学Python编程?你真的适合吗?

    原标题:想学Python编程?你真的适合吗? 有的人说我想学什么.我想干什么,很多时候都是头脑发热,单凭一腔热血,可是这样的路即便走上去你又能坚持多久呢?所以,每每有人问我学Python编程怎么样,我 ...

  10. 比python好_这就是为什么Python比R更好的原因

    目录 介绍 这就是为什么 摘要 介绍 虽然说Python比R更好对我而言是正确的,但对您来说可能并非如此. 当然,您可能会因为各种原因认为R比Python更有用. 即使您反对我的声明,我仍然希望开始进 ...

最新文章

  1. 【Qt】错误处理:error: undefined reference to `qMain(int, char**)‘
  2. 数据类型与数据传送指令
  3. ZZ:Business Analysis Career Path
  4. 自由自在意式手工冰淇淋式的生活方式
  5. VirtualBox安装linux mint教程
  6. Mahout快速入门教程
  7. android主流技术框架,android开发现在流行什么IDE和开发框架?
  8. 无限级分类及生成json数据
  9. JavaScript——原生js实现瀑布流
  10. python小白从哪来开始-python 从小白开始 - 内置函数
  11. 详解Bootstrap列表组组件
  12. (C语言)用C语言编写小游戏——三子棋
  13. [转]软件企业的新三十六计
  14. Python数字图像处理
  15. jdk8官网下载地址
  16. java中文转英文_Java中文转换为英文拼音
  17. windows7下彻底卸载/删除微软拼音输入法2007
  18. elementUI Tree组件实现双击事件
  19. 有哪些支持 HomeKit 的智能家居生态值得推荐?
  20. LabVIEW开发太阳能测测系统

热门文章

  1. matlab aic sic,sic是什么意思_sic的翻译_音标_读音_用法_例句_爱词霸在线词典
  2. HashMap 源码阅读
  3. java简单词法分析器(源码下载)
  4. 导入ansys的实体怎么进行parameter_ANSYS在线缆线束设计中的仿真应用
  5. C--数据结构--树的学习
  6. python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载
  7. c语言程序兔子反之问题,C语言解决兔子产子问题代码及解析
  8. mysql对称连接什么意思_对称加密与非对称加密的区别是什么
  9. Centos 7安装与配置nagios监控(一)
  10. 有关UITableView--cell复用问题