91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python遺傳算法之單/多目標規劃問題怎么解決

發布時間:2022-04-18 10:27:02 來源:億速云 閱讀:498 作者:iii 欄目:開發技術

這篇“python遺傳算法之單/多目標規劃問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python遺傳算法之單/多目標規劃問題怎么解決”文章吧。

    1. 運行環境

    這里先介紹一下運行環境

    • 系統:Windows10

    • 配置:i7-6700 16G

    • python版本:3.10

    • geatpy版本:2.7.0

    2. 面向對象的原理

    前面的章節中,我們介紹了遺傳算法主要分為算法模板類 (Algorithm)、種群類 (Population)、多染色體混合編碼種群類 (PsyPopulation) 以及問題類 (Problem)。其中 Population 類和 PsyPopulation 類是可以直接被實例化成對象去來使用的類;Algorithm 類和 Problem 類是父類,需要實例化其子類來使用。下面我們通過案例來演示一下用法。

    3. 帶約束的單目標優化問題

    python遺傳算法之單/多目標規劃問題怎么解決

    3.1 繼承 Problem 問題類完成對問題模型的描述

    在這一步中,主要是將我們的問題按照模板描述清楚,包括目標函數和約束條件。

    import numpy as np
    import geatpy as ea
    class MyProblem(ea.Problem): # 繼承Problem父類
        def __init__(self):
            name = 'MyProblem'  # 初始化name(函數名稱,可以隨意設置)
    
            M = 1  # 初始化M(目標維數)
            maxormins = [-1]  # 初始化目標最小最大化標記列表,1:min;-1:max
            Dim = 3  # 初始化Dim(決策變量維數)
            varTypes = [0] * Dim  # 初始化決策變量類型,0:連續;1:離散
            lb = [0, 0, 0]  # 決策變量下界
            ub = [1, 1, 2]  # 決策變量上界
            lbin = [1, 1, 0]  # 決策變量下邊界
            ubin = [1, 1, 0]  # 決策變量上邊界
            # 調用父類構造方法完成實例化
            ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb,
                            ub, lbin, ubin)
    
        def aimFunc(self, pop):  # 目標函數,pop為傳入的種群對象
            Vars = pop.Phen  # 得到決策變量矩陣
    
            x1 = Vars[:, [0]]  # 取出第一列得到所有個體的x1組成的列向量
            x2 = Vars[:, [1]]  # 取出第二列得到所有個體的x2組成的列向量
            x3 = Vars[:, [2]]  # 取出第三列得到所有個體的x3組成的列向量 # 計算目標函數值,賦值給pop種群對象的ObjV屬性
            pop.ObjV = 4 * x1 + 2 * x2 + x3
            # 采用可行性法則處理約束,生成種群個體違反約束程度矩陣
            pop.CV = np.hstack([2 * x1 + x2 - 1,  # 第一個約束
                            x1 + 2 * x3 - 2,  # 第二個約束
                            np.abs(x1 + x2 + x3 - 1)])  # 第三個約束

    3.2 調用算法模板進行求解

    在第二步中,我們主要編寫的是算法模板對第一步中問題的定義進行求解,這里需要依次設置種群、算法參數、種群進化、結果的輸出。

    """main_solve.py"""
    import geatpy as ea # import geatpy
    from myaim import MyProblem # 導入自定義問題接口
    """============================實例化問題對象========================"""
    problem = MyProblem() # 實例化問題對象
    """==============================種群設置==========================="""
    Encoding = 'RI' # 編碼方式
    NIND = 50 # 種群規模
    Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges,problem.borders) # 創建區域描述器
    population = ea.Population(Encoding, Field, NIND) # 實例化種群對象(此時種群還沒被真正初始化,僅僅是生成一個種群對象)
    """===========================算法參數設置=========================="""
    myAlgorithm = ea.soea_DE_best_1_L_templet(problem, population) # 實例化一個算法模板對象
    myAlgorithm.MAXGEN = 1000 # 最大進化代數
    myAlgorithm.mutOper.F = 0.5 # 差分進化中的參數F
    myAlgorithm.recOper.XOVR = 0.7 # 設置交叉概率
    myAlgorithm.logTras = 1 # 設置每隔多少代記錄日志,若設置成0則表示不記錄日志
    myAlgorithm.verbose = True # 設置是否打印輸出日志信息
    myAlgorithm.drawing = 1 # 設置繪圖方式(0:不繪圖;1:繪制結果圖;2:繪制目標空間過程動畫;3:繪制決策空間過程動畫)
    """==========================調用算法模板進行種群進化==============="""
    [BestIndi, population] = myAlgorithm.run() # 執行算法模板,得到最優個體以及最后一代種群
    BestIndi.save() # 把最優個體的信息保存到文件中
    """=================================輸出結果======================="""
    print('評價次數:%s' % myAlgorithm.evalsNum)
    print('時間花費 %s 秒' % myAlgorithm.passTime)
    if BestIndi.sizes != 0:
        print('最優的目標函數值為:%s' % BestIndi.ObjV[0][0])
        print('最優的控制變量值為:')
        for i in range(BestIndi.Phen.shape[1]):
            print(BestIndi.Phen[0, i])
    else:
        print('此次未找到可行解。')

    3.3 結果

    種群進化的結果為:

    python遺傳算法之單/多目標規劃問題怎么解決

    最終的結果為:

    python遺傳算法之單/多目標規劃問題怎么解決

    4. 帶約束的多目標優化問題

    python遺傳算法之單/多目標規劃問題怎么解決

    4.1 繼承 Problem 問題類完成對問題模型的描述

    對于多目標的問題,依舊是先編寫目標規劃問題。

    import numpy as np
    import geatpy as ea
    class MyProblem(ea.Problem): # 繼承Problem父類
        def __init__(self):
            name = 'BNH' # 初始化name(函數名稱,可以隨意設置)
            M = 2 # 初始化M(目標維數)
            maxormins = [1] * M # 初始化maxormins
            Dim = 2 # 初始化Dim(決策變量維數)
            varTypes = [0] * Dim # 初始化varTypes(決策變量的類型,0:實數;1:整數)
            lb = [0] * Dim # 決策變量下界
            ub = [5, 3] # 決策變量上界
            lbin = [1] * Dim # 決策變量下邊界
            ubin = [1] * Dim # 決策變量上邊界 # 調用父類構造方法完成實例化
            ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb,ub, lbin, ubin)
        def aimFunc(self, pop): # 目標函數
            Vars = pop.Phen # 得到決策變量矩陣
            x1 = Vars[:, [0]] # 注意這樣得到的x1是一個列向量,表示所有個體的x1
            x2 = Vars[:, [1]]
            f1 = 4*x1**2 + 4*x2**2
            f2 = (x1 - 5)**2 + (x2 - 5)**2
            # 采用可行性法則處理約束
            pop.CV = np.hstack([(x1 - 5)**2 + x2**2 - 25,-(x1 - 8)**2 - (x2 - 3)**2 + 7.7])
            # 把求得的目標函數值賦值給種群pop的ObjV
            pop.ObjV = np.hstack([f1, f2])
            
         ## 目標函數主要需要計算出CV和ObjV

    4.2 調用算法模板進行求解

    模板求解,和單目標規劃類似。

    import geatpy as ea # import geatpy
    from ga_more_aim import MyProblem # 導入自定義問題接口
    import numpy as np
    """=======================實例化問題對象==========================="""
    problem = MyProblem() # 實例化問題對象
    """=========================種群設置=============================="""
    Encoding = 'RI' # 編碼方式
    NIND = 100 # 種群規模
    Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges,problem.borders) # 創建區域描述器
    population = ea.Population(Encoding, Field, NIND) # 實例化種群對象(此時種群還沒被真正初始化,僅僅是生成一個種群對象)
    """=========================算法參數設置============================"""
    myAlgorithm = ea.moea_NSGA2_templet(problem, population) # 實例化一個算法模板對象
    myAlgorithm.mutOper.Pm = 0.2 # 修改變異算子的變異概率
    myAlgorithm.recOper.XOVR = 0.9 # 修改交叉算子的交叉概率
    myAlgorithm.MAXGEN = 200 # 最大進化代數
    myAlgorithm.logTras = 1 # 設置每多少代記錄日志,若設置成0則表示不記錄日志
    myAlgorithm.verbose = False # 設置是否打印輸出日志信息
    myAlgorithm.drawing = 1 # 設置繪圖方式(0:不繪圖;1:繪制結果圖;2:繪制目標空間過程動畫;3:繪制決策空間過程動畫)
    """==========================調用算法模板進行種群進化==============
    調用run執行算法模板,得到帕累托最優解集NDSet以及最后一代種群。
    NDSet是一個種群類Population的對象。
    NDSet.ObjV為最優解個體的目標函數值;NDSet.Phen為對應的決策變量值。
    詳見Population.py中關于種群類的定義。
    """
    [NDSet, population] = myAlgorithm.run() # 執行算法模板,得到非支配種群以及最后一代種群
    NDSet.save() # 把非支配種群的信息保存到文件中
    """===========================輸出結果========================"""
    print('用時:%s 秒' % myAlgorithm.passTime)
    print('非支配個體數:%d 個' % NDSet.sizes) if NDSet.sizes != 0 else print('沒有找到可行解!')
    if myAlgorithm.log is not None and NDSet.sizes != 0:
        print('GD', myAlgorithm.log['gd'][-1])
        print('IGD', myAlgorithm.log['igd'][-1])
        print('HV', myAlgorithm.log['hv'][-1])
        print('Spacing', myAlgorithm.log['spacing'][-1])
    """======================進化過程指標追蹤分析=================="""
    metricName = [['igd'], ['hv']]
    Metrics = np.array([myAlgorithm.log[metricName[i][0]] for i in range(len(metricName))]).T
    # 繪制指標追蹤分析圖
    ea.trcplot(Metrics, labels=metricName, titles=metricName)

    4.3 結果

    很多初學者可能不太清楚評價多目標規劃的一些指標GD、IGD、HV等,這里給大家參考: 多目標進化算法的性能評價指標總結.

    帕累托前沿結果:

    python遺傳算法之單/多目標規劃問題怎么解決

    hv的趨勢:

    python遺傳算法之單/多目標規劃問題怎么解決

    最后結果:

    python遺傳算法之單/多目標規劃問題怎么解決

    以上就是關于“python遺傳算法之單/多目標規劃問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    西乌| 政和县| 彭阳县| 莱西市| 九江市| 扎鲁特旗| 昭苏县| 治县。| 乌什县| 咸丰县| 陇川县| 武乡县| 临安市| 六盘水市| 五大连池市| 儋州市| 凤山市| 达尔| 易门县| 恩平市| 汝州市| 枣庄市| 河池市| 墨玉县| 梁河县| 遂川县| 太原市| 龙里县| 弋阳县| 永年县| 广元市| 兰考县| 云南省| 颍上县| 临潭县| 全椒县| 浦北县| 梁河县| 凌海市| 莱州市| 商城县|