scikit-opt——DE(差分進化)


Differential Evolution

差分進化算法(Differential Evolution,DE)於1997年由Rainer Storn和Kenneth Price在遺傳算法等進化思想的基礎上提出的,本質是一種多目標(連續變量)優化算法(MOEAs),用於求解多維空間中整體最優解。

差分進化算法相對於遺傳算法而言,相同點都是通過隨機生成初始種群,以種群中每個個體的適應度值為選擇標准,主要過程也都包括變異、交叉和選擇三個步驟。不同之處在於遺傳算法是根據適應度值來控制父代雜交,變異后產生的子代被選擇的概率值,在最大化問題中適應值大的個體被選擇的概率相應也會大一些。而差分進化算法變異向量是由父代差分向量生成,並與父代個體向量交叉生成新個體向量,直接與其父代個體進行選擇。顯然差分進化算法相對遺傳算法的逼近效果更加顯著。

詳細介紹見 差分進化算法(Differential Evolution)

Quick Start

Step1: 定義你的問題

'''
min f(x1, x2, x3) = x1^2 + x2^2 + x3^2
s.t.
    x1*x2 >= 1
    x1*x2 <= 5
    x2 + x3 = 1
    0 <= x1, x2, x3 <= 5
'''

# 目標函數
def obj_func(p):
    x1, x2, x3 = p
    return x1 ** 2 + x2 ** 2 + x3 ** 2


# 線性約束
constraint_eq = [
    lambda x: 1 - x[1] - x[2]
]

# 非線性約束
constraint_ueq = [
    lambda x: 1 - x[0] * x[1],
    lambda x: x[0] * x[1] - 5
]

Step2: 進行差分進化

from sko.DE import DE

de = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0], ub=[5, 5, 5],
        constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)

best_x, best_y = de.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

 

 

參考鏈接:

1. scikit-opt官方文檔-DE部分

2. CSDN金良山庄-差分進化算法(Differential Evolution)

3. CSDN口袋的天空-差分進化算法(Differential Evolution)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM