国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

爬山算法簡介和Python實現實例

2020-02-23 05:21:57
字體:
來源:轉載
供稿:網友

一、爬山法簡介

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

二、Python實例

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

代碼如下:
代碼如下:
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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石门县| 栾川县| 武乡县| 河北区| 筠连县| 玉林市| 静乐县| 枣庄市| 剑川县| 保德县| 外汇| 会昌县| 榆中县| 临猗县| 邯郸县| 万山特区| 崇礼县| 宁都县| 福建省| 棋牌| 温州市| 馆陶县| 蚌埠市| 双江| 青州市| 娄底市| 宜宾市| 军事| 吐鲁番市| 从江县| 乌审旗| 林口县| 台山市| 沅江市| 萍乡市| 凌源市| 金乡县| 连城县| 长寿区| 翁牛特旗| 中山市|