欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

爬山算法簡(jiǎn)介和Python實(shí)現(xiàn)實(shí)例

 更新時(shí)間:2014年04月26日 09:30:53   作者:  
這篇文章主要介紹了爬山算法,爬山法(climbing method)是一種優(yōu)化算法,其一般從一個(gè)隨機(jī)的解開始,然后逐步找到一個(gè)最優(yōu)解(局部最優(yōu))然后用Python實(shí)現(xiàn)了這個(gè)算法,需要的朋友可以參考下

一、爬山法簡(jiǎn)介

爬山法(climbing method)是一種優(yōu)化算法,其一般從一個(gè)隨機(jī)的解開始,然后逐步找到一個(gè)最優(yōu)解(局部最優(yōu))。 假定所求問題有多個(gè)參數(shù),我們?cè)谕ㄟ^爬山法逐步獲得最優(yōu)解的過程中可以依次分別將某個(gè)參數(shù)的值增加或者減少一個(gè)單位。例如某個(gè)問題的解需要使用3個(gè)整數(shù)類型的參數(shù)x1、x2、x3,開始時(shí)將這三個(gè)參數(shù)設(shè)值為(2,2,-2),將x1增加/減少1,得到兩個(gè)解(1,2,-2), (3, 2,-2);將x2增加/減少1,得到兩個(gè)解(2,3, -2),(2,1, -2);將x3增加/減少1,得到兩個(gè)解(2,2,-1),(2,2,-3),這樣就得到了一個(gè)解集:
(2,2,-2), (1, 2,-2), (3, 2,-2), (2,3,-2), (2,1,-2), (2,2,-1), (2,2,-3)
從上面的解集中找到最優(yōu)解,然后將這個(gè)最優(yōu)解依據(jù)上面的方法再構(gòu)造一個(gè)解集,再求最優(yōu)解,就這樣,直到前一次的最優(yōu)解和后一次的最優(yōu)解相同才結(jié)束“爬山”。

二、Python實(shí)例

設(shè)方程 y = x1+x2-x3,x1是區(qū)間[-2, 5]中的整數(shù),x2是區(qū)間[2, 6]中的整數(shù),x3是區(qū)間[-5, 2]中的整數(shù)。使用爬山法,找到使得y取值最小的解。

代碼如下:

復(fù)制代碼 代碼如下:

import random

def evaluate(x1, x2, x3):
    return x1+x2-x3

if __name__ == '__main__':
    x_range = [ [-2, 5], [2, 6], [-5, 2] ]
    best_sol = [random.randint(x_range[0][0], x_range[0][1]),
           random.randint(x_range[1][0], x_range[1][1]),
           random.randint(x_range[2][0], x_range[2][1])]

    while True:
        best_evaluate = evaluate(best_sol[0], best_sol[1], best_sol[2])
        current_best_value = best_evaluate
        sols = [best_sol]

        for i in xrange(len(best_sol)):
            if best_sol[i] > x_range[i][0]:
                sols.append(best_sol[0:i] + [best_sol[i]-1] + best_sol[i+1:])
            if best_sol[i] < x_range[i][1]:
                sols.append(best_sol[0:i] + [best_sol[i]+1] + best_sol[i+1:])
        print sols
        for s in sols:
            el = evaluate(s[0], s[1], s[2])
            if el < best_evaluate:
                best_sol = s
                best_evaluate = el
        if best_evaluate == current_best_value:
            break

    print 'best sol:', current_best_value, best_sol
某次運(yùn)行結(jié)果如下:

[[0, 5, 1], [-1, 5, 1], [1, 5, 1], [0, 4, 1], [0, 6, 1], [0, 5, 0], [0, 5, 2]]
[[-1, 5, 1], [-2, 5, 1], [0, 5, 1], [-1, 4, 1], [-1, 6, 1], [-1, 5, 0], [-1, 5, 2]]
[[-2, 5, 1], [-1, 5, 1], [-2, 4, 1], [-2, 6, 1], [-2, 5, 0], [-2, 5, 2]]
[[-2, 4, 1], [-1, 4, 1], [-2, 3, 1], [-2, 5, 1], [-2, 4, 0], [-2, 4, 2]]
[[-2, 3, 1], [-1, 3, 1], [-2, 2, 1], [-2, 4, 1], [-2, 3, 0], [-2, 3, 2]]
[[-2, 2, 1], [-1, 2, 1], [-2, 3, 1], [-2, 2, 0], [-2, 2, 2]]
[[-2, 2, 2], [-1, 2, 2], [-2, 3, 2], [-2, 2, 1]]
best sol: -2 [-2, 2, 2]


可以看到,最優(yōu)解是-2,對(duì)應(yīng)的x1、x2、x3分別取值-2、2、2。

三、如何找到全局最優(yōu)

爬山法獲取的最優(yōu)解的可能是局部最優(yōu),如果要獲得更好的解,多次使用爬山算法(需要從不同的初始解開始爬山),從多個(gè)局部最優(yōu)解中找出最優(yōu)解,而這個(gè)最優(yōu)解也有可能是全局最優(yōu)解。

另外,模擬退火算法也是一個(gè)試圖找到全局最優(yōu)解的算法。

 

相關(guān)文章

  • Python 處理文件的幾種方式

    Python 處理文件的幾種方式

    這篇文章主要介紹了Python 處理文件的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 如何安裝2019Pycharm最新版本(詳細(xì)教程)

    如何安裝2019Pycharm最新版本(詳細(xì)教程)

    這篇文章主要介紹了如何安裝2019Pycharm最新版本(詳細(xì)教程),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python3.6.2調(diào)用ffmpeg的方法

    Python3.6.2調(diào)用ffmpeg的方法

    今天小編就為大家分享一篇Python3.6.2調(diào)用ffmpeg的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python中文件夾py文件相互引用方式

    python中文件夾py文件相互引用方式

    這篇文章主要介紹了python中文件夾py文件相互引用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 手動(dòng)導(dǎo)包的實(shí)現(xiàn)

    Python 手動(dòng)導(dǎo)包的實(shí)現(xiàn)

    本文主要介紹了Python 手動(dòng)導(dǎo)包的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用C++擴(kuò)展Python的功能詳解

    使用C++擴(kuò)展Python的功能詳解

    這篇文章主要介紹了使用C++擴(kuò)展Python的功能詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 解決Mac下首次安裝pycharm無project interpreter的問題

    解決Mac下首次安裝pycharm無project interpreter的問題

    今天小編就為大家分享一篇解決Mac下首次安裝pycharm無project interpreter的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 使用Dataframe.info()顯示空值與類型信息

    使用Dataframe.info()顯示空值與類型信息

    這篇文章主要介紹了使用Dataframe.info()顯示空值與類型信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python自定義時(shí)鐘類、定時(shí)任務(wù)類

    python自定義時(shí)鐘類、定時(shí)任務(wù)類

    這篇文章主要為大家詳細(xì)介紹了Python自定義時(shí)鐘類、定時(shí)任務(wù)類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python 實(shí)現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url

    python 實(shí)現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url

    今天小編就為大家分享一篇python 實(shí)現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論