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.pswp.cn/news/539381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539381.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

comsol臨時文件夾中有不支持的字符_文件名中不能包含的字符

文件名是為了方便人們區分計算機中的不同文件&#xff0c;而給每個文件設定一個指定的名稱。由文件主名和擴展名組成。DOS操作系統規定文件名由文件主名和擴展名組成&#xff0c;文件主名由1~8個字符組成&#xff0c;擴展名由1~3個字符組成&#xff0c;主名和擴展名之間由一個小…

linux 星號 通配符,如何在bash中轉義通配符/星號字符?

簡短的回答像其他人所說的那樣 - 你應該總是引用變量來防止奇怪的行為。所以使用echo“$ foo”代替echo $ foo。長期回答我確實認為這個例子值得進一步解釋&#xff0c;因為它的表面看起來比它看起來更多。我可以看到你的困惑在哪里&#xff0c;因為在你運行你的第一個例子后&a…

PYTHON面試

大部分的面試問題&#xff0c;有最近要找事的老鐵嗎&#xff1f;python語法以及其他基礎部分可變與不可變類型&#xff1b; 淺拷貝與深拷貝的實現方式、區別&#xff1b;deepcopy如果你來設計&#xff0c;如何實現&#xff1b; __new__() 與 __init__()的區別&#xff1b; 你知…

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…

python循環for...in_python循環while和forin實例

python 循環while和for in簡單實例#!/uer/bin/env python# _*_ coding: utf-8 _*_lucknumber 5b 0while b <3:print(guss count:,b)a int(input(you guse number))if a > lucknumber:print (youaerbiger)elif a lucknumber:print (youare righet)break #跳出這個層級…

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 表…

freeMarker 遍歷 list,map,listmap

List List<String> clientSourceDatanew ArrayList<String>();clientSourceData.add("field字段");clientSourceData.add("title標題");ftl&#xff1a; <#if clientSourceData?exists><#list clientSourceData as key> <tr&g…

qtableview不選中_如何選中/取消選中QTableView并觸發setData()

我有一個自定義的QTableModel&#xff0c;我在PyQt中使用QTableView顯示它。我有一些字段設置為可檢查&#xff0c;我想添加“全部檢查”和“不檢查”按鈕。我覺得應該有一種方法可以使setData()從代碼中被調用&#xff0c;這樣檢查狀態就會改變&#xff0c;就像我已經用setDat…

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進入了交互運行…

sqldeveloper創建賬號_用oralce 自帶工具sql developer 創建表空間,用戶,權限

用oralce 自帶工具sql developer 創建/*第1步&#xff1a;創建臨時表空間 */create temporary tablespace hudongtemptablespacetempfile E:\worksubject\WY-Honda_Ess\Oracle11g\hudongtemptablespace.dbfsize 50mautoextend onnext 50m maxsize 20480mextent management loc…

AOE網與關鍵路徑簡介

前面我們說過的拓撲排序主要是為解決一個工程能否順序進行的問題&#xff0c;但有時我們還需要解決工程完成需要的最短時間問題。如果我們要對一個流程圖獲得最短時間&#xff0c;就必須要分析它們的拓撲關系&#xff0c;并且找到當中最關鍵的流程&#xff0c;這個流程的時間就…

Java 集合體系詳解——List體系有序集合

引言 面向對象語言對事物的體現必然是以對象的形式&#xff0c;Java工程師為了方便多多個對象的操作&#xff0c;就對對象進行存儲&#xff0c;集合就是存儲對象的一種方式&#xff0c;他們的底層都是基于不同的數據結構。當然集合和數組一樣都是容器&#xff0c;數組也是可以存…

android 定義固定數組,Android 圖片數組定義和讀取

位置&#xff1a;packages/apps/Launcher21、圖片數組定義、資源讀取如果有多張圖片&#xff0c;這些圖片的使用與順序無關&#xff0c;可以采取這種方式。drawable-nodpi中有3張圖片&#xff0c;wallpaper_1.jpg、wallpaper_2.jpg、wallpaper_3.jpgXML中定義數組IDwallpaper_1…

alert閃一下就沒了_尾部貫穿式鍍鉻銀飾條除了丑,還能閃瞎眼

尾部貫穿式鍍鉻銀飾條&#xff0c;在2010年代成為諸多汽車品牌車型爭相采用的新世紀新標配&#xff0c;配以雙邊排氣&#xff0c;讓整個車尾看起來層次感強烈&#xff0c;視覺收窄&#xff0c;幾十萬的奧迪A8L有&#xff0c;十幾萬的斯柯達速派有&#xff0c;A級車有&#xff0…

docker 指定網卡_Docker | Docker技術基礎梳理(五) Docker網絡管理

為什么需要容器的網絡管理&#xff1f;容器的網絡默認與宿主機、與其他容器相互隔離&#xff0c;且容器中可以運行一些網絡應用&#xff0c;比如nginx、web應用、數據庫等&#xff0c;如果需要讓外部也可以訪問這些容器中運行的網絡應用&#xff0c;那么就需要配置網絡來實現。…

java.net.URLEncode編碼 與 URLDecode解碼問題

原文&#xff1a;http://blog.csdn.net/luojian520025/article/details/9139293 -------------------------------------------------------------------------------------------- String mytext java.net.URLEncoder.encode("中國", "utf-8")…