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

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

59f34a4e7dc69e96a92441b3d4f16845.png

一、二分法

函数详见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的使用。

618016fea37c4a539923ce2499333598.png

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

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


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

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

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

5014d42547e5ebaf6884f5e3d8ccc19c.png

问题: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就可以了 但是你要先关注我哦~

03d552fa59640999b78c24219c1c77e6.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs怎么更改编译的堆空间_再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度...

前言长期以来困扰我们的一个问题就是构建速度&#xff0c;AndroidStudio 的构建速度严重影响 Android 开发者的工作效率&#xff0c;尤其是更新一个版本号&#xff0c;导致整个项目重新构建&#xff0c;在网络慢的情况下&#xff0c;这是无法忍受的。buildSrc 这种方式&#xf…

java map的遍历

转载地址&#xff1a;http://www.cnblogs.com/shenliang123/archive/2012/08/28/2660705.html -------------------------------------------------------------------------------------------------------------------- java中的遍历 import java.util.Collection; import j…

android悬浮功能实现,Android实现系统级悬浮按钮

本文实例为大家分享了Android系统级悬浮按钮的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下具体的需求1、就是做一个系统级的悬浮按钮&#xff0c;就像iPhone 桌面的那个悬浮按钮效果一样&#xff0c;能随意拖动&#xff0c;并且手一放开&#xff0c;悬浮按钮就自动…

oracle decode_错过血亏!一文搞懂Oracle锁相关视图及相关操作

本文主要研究锁的相关视图&#xff0c;以及锁的相关操作&#xff0c;通过视图查锁的问题。 一、v$transaction视图第一个视图是v$transaction&#xff0c;就是Oracle数据库所有活动的事务数&#xff0c;所有活动的事务每一个活动的事务在这里有一行。v$transactionXIDUSN表示当…

Linux文件系统与命令行

什么是命令行? 接收键盘命令并将其传给操作系统执行的程序(用于输入和管理命令的程序),统称命令行,也叫: Shell&#xff0c;几乎所有Linux发行版都提供了一个 Shell 程序,叫做: Bash (Bourne-Again Shell, 因为最初的 Shell 是由 Steve Bourne 编写的原始 Unix 程序, Again 表…

android 自定义菜单栏,GitHub - earthWo/AndroidBottomNavigation: android 底部菜单栏,自定义样式,自定义菜单数量,添加滚动动画和水波纹动画...

AndroidBottomNavigation截图使用方法gradle:compile com.whitelife.library:library:1.0.1maven:com.whitelife.librarylibrary1.0pomandroid:id"id/bottom_navigation"android:layout_width"match_parent"android:layout_height"56dp"android:…

windows怎么打开python_windows怎么打开Python

Windows中运行Python的两种运行方式认识编程环境 1 直接命令行启用Python。当然&#xff0c;如果直接在cmd中输入python&#xff0c;需要在windows中的path环境变量中做好设置。 此时&#xff0c;cmd中运行python就可以出现 “>>>” 符号。意味着python进入了交互运行…

AOE网与关键路径简介

前面我们说过的拓扑排序主要是为解决一个工程能否顺序进行的问题&#xff0c;但有时我们还需要解决工程完成需要的最短时间问题。如果我们要对一个流程图获得最短时间&#xff0c;就必须要分析它们的拓扑关系&#xff0c;并且找到当中最关键的流程&#xff0c;这个流程的时间就…

Java 集合体系详解——List体系有序集合

引言 面向对象语言对事物的体现必然是以对象的形式&#xff0c;Java工程师为了方便多多个对象的操作&#xff0c;就对对象进行存储&#xff0c;集合就是存储对象的一种方式&#xff0c;他们的底层都是基于不同的数据结构。当然集合和数组一样都是容器&#xff0c;数组也是可以存…

alert闪一下就没了_尾部贯穿式镀铬银饰条除了丑,还能闪瞎眼

尾部贯穿式镀铬银饰条&#xff0c;在2010年代成为诸多汽车品牌车型争相采用的新世纪新标配&#xff0c;配以双边排气&#xff0c;让整个车尾看起来层次感强烈&#xff0c;视觉收窄&#xff0c;几十万的奥迪A8L有&#xff0c;十几万的斯柯达速派有&#xff0c;A级车有&#xff0…

docker 指定网卡_Docker | Docker技术基础梳理(五) Docker网络管理

为什么需要容器的网络管理&#xff1f;容器的网络默认与宿主机、与其他容器相互隔离&#xff0c;且容器中可以运行一些网络应用&#xff0c;比如nginx、web应用、数据库等&#xff0c;如果需要让外部也可以访问这些容器中运行的网络应用&#xff0c;那么就需要配置网络来实现。…

Android安装两次才成功,Android应用从市场安装完成打开与桌面打开,被启动两次的问题...

问题描述&#xff1a;1、从Android应用市场下载并安装应用&#xff0c;安装完成后&#xff0c;当前界面下方会出现“打开”按钮&#xff0c;这时候我们点击“打开”&#xff0c;会启动应用&#xff0c;进入到应用的启动页面&#xff0c;然后进入应用的主界面&#xff0c;这个时…

事务保存点

在SQL Server中使用rollback会回滚所有的未提交事务状态&#xff0c;但是有些时候我们只需要回滚部分语句&#xff0c;把不需要回滚的语句提到事务外面来&#xff0c;虽然是个方法&#xff0c;但是却破坏了事务的ACID。 SQL中使用事务保存点 即可解决这个问题. 一.SQL 事务中存…

鼎信诺审计前端取数工具_给2019前端的5个建议

2019 农历新年即将到来&#xff0c;是时候总结一下团队过去一年的技术沉淀。过去一年我们支撑的数据相关业务突飞猛进&#xff0c;其中两个核心平台级产品代码量分别达到30万行和80万行&#xff0c;TS 模块数均超过1000个&#xff0c;协同开发人员增加到20人。由于历史原因&…

Hadoop HA

HA概念&#xff1a; high avalability 高可用性。 hadoop 1.x非ha设计 Secondnode对元数据的可靠性有了保障&#xff0c;但服务的可用性不高。 即&#xff1a;当Namenode节点宕机了&#xff0c;整个hadoop就不能使用了&#xff0c;影响了client的使用。 hadoop 2.x的ha设计 新…

紫光展锐处理器有那些手机用_酷派将发千元5G手机,国产紫光展锐加持,主打性价比...

↑↑↑点击上方蓝字订阅每日最新热点手机资讯数年之前&#xff0c;“中华酷联”是国产智能手机的四大代表。不过随着越来越多的强力竞争者入局&#xff0c;中兴、酷派、联想渐渐衰败&#xff0c;仅剩华为屹立手机行业顶端。但是酷派似乎从未想过放弃&#xff0c;最近便要发布一…

jelly bean android,Jelly Bean占Android系统份额突破10%

Android系统份额图(腾讯科技配图)腾讯科技讯(清雨)北京时间1月4日消息&#xff0c;据国外媒体报道&#xff0c;微博)周四发布最新数据显示&#xff0c;Android 4.1版本和Android 4.2版本的Jelly Bean在Android系统中的份额超过了10%&#xff0c;另外Android 4.0版本的ICS的份额…

妲己机器人需要什么条件才能使用_estar零封YTG:平头哥快乐电竞,只有妲己没亚瑟,差评...

2020KPL秋季赛常规赛第8周最后1个比赛日的第2场比赛&#xff0c;结果已经尘埃落定了。而最终的比赛结果是&#xff1a;estarpro轻松以3比0的大比分零封战胜YTG。有一说一&#xff0c;这一场比赛真的是毫无悬念啊&#xff0c;甚至双方交手的第1小局比赛&#xff0c;estarpro只用…

python离线录音转文字_Python将文字转成语音并读出来的实例详解

前言 本篇文章主要介绍&#xff0c;如何利用Python来实现将文字转成语音。将文字转成语音主要有两种不同的实现方法&#xff1a;先将文字转成语音&#xff0c;然后再通过读取语音实现发音、直接调用系统内置的语音引擎实现发音&#xff0c;后一种方法的实现主要利用第三方库。 …

魅族15系统是android,魅族15系列评测:性能够用王者荣耀优化

硬件性能&#xff1a;中配够用&#xff0c;高配优秀硬件方面&#xff0c;文章前面的参数表已经写得很清楚&#xff0c;魅族15搭载的是高通骁龙660处理器&#xff0c;并配备4GB的运行内存&#xff1b;魅族15 Plus则搭载三星Exynos 8895&#xff0c;配备6GB运行内存。在目前的移动…