国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

元啟發(fā)式算法庫 MEALPY 初體驗-遺傳算法為例

這篇具有很好參考價值的文章主要介紹了元啟發(fā)式算法庫 MEALPY 初體驗-遺傳算法為例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡介

官網(wǎng): MealPY官網(wǎng)

開源許可: (GPL) V3

MEALPY簡介

官網(wǎng)簡介翻譯

MEALPY (MEta-heuristic ALgorithms in PYthon) 是一個提供最新自然啟發(fā)式元啟發(fā)算法的Python模塊,它是最大的此類Python模塊之一。這些算法模仿自然界中的成功過程,包括生物系統(tǒng)以及物理和化學(xué)過程。mealPy 的目標(biāo)是免費向所有人分享元啟發(fā)領(lǐng)域的知識,幫助各領(lǐng)域的研究者盡快接觸到優(yōu)化算法,并且實現(xiàn)從經(jīng)典到最先進(jìn)的元啟發(fā)算法,涵蓋了元啟發(fā)算法的全部歷史。

MEALPY 的用途廣泛,你可以使用它來分析算法參數(shù)、進(jìn)行算法的定性和定量分析、分析算法的收斂速率、測試和分析算法的可擴(kuò)展性和健壯性。該庫目前的版本為 3.0.1,共包含 215 種算法,其中包括 190 種官方算法(原始算法、混合算法、變體算法)和 25 種開發(fā)算法。

MEALPY 的特點在于支持解決連續(xù)和離散問題,并且在新版本中,所有功能都被封裝在類和對象之中,使得定義模型一次后,就可以解決多個問題。

一句話總結(jié)

MEALPY 是一個強(qiáng)大的元啟發(fā)式算法Python庫,它適合用于研究和解決各種優(yōu)化問題,特別是對于那些復(fù)雜的NP難題。

安裝

安裝軟件和庫

  • python 3.7或以上
  • vscode 或 pycharm (我自己用vscode)
  • vscode 插件:Python Extension Pack(pycharm 忽略)
  • python 庫: numpy, scipy, pandas, matplotlib, mealpy( 其他遇到缺失報錯的再安裝也不遲)

python庫直接在插件里搜就是了
元啟發(fā)式算法庫 MEALPY 初體驗-遺傳算法為例

基本概念

二話不說,先上一個簡單代碼:

from mealpy import FloatVar, GA

def objective_func(solution):
    return solution**2

problem_dict = {
    "obj_func": objective_func,
    "bounds": FloatVar(lb=[-10000], ub=[10000]),
    "minmax": "min",
}

optimizer = GA.BaseGA(epoch=100, pop_size=50, pc=0.85, pm=0.1)
optimizer.solve(problem_dict)

print(optimizer.g_best.solution) 
print(optimizer.g_best.target.fitness) 

代碼解釋

導(dǎo)入

from mealpy import FloatVar, GA
  • 導(dǎo)入了 mealpy庫里面的 FloatVar類,說明輸入輸出的是 float 類型的變量
  • 導(dǎo)入了 mealpy庫里面的 GA(Genetic Algorithm)遺傳算法(下面解釋)

定義目標(biāo)函數(shù)(objective_func)

def objective_func(solution):
    return solution**2

obj_func 是一個在優(yōu)化問題中用來評估解決方案好壞的目標(biāo)函數(shù)(objective function)。在元啟發(fā)式算法中,obj_func 通常是一個接收單個解決方案(一個代表可能解的numpy向量)作為輸入,并返回一個單一的實數(shù)值(在單目標(biāo)優(yōu)化問題中)或一個實數(shù)值列表(在多目標(biāo)優(yōu)化問題中)的函數(shù)。
上面objective_func 目的是找到 \(f(x)=x^2\),的極值(在問題字典里定義求最大還是最小值)
那么有人就會問, \(f(x)=x^2\)的極值不是 x=0的時候,極值也是0嗎?
元啟發(fā)式算法庫 MEALPY 初體驗-遺傳算法為例

我想說,是的,你說的對,這不是為了舉簡單例子嘛(比官網(wǎng)例子還簡單一點),如果我拿出下面公式,閣下如何應(yīng)對?
\(f(x)=\sqrt[3]{x^3-x^2-x+1+y^3-xy^2}\)
所以現(xiàn)在我們假裝不知道\(y=x^2\)的極值公式和圖像,求一下x等于多少的時候,y的最小值。

創(chuàng)建問題字典(problem_dict)

problem_dict = {
    "obj_func": objective_func,
    "bounds": FloatVar(lb=[-10000], ub=[10000]),
    "minmax": "min",
}

在mealpy庫中,problem_dict 是一個字典,它定義了優(yōu)化問題的所有必要信息。這個字典通常包含下列關(guān)鍵字:

  • obj_func:這是目標(biāo)函數(shù)(objective function),它接收一個候選解(通常是一個numpy數(shù)組)并返回一個評估值(對于最小化問題來說越小越好,對于最大化問題來說越大越好)。上面已經(jīng)定義好了objective_func。
  • bounds:這是變量的邊界,它定義了解空間的上下界。在mealpy中,你可以使用不同的類型來定義邊界,如FloatVar, IntVar, BoolVar等,以適應(yīng)不同類型的優(yōu)化問題。假設(shè)我們不知道\(f(x)=x^2\)的圖像,但看樣子,x可以取值\((-\infty,\infty)\),我們程序不可能取\((-\infty,\infty)\),不做特殊處理肯定會溢出,我現(xiàn)在就小小試一下,設(shè)\(x \in [-10000,10000]\), 然后x是實數(shù),所以bounds屬于FloatVar類型,lb,ub表示上下界,是個數(shù)組,但因為我們現(xiàn)在的例子只有一個輸入,所以[]里面只有一個邊界。
  • minmax:這是一個字符串,它指示優(yōu)化問題是最小化問題("min")還是最大化問題("max")。我們這里是例子求\(f(x)\)最小值, 所以設(shè)置為min

初始化優(yōu)化程序并執(zhí)行 (以遺傳算法為例)

optimizer = GA.BaseGA(epoch=100, pop_size=50, pc=0.85, pm=0.1)
optimizer.solve(problem_dict)

這段代碼做了以下兩件主要事情:

  • 初始化遺傳算法優(yōu)化器。
  • 使用該優(yōu)化器解決定義好的優(yōu)化問題。

讓我們解釋這段代碼之前,先說一下什么是遺傳算法

遺傳算法(覺得太長可以跳過不看)

遺傳算法(Genetic Algorithm,簡稱GA)是計算數(shù)學(xué)中用于解決優(yōu)化和搜索問題的一種啟發(fā)式算法。它是由約翰·霍蘭德(John Holland)在20世紀(jì)70年代初期發(fā)展起來的,其設(shè)計靈感來源于生物進(jìn)化中的自然選擇和遺傳學(xué)原理。

遺傳算法的基本概念包括個體、種群、適應(yīng)度、選擇、交叉(或稱為雜交,英文為crossover)、變異等,以下是這些概念的詳細(xì)介紹:

個體(Individual):

在遺傳算法中,每一個可能的解都稱為一個“個體”,通常表示為一串“基因”,這可以是二進(jìn)制值、實數(shù)或其他編碼形式。
我們上面例子里,因為輸入只有一個,那么個體就是那個公式里的\(x\)浮點本身,或者是代碼里目標(biāo)方法(objective_func)的 solution參數(shù)本身。

種群(Population):

種群是一組個體的集合,算法從這個種群中選擇個體來進(jìn)行遺傳操作并產(chǎn)生新一代種群。
我們上面例子里,pop_size=50 就是一開始有 50個x(一般初始化,都是隨機(jī)的,[-10000,10000]范圍內(nèi)隨機(jī)生成50個x)

適應(yīng)度(Fitness):

適應(yīng)度是評價個體優(yōu)劣的標(biāo)準(zhǔn),它是一個函數(shù),用于衡量個體解決問題的能力。個體的適應(yīng)度越高,它被選中并遺傳到下一代的機(jī)會就越大。
因為我們設(shè)置了求最小值"minmax": "min",,可以認(rèn)為Fitness等價于例子里的 objective_func。

選擇(Selection):

選擇是根據(jù)個體的適應(yīng)度從當(dāng)前種群中選出一部分個體,用于生成下一代。常見的選擇方法有輪盤賭選擇、錦標(biāo)賽選擇, 隨機(jī)選擇等。
BaseGA 類通過 selection_process__ 方法實現(xiàn)了幾種不同的選擇策略:

  • 輪盤賭選擇(Roulette Wheel Selection):使用 get_index_roulette_wheel_selection 方法,根據(jù)適應(yīng)度比例選擇個體。
  • 隨機(jī)選擇(Random Selection):隨機(jī)選擇兩個不同的個體作為父母。
  • 錦標(biāo)賽選擇(Tournament Selection):使用 get_index_kway_tournament_selection 方法,隨機(jī)選擇一組個體,然后從中挑選出最好的個體。k_way 參數(shù)決定了錦標(biāo)賽的大小。
    BaseGA 類的初始化方法 init 允許用戶設(shè)置選擇策略(selection 參數(shù)),默認(rèn)是錦標(biāo)賽選擇。
class BaseGA(Optimizer):
	def __init__(self, epoch: int = 10000, pop_size: int = 100, pc: float = 0.95, pm: float = 0.025, **kwargs: object) -> None:
	# ... 初始化代碼
	self.selection = "tournament"
	if "selection" in kwargs:
			self.selection = self.validator.check_str("selection", kwargs["selection"], ["tournament", "random", "roulette"])
	# ... 初始化代碼

選擇策略,如果不指定 selection 參數(shù),則會使用默認(rèn)的錦標(biāo)賽選擇。如果你想使用輪盤賭選擇或隨機(jī)選擇,需要在創(chuàng)建 BaseGA 實例時通過 selection 參數(shù)明確指定。

例子使用方式,例如:

model = BaseGA(epoch=100, pop_size=50, pc=0.85, pm=0.1, selection="roulette")
交叉(Crossover):

交叉是遺傳算法中產(chǎn)生新個體的主要方式。它模擬生物學(xué)中的雜交現(xiàn)象,通過組合兩個“父母”個體的部分基因來產(chǎn)生“子代”個體。
例子中 pc=0.85 表示交叉概率是 85%,意味著每一代中有 85% 的個體將通過交叉來產(chǎn)生新的后代。
在BaseGA類中,交叉(Crossover)是通過crossover_process__方法實現(xiàn)的。該方法定義了幾種不同的交叉策略:

  • 算術(shù)交叉(Arithmetic Crossover):通過算術(shù)運(yùn)算結(jié)合兩個父代的基因來產(chǎn)生子代。在這個實現(xiàn)中,可能是按照一定權(quán)重將兩個父代的基因線性組合。

  • 單點交叉(One-Point Crossover):選擇一個隨機(jī)的位置(切點),然后交換兩個父代在這個切點位置以前和以后的基因段,從而產(chǎn)生兩個子代。

  • 多點交叉(Multi-Point Crossover):選擇多個切點,并在這些切點位置將父代的基因段交叉組合,產(chǎn)生子代。

  • 均勻交叉(Uniform Crossover):對于每個基因位點,隨機(jī)決定該位置的基因是來自父代1還是父代2。這個決策是獨立于其他基因位點的。

    以下是crossover_process__方法的代碼實現(xiàn):

def crossover_process__(self, dad, mom):
	if self.crossover == "arithmetic":
		w1, w2 = self.crossover_arithmetic(dad, mom)
	elif self.crossover == "one_point":
		cut = self.generator.integers(1, self.problem.n_dims-1)
		w1 = np.concatenate([dad[:cut], mom[cut:]])
		w2 = np.concatenate([mom[:cut], dad[cut:]])
	elif self.crossover == "multi_points":
		idxs = self.generator.choice(range(1, self.problem.n_dims-1), 2, replace=False)
		cut1, cut2 = np.min(idxs), np.max(idxs)
		w1 = np.concatenate([dad[:cut1], mom[cut1:cut2], dad[cut2:]])
		w2 = np.concatenate([mom[:cut1], dad[cut1:cut2], mom[cut2:]])
	else:           # uniform
		flip = self.generator.integers(0, 2, self.problem.n_dims)
		w1 = dad * flip + mom * (1 - flip)
		w2 = mom * flip + dad * (1 - flip)
	return w1, w2

在這個方法中,dad和mom參數(shù)表示兩個父代的基因串。根據(jù)self.crossover的值,它決定使用哪種交叉策略。每種策略都會計算并返回兩個子代w1和w2的基因串。

注意,實際的交叉操作是否發(fā)生是由交叉概率self.pc控制的,這個概率決定了在種群中有多少比例的個體會經(jīng)歷交叉過程。如果隨機(jī)數(shù)小于self.pc,那么調(diào)用crossover_process__方法進(jìn)行交叉;否則,子代直接繼承父代的基因。

簡單來說,BaseGA類中的交叉是通過拼接兩個父代的某些部分來產(chǎn)生子代,具體的拼接方式取決于所選的交叉策略。
BaseGA默認(rèn)使用均勻交叉uniform,對于浮點數(shù)的均勻交叉(Uniform Crossover),方法與處理二進(jìn)制串或整數(shù)串的方式類似,但是要考慮到浮點數(shù)的連續(xù)性。在均勻交叉中,每個基因位點都有一個獨立的概率決定是從父代1繼承還是從父代2繼承。

對于浮點數(shù)列表的均勻交叉,可以按如下方式進(jìn)行:

  1. 對于個體中的每一個浮點數(shù)位點(在這個案例中,由于只有一個浮點數(shù),所以只有一個位點)生成一個0到1之間的隨機(jī)數(shù)。
  2. 如果這個隨機(jī)數(shù)小于預(yù)設(shè)的閾值(通常是0.5),則從父代1中選取該位點的值;否則,從父代2中選取該位點的值。

因為在上面例子中,每個個體只包含一個浮點數(shù),所以均勻交叉將簡化為以下步驟:

  1. 生成一個0到1之間的隨機(jī)數(shù)。
  2. 如果隨機(jī)數(shù)小于0.5,子代將繼承父代1的值;如果隨機(jī)數(shù)大于或等于0.5,子代將繼承父代2的值。
變異(Mutation):

變異是在個體的基因序列中隨機(jī)改變某些基因的過程,這增加了種群的多樣性,有助于算法跳出局部最優(yōu)解,探索更廣泛的搜索空間。
在BaseGA類中,變異(Mutation)是通過mutation_process__方法實現(xiàn)的。該方法根據(jù)所選的變異策略來對子代進(jìn)行變異操作。變異操作的目的是在遺傳算法的演化過程中引入一些隨機(jī)性,以避免算法過早收斂到局部最優(yōu)解,并增加搜索全局最優(yōu)解的可能性。

BaseGA類提供了以下幾種變異策略:

  • 翻轉(zhuǎn)變異(Flip Mutation):隨機(jī)選擇基因串中的一個或多個位點,并將其值改變。對于浮點數(shù),這通常意味著重新生成一個在給定范圍內(nèi)的隨機(jī)值來替換當(dāng)前的基因值。
  • 交換變異(Swap Mutation):隨機(jī)選擇基因串中的兩個位點,并交換它們的值。
  • 擾亂變異(Scramble Mutation):隨機(jī)選擇基因串中的一段序列,并將這段序列中的基因值進(jìn)行隨機(jī)打亂。
  • 逆序變異(Inversion Mutation):隨機(jī)選擇基因串中的一段序列,并將這段序列中的基因值逆序排列。

在BaseGA類的mutation_process__方法中,根據(jù)變異概率self.pm來決定是否對子代進(jìn)行變異操作(默認(rèn)是翻轉(zhuǎn)變異Flip)。以下是mutation_process__方法的代碼實現(xiàn)(部分):

def mutation_process__(self, child):
    if self.mutation_multipoints:
        if self.mutation == "swap":
            # ... Swap mutation logic ...
        else:  # "flip"
            mutation_child = self.problem.generate_solution()
            flag_child = self.generator.uniform(0, 1, self.problem.n_dims) < self.pm
            return np.where(flag_child, mutation_child, child)
    else:
        if self.mutation == "swap":
            # ... Swap mutation logic for single point ...
        elif self.mutation == "inversion":
            # ... Inversion mutation logic ...
        elif self.mutation == "scramble":
            # ... Scramble mutation logic ...
        else:  # "flip"
            idx = self.generator.integers(0, self.problem.n_dims)
            child[idx] = self.generator.uniform(self.problem.lb[idx], self.problem.ub[idx])
            return child

在上述代碼中,self.problem.n_dims表示個體中基因的數(shù)量。self.problem.generate_solution()是生成一個新的隨機(jī)解,該解可能會用于替換當(dāng)前子代的某些基因。self.generator.uniform(0, 1, self.problem.n_dims)生成一個0到1之間的隨機(jī)數(shù)數(shù)組,與變異概率self.pm比較,確定哪些基因位點將發(fā)生變異。np.where函數(shù)根據(jù)這個條件選擇性地替換基因值。

對于例子里單浮點數(shù)的個體,翻轉(zhuǎn)變異將簡化為在給定的值范圍內(nèi)重新生成一個隨機(jī)浮點數(shù)。如果變異策略是swap、scramble或inversion,由于只有一個浮點數(shù),這些策略將不適用或不產(chǎn)生任何效果。

回到例子

optimizer = GA.BaseGA(epoch=100, pop_size=50, pc=0.85, pm=0.1)

這行代碼創(chuàng)建了一個遺傳算法優(yōu)化器的實例,并設(shè)置了幾個重要的參數(shù):

  • epoch=100:這指定了算法的迭代次數(shù),即算法將運(yùn)行100代。
  • pop_size=50:這指定了種群的大小,即每一代中有50個候選解。
  • pc=0.85:這是交叉概率(crossover probability),指在每一代中,有多少比例的候選解將通過交叉(即基因的重組)來產(chǎn)生新的后代。在這里,設(shè)置為85%。
  • pm=0.1:這是變異概率(mutation probability),指在每一代中,有多少比例的候選解將經(jīng)歷變異(即基因的隨機(jī)改變)。在這里,設(shè)置為10%。
    這些參數(shù)是遺傳算法性能的關(guān)鍵,它們需要根據(jù)具體問題進(jìn)行調(diào)整以達(dá)到最佳效果。
optimizer.solve(problem_dict)

這行代碼調(diào)用優(yōu)化器的 solve 方法,并傳遞之前定義的 problem_dict 作為參數(shù)。solve 方法將使用遺傳算法來尋找最優(yōu)解或者盡可能接近最優(yōu)解的解決方案。

problem_dict 包含了目標(biāo)函數(shù) obj_func(用于評估解的質(zhì)量)、解的邊界 bounds(定義了解的搜索空間),以及優(yōu)化目標(biāo) minmax(指明是最小化問題還是最大化問題)。

通過執(zhí)行這兩行代碼,遺傳算法將運(yùn)行指定的迭代次數(shù)(在本例中為100代),并在每一代中使用遺傳操作(選擇、交叉、變異)來改進(jìn)解,最終返回找到的最佳解。這個最佳解將是根據(jù)目標(biāo)函數(shù)評估得到的最優(yōu)質(zhì)的解,同時受到解空間邊界的約束。

打印結(jié)果

print(optimizer.g_best.solution)
print(optimizer.g_best.target.fitness)

最后,優(yōu)化算法運(yùn)算結(jié)束,打印最佳方案即\(x\)和最佳適應(yīng)度,本例子等價于\(f(x)\)最小值。
結(jié)果如下:
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: Solving single objective optimization problem.
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 1, Current best: 509877.0525830909, Global best: 509877.0525830909, Runtime: 0.00927 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 2, Current best: 432309.9094269061, Global best: 432309.9094269061, Runtime: 0.00697 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 3, Current best: 432309.9094269061, Global best: 432309.9094269061, Runtime: 0.00829 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 4, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00681 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 5, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00785 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 6, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00749 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 7, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00863 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 8, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00734 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 9, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00702 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 10, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00653 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 11, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00696 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 12, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00776 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 13, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00768 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 14, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00854 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 15, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00748 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 16, Current best: 48716.68478834449, Global best: 48716.68478834449, Runtime: 0.00735 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 17, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00716 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 18, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00768 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 19, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00796 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 20, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00805 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 21, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00838 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 22, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00754 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 23, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00818 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 24, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00731 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 25, Current best: 17626.98464372988, Global best: 17626.98464372988, Runtime: 0.00890 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 26, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00742 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 27, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00778 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 28, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00720 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 29, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00776 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 30, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00761 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 31, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00767 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 32, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00734 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 33, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00767 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 34, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00835 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 35, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00910 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 36, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00857 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 37, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00941 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 38, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00676 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 39, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00808 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 40, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00701 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 41, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00844 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 42, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00701 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 43, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00953 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 44, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00694 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 45, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00839 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 46, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00770 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 47, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00756 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 48, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00758 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 49, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00846 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 50, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00739 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 51, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00702 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 52, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00773 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 53, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00734 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 54, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00775 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 55, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00721 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 56, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00710 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 57, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00803 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 58, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00802 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 59, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00802 seconds
2024/04/11 11:29:05 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 60, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00728 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 61, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00769 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 62, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00647 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 63, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00755 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 64, Current best: 5265.4477712475245, Global best: 5265.4477712475245, Runtime: 0.00766 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 65, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00891 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 66, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00743 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 67, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00778 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 68, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00698 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 69, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00776 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 70, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00697 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 71, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00864 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 72, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00715 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 73, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00817 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 74, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00633 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 75, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00836 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 76, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00716 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 77, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00754 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 78, Current best: 2293.6227363517078, Global best: 2293.6227363517078, Runtime: 0.00699 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 79, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00819 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 80, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00794 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 81, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00770 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 82, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00727 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 83, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00771 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 84, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00749 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 85, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00729 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 86, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00784 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 87, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00805 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 88, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00724 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 89, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00733 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 90, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00749 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 91, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00745 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 92, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00724 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 93, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00797 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 94, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00968 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 95, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.01172 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 96, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.01594 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 97, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.01259 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 98, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00722 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 99, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00835 seconds
2024/04/11 11:29:06 AM, INFO, mealpy.evolutionary_based.GA.BaseGA: >>>Problem: P, Epoch: 100, Current best: 1232.002800987481, Global best: 1232.002800987481, Runtime: 0.00735 seconds
[35.09989745]
1232.002800987481

結(jié)果分析

就看結(jié)果的最后兩行,不要看中間過程,中間過程可以拿來分析,如果不想看到中間過程,可以在問題字典里添加"log_to": None, 鍵值對。

 # 定義問題字典
    problem_dict = {
        "obj_func": objective_func,
        "bounds": FloatVar(lb=[-10000], ub=[10000]),
        "minmax": "min",
        "log_to": None,
    }

迭代100代,從-10000到10000 實數(shù)里,最終結(jié)果算出來,當(dāng)\(x=35.09989745\)時,\(f(x)\)最小,且等于1232.002800987481
然后,第一次接觸遺傳算法的,不禁會發(fā)出大大的疑問:搞了半天,就這?????。。?!我一秒鐘都得出是\(x=0\)了。

我知道你困了累了,但請別困,別累。
從結(jié)果來看,那說明咱們上面說的原理沒錯,確實是一步一步的遺傳變異,得到的結(jié)果。至于結(jié)果不如意,那肯定是需要繼續(xù)調(diào)優(yōu)的。不然那些調(diào)包俠,調(diào)參俠的稱呼怎么來的?

參數(shù)調(diào)優(yōu)分析

GA.BaseGA 它在尋找全局最優(yōu)解的過程中可能會找到局部最優(yōu)解或者近似解。遺傳算法的性能(即能否找到全局最優(yōu)解以及找到解的速度)取決于多個因素,包括:

  • 目標(biāo)函數(shù)的復(fù)雜性和多峰性:如果目標(biāo)函數(shù)有很多局部最優(yōu)解,算法可能陷入其中之一而不是全局最優(yōu)解。
  • 種群大小(pop_size):較大的種群可以提供更多的多樣性,有助于探索解空間但同時也會增加計算成本。
  • 交叉概率(pc)和變異概率(pm):這些參數(shù)控制算法的探索和開發(fā)的平衡,需要根據(jù)具體問題進(jìn)行調(diào)整。
  • 選擇、交叉和變異操作的策略:這些操作如何實施也會影響算法的表現(xiàn)。
  • 迭代次數(shù)(epoch):迭代次數(shù)越多,算法有更多的機(jī)會改進(jìn)當(dāng)前解,但同時也意味著更高的計算成本。

例子中目標(biāo)函數(shù)是一個簡單的單變量平方函數(shù),它的全局最小值在 x = 0 處(假裝不知道)。遺傳算法應(yīng)該能夠找到這個全局最小值,或者至少是一個非常接近的近似值。結(jié)果不盡如人意,可能有幾個原因:

  • 隨機(jī)性:遺傳算法包含隨機(jī)性,每次運(yùn)行可能得到不同的結(jié)果??赡苄枰啻芜\(yùn)行來獲得更好的統(tǒng)計結(jié)果。
  • 參數(shù)設(shè)置:pop_size、pc 和 pm 這些參數(shù)可能需要調(diào)整以適應(yīng)特定問題。
  • 初始化:初始種群的生成可能沒有很好地覆蓋解空間。
  • 早熟收斂:算法可能過早地收斂到了一個局部最優(yōu)解而非全局最優(yōu)解。
  • 迭代次數(shù)(epoch)不足:可能需要更多的迭代次數(shù)來允許算法有足夠的時間來優(yōu)化解。

要改進(jìn)結(jié)果,可以嘗試以下方法:

  • 增加迭代次數(shù):增加epoch的值,允許算法有更多的時間來改進(jìn)解。
  • 調(diào)整初始種群的生成。
  • 調(diào)整種群大?。涸黾觩op_size的值,提供更多的初始解和多樣性。
  • 調(diào)整交叉和變異概率:調(diào)整pc和pm的值,嘗試找到更好的探索和開發(fā)之間的平衡。
  • 多次運(yùn)行:由于遺傳算法的隨機(jī)性質(zhì),多次運(yùn)行并取最佳結(jié)果可能有助于獲得更好的解。

優(yōu)化

根據(jù)上面的分析,我們可以挑一兩個參數(shù)試試

優(yōu)化1: 大力出奇跡,增加迭代次數(shù)

代碼其他不變,代數(shù)從100 代變成 10000代

optimizer = GA.BaseGA(epoch=10000, pop_size=50, pc=0.85, pm=0.1)

結(jié)果:
[-0.20769044]
0.04313531784135752

看來結(jié)果是-0.2,還是不太能接受,繼續(xù)努力優(yōu)化。

優(yōu)化2 : 啟用先知預(yù)測功能,邊界值調(diào)小

從結(jié)果來看,\(x\)越來越小,那么,\(x\)邊界值就可以不用從[-10000,10000]這么大范圍篩選了,直接[-10,10]

problem_dict = {
    "obj_func": objective_func,
    "bounds": FloatVar(lb=[-10], ub=[10]),
    "minmax": "min", }
optimizer = GA.BaseGA(epoch=10000, pop_size=50, pc=0.85, pm=0.1)

結(jié)果:
[7.35480744e-05]
5.409319244888902e-09

$x= 7.35480744 \times 10^{-5}, f(x)= 5.409319244888902 \times 10^{-9} $
第二次結(jié)果看起來非常不錯。運(yùn)氣不錯哈。(不要臉!)

總結(jié)

這只是我對mealpy庫的入門嘗試,還有很多高級特性沒用上,比如多線程,微調(diào),畫圖等等,優(yōu)化算法也只是研究了BaseGA,其他算法估計也有其獨到之處。
舉的例子也是非常沒有實際應(yīng)用的可能性。
在這些探索留到日后有空再慢慢看看吧,這篇主要目的是讓大家知道有這么一個庫。
我也是零基礎(chǔ)入門中,文章中可能有些錯誤,歡迎指正。文章來源地址http://www.zghlxwxcb.cn/news/detail-847785.html

到了這里,關(guān)于元啟發(fā)式算法庫 MEALPY 初體驗-遺傳算法為例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 求解三維裝箱問題的啟發(fā)式深度優(yōu)先搜索算法(python)

    求解三維裝箱問題的啟發(fā)式深度優(yōu)先搜索算法(python)

    給定一個容器(其體積為 V V V ) 和一系列待裝載的箱子,容器和箱子的形狀都是長方體。問題的目標(biāo)是要確定一個可行的箱子放置方案使得在滿足給定裝載約束的情況下,容器中包含的箱子總體積 S S S 盡可能的大,即填充率盡可能的大,這里填充率指的是 S / V ? 100 % S/ V * 1

    2024年02月05日
    瀏覽(25)
  • 啟發(fā)式搜索算法:A算法(全局、局部擇優(yōu)算法)+A*算法 解決八數(shù)碼問題

    啟發(fā)式搜索算法:A算法(全局、局部擇優(yōu)算法)+A*算法 解決八數(shù)碼問題

    參考博客:人工智能搜索策略:A*算法 在圖搜索算法中,如果能在搜索的每一步都利用估價函數(shù)f(n)=g(n)+h(n)對Open表中的節(jié)點進(jìn)行排序,則該搜索算法為 A算法 。由于估價函數(shù)中帶有問題自身的啟發(fā)性信息,因此,A算法又稱為啟發(fā)式搜索算法。 對啟發(fā)式搜索算法,又可根據(jù)搜

    2024年02月10日
    瀏覽(26)
  • 人工大猩猩部隊優(yōu)化器:一種新的面向全局優(yōu)化問題的自然啟發(fā)元啟發(fā)式算法(Matlab代碼實現(xiàn))

    人工大猩猩部隊優(yōu)化器:一種新的面向全局優(yōu)化問題的自然啟發(fā)元啟發(fā)式算法(Matlab代碼實現(xiàn))

    ???????目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3 參考文獻(xiàn) ?????4 Matlab代碼 元啟發(fā)式在解決優(yōu)化問題方面發(fā)揮著關(guān)鍵作用,其中大多數(shù)都受到自然界中自然生物集體智慧的啟發(fā)。本文提出了一種新的元啟發(fā)式算法,其靈感來自自然界大猩猩部隊的社會智能,稱為人工大猩猩部

    2024年02月01日
    瀏覽(25)
  • 【圖論】樹上啟發(fā)式合并

    【圖論】樹上啟發(fā)式合并

    本篇博客參考: Oi Wiki 樹上啟發(fā)式合并 算法學(xué)習(xí)筆記(86): 樹上啟發(fā)式合并 首先,什么是 啟發(fā)式合并 ? 有人將其稱為“優(yōu)雅的暴力”,啟發(fā)式合并就是在合并兩個部分的時候,將內(nèi)容少的部分合并至內(nèi)容多的部分,減少合并的操作時間 樹上啟發(fā)式合并(dsu on tree) 可以被用

    2024年04月15日
    瀏覽(22)
  • 數(shù)學(xué)啟發(fā)式

    優(yōu)化求解器 | Gurobi 數(shù)學(xué)啟發(fā)式算法:參數(shù)類型與案例實現(xiàn) 數(shù)學(xué)啟發(fā)式算法 | 可行性泵 (Feasibility Pump)算法精講:一份讓您滿意的【理論介紹+編程實現(xiàn)+數(shù)值實驗】學(xué)習(xí)筆記(Python+Gurobi實現(xiàn)) 大佬到底是大佬!這些資料太適合我這種沒基礎(chǔ)的人了! 數(shù)學(xué)啟發(fā)式(Mathematical Heurist

    2024年02月04日
    瀏覽(21)
  • 樹上啟發(fā)式合并(dsu on tree)

    dsu on tree dsu text{dsu} dsu 一般指 disjoint?set?union text{disjoint set union} disjoint?set?union ,即并查集。 dsu?on?tree text{dsu on tree} dsu?on?tree 指樹上合并與查詢操作,但它的實現(xiàn)和普通的并查集并無關(guān)聯(lián),兩者的共同點僅僅在于都能合并集合和查詢而已。 dsu?on?tree text{dsu on tree} d

    2024年02月16日
    瀏覽(20)
  • 【論文閱讀】聚集多個啟發(fā)式信號作為監(jiān)督用于無監(jiān)督作文自動評分

    【論文閱讀】聚集多個啟發(fā)式信號作為監(jiān)督用于無監(jiān)督作文自動評分

    本文提出一個新的無監(jiān)督的AES方法ULRA,它不需要真實的作文分?jǐn)?shù)標(biāo)簽進(jìn)行訓(xùn)練; ULRA的核心思想是使用多個啟發(fā)式的質(zhì)量信號作為偽標(biāo)準(zhǔn)答案,然后通過學(xué)習(xí)這些質(zhì)量信號的聚合來訓(xùn)練神經(jīng)自動評分模型。 為了將這些不一致的質(zhì)量信號聚合為一個統(tǒng)一的監(jiān)督信號,我們將自動

    2024年02月16日
    瀏覽(28)
  • 如何進(jìn)行測試分析與設(shè)計-HTSM啟發(fā)式測試策略模型 | 京東云技術(shù)團(tuán)隊

    如何進(jìn)行測試分析與設(shè)計-HTSM啟發(fā)式測試策略模型 | 京東云技術(shù)團(tuán)隊

    測試,沒有分析與設(shè)計就失去了靈魂; 測試人員在編寫用例之前,該如何進(jìn)行測試分析與設(shè)計呢?上次在《測試的底層邏輯》中講到了【輸入輸出測試模型】,還講到了【2W+1H測試分析法】,但2W1H分析法是初步的分析方法,具體在測試中如何落地,還需要更細(xì)的設(shè)計。 今天

    2024年02月05日
    瀏覽(23)
  • 【無碼專區(qū)1】簡單路徑的第二大邊權(quán)(啟發(fā)式合并+最小生成樹)

    只有std,沒有自我實現(xiàn),所以叫做無碼專區(qū) description 給一張無向圖,多次詢問,每次詢問兩個點之間所有簡單路徑(不重復(fù)經(jīng)過點)中邊權(quán)第二大(不是嚴(yán)格第二大)的權(quán)值的最小值。 數(shù)據(jù)范圍: 1 0 5 10^5 1 0 5 級別 我的想法 前 50 % 50% 5 0 % 的數(shù)據(jù) q , n ≤ 1 0 3 , m ≤ 2 × 1 0

    2024年02月08日
    瀏覽(24)
  • Codeforces Round 890 (Div. 2) D. More Wrong(交互題 貪心/啟發(fā)式 補(bǔ)寫法)

    Codeforces Round 890 (Div. 2) D. More Wrong(交互題 貪心/啟發(fā)式 補(bǔ)寫法)

    題目 t(t=100)組樣例,長為n(n=2000)的序列 交互題,每次你可以詢問一個區(qū)間[l,r]的逆序?qū)?shù),代價是 要在的代價內(nèi)問出最大元素的位置,輸出其位置 思路來源 neal Codeforces Round 890 (Div. 2) supported by Constructor Institute D (交互+分治) 附加強(qiáng) - 知乎 題解 賽中開題順序大失敗沒看這個

    2024年02月14日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包