【計算智能】遺傳算法(二):基本遺傳算法在優化問題中的應用【實驗】

前言

本系列文章架構概覽:

??本文將介紹基本遺傳算法在解決優化問題中的應用,通過實驗展示其基本原理和實現過程:選取一個簡單的二次函數作為優化目標,并利用基本遺傳算法尋找其在指定范圍內的最大值。

2. 基本遺傳算法(SGA)

??基本遺傳算法(Simple Genetic Algorithm : SGA)又稱為簡單遺傳算法,使用選擇算子、交叉算子和變異算子這三種基本的遺傳算子,操作簡單、容易理解,是其它遺傳算法的雛形和基礎。

2.1 基本遺傳算法的構成要素

??基本遺傳算法由染色體編碼方法、適應度函數和遺傳算子三個主要要素組成,前文已經對每個要素進行了詳細說明:

2.2 算法流程

算法流程

  • 初始化種群: 隨機生成一定數量的個體,每個個體對應一個可能的解,用二進制或其他編碼方式表示。
  • 適應度評價: 計算每個個體的適應度,適應度值反映了個體解的優劣程度。
  • 選擇操作: 根據個體的適應度值,使用一定的選擇策略(如輪盤賭選擇、錦標賽選擇等)從當前種群中選擇出一部分個體,作為下一代種群的父代。
  • 交叉操作: 對選中的父代個體進行交叉操作,產生新的子代個體。交叉操作通過==重組父代個體的基因==,產生新的解空間。
  • 變異操作: 對交叉后的子代個體以一定的小概率進行變異操作,==引入新的基因==,增加種群的多樣性。
  • 終止條件判斷: 檢查是否滿足算法終止條件(如達到最大迭代次數、找到滿意解等),若滿足則終止,否則回到步驟2,進行下一代種群的進化。

??通過不斷重復上述過程,種群中個體的適應度將逐漸提高,最終converge到問題的最優解或近似最優解。

2.3 偽代碼

Procedure GeneticAlgorithm()t = 0 // 初始化迭代次數InitializePopulation(P(t)) // 初始化種群Evaluate(P(t)) // 評估種群中個體的適應度Best = KeepBest(P(t)) // 保留當前最優個體while (not TerminationConditionMet()) doP(t) = Selection(P(t)) // 選擇操作P(t) = Crossover(P(t)) // 交叉操作P(t) = Mutation(P(t))  // 變異操作t = t + 1 // 更新迭代次數P(t) = P(t-1)Evaluate(P(t)) // 重新評估種群中個體的適應度if (BestIndividual(P(t)) > Best) thenBest = ReplaceBest(P(t)) // 更新最優個體end ifend whilereturn Best // 返回找到的最優解
End Procedure

3. 應用到優化問題中

3.1 理論分析

3.2 代碼實現

1. 導入所需庫

import random

2. 目標函數 f(x)

def f(x):return x ** 2

3 初始化種群

def initialize_population(population_size, chromosome_length):return [bin(random.randint(0, 31))[2:].zfill(chromosome_length) for _ in range(population_size)]

??生成指定大小的種群,每個個體都是一個長度為?chromosome_length?(本實驗為5)的二進制字符串,代表一個取值范圍在 0 到 31 之間的整數。函數可以拆分為:

def initialize_population(size):return [encode(random.randint(0, 31)) for _ in range(size)]
  • 染色體編碼函數 encode(x)
def encode(x):return bin(x)[2:].zfill(5)

??將整數 x 編碼成一個長度為 5 的二進制字符串。內置的 bin() 函數將整數轉換為二進制字符串,然后使用 zfill() 函數填充到長度為 5。

4. 計算適應度

def evaluate_individual(individual):x = int(individual, 2)return f(x)def evaluate_population(population):return [evaluate_individual(individual) for individual in population]
  • evaluate_individual函數計算單個個體的適應度,將個體的二進制編碼轉換為十進制數x,然后計算目標函數f(x)的值作為適應度;
  • evaluate_population函數遍歷整個種群,計算每個個體的適應度,返回一個包含所有個體適應度值的列表。

5. 選擇操作:輪盤賭選擇

def selection(population, fitness_values):total_fitness = sum(fitness_values)# 計算每個個體被選中的概率probabilities = [fitness / total_fitness for fitness in fitness_values]# print("\t選擇概率: {}".format(probabilities))selected_population = []for _ in range(len(population)):selected_individual = random.choices(population, weights=probabilities)[0]# print("\t被選個體: {}".format(selected_individual))selected_population.append(selected_individual)return selected_population

??從輪盤賭選擇的機制中可以看到,較優染色體的P值較大,被選擇的概率就相對較大。但由于選擇過程具有隨機性,并不能保證每次選擇均選中這些較優的染色體,因此也給予了較差染色體一定的生存空間。

點擊【計算智能】遺傳算法(二):基本遺傳算法在優化問題中的應用【實驗】——古月居可查看全文

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39968.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試公司的時候一般要問HR的問題和關注的福利待遇(比較重要,親測)

1.問是否雙休,是否有五險一金 2.問福利待遇,是否包吃住,是否有班車及補貼等 3.是否加班 4.是否有健身房,食堂等設施 5.是否出差,在哪個城市 6.工作地點能不能選擇 7.晉升機會怎么樣,什么時候才能晉升&#…

從0構建一款appium-inspector工具

上一篇博客從源碼層面解釋了appium-inspector工具實現原理,這篇博客將介紹如何從0構建一款簡單的類似appium-inspector的工具。如果要實現一款類似appium-inspector的demo工具,大致需要完成如下六個模塊內容 啟動 Appium 服務器連接到移動設備或模擬器啟…

vue 中 使用騰訊地圖 (動態引用騰訊地圖及使用簽名驗證)

在設置定位的時候使用 騰訊地圖 選擇地址 在 mounted中引入騰訊地圖: this.website.mapKey 為地圖的 key // 異步加載騰訊地圖APIconst script document.createElement(script);script.type text/javascript;script.src https://map.qq.com/api/js?v2.exp&…

SS8812T替代DRV8812的國產雙通道H橋電機驅動芯片

由工采網代理的SS8812T是一款國產雙通道H橋電機驅動芯片;該芯片為打印機和其它電機一體化應用提供一種雙通道集成電機驅動方案;可Pin-to-Pin兼容替代DRV8812,可廣泛應用于POS、打印機、安防相機、辦公自動化設備、游戲機、機器人等。 產品描述…

Vue.js 案例——商品管理

一.需要做出的效果圖&#xff1a; 二.實現的步驟 首先&#xff0c;先建一個項目&#xff0c;命名Table&#xff0c;在Table項目中的components里新建一個MyTable.vue文件。 第二步&#xff0c;在原有的 HelloWorld.vue中寫入代碼。 HelloWorld.vue代碼如下&#xff1a; <…

KumiaoQQ機器人框架源碼

源碼介紹 酷喵機器人框架基于PC協議與MGCH的結合&#xff0c;MGCH即 MiraiGO-CQhttp&#xff08;代碼類型&#xff1a;易語言&#xff09;基本的API功能已經實現&#xff0c;具體可自測&#xff08;教程/日志/說明文本已附帶&#xff09;開放源碼僅供參考學習交流&#xff0c;…

遠超美國!中國AI專利數量全球第一!商湯推出面向C端用戶大模型“Vimi”,可生成分鐘級視頻!|AI日報

文章推薦 蘋果獲得OpenAI董事會觀察員職位&#xff01;Runway正籌集新一輪融資&#xff0c;估值40億美元&#xff01;&#xff5c;AI日報 AI基準測評&#xff08;下&#xff09;&#xff1a;視頻生成、代碼能力、邏輯推理&#xff0c;AI是否已經超越人類&#xff1f; 聯合國…

【linux高級IO(一)】理解五種IO模型

&#x1f493;博主CSDN主頁:杭電碼農-NEO&#x1f493; ? ?專欄分類:Linux從入門到精通? ? &#x1f69a;代碼倉庫:NEO的學習日記&#x1f69a; ? &#x1f339;關注我&#x1faf5;帶你學更多操作系統知識 ? &#x1f51d;&#x1f51d; Linux高級IO 1. 前言2. 重談對…

kubernetes dashboard安裝

1.查看符合自己版本的kubernetes Dashboard 比如我使用的是1.23.0版本 https://github.com/kubernetes/dashboard/releases?page5 對應版本 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml修改對應的yaml,…

Linux Conda 入門案例教程

Conda 的基本概念 1.什么是 Conda&#xff1f;&#xff1a;Conda 是一個開源的包管理器和環境管理器&#xff0c;用于管理 Python 和其他語言的環境和依賴項。 2.Conda 的特點&#xff1a;Conda 的特點包括快速、可靠、靈活和跨平臺支持等。 安裝和配置 1.安裝 Conda&#x…

adb不插usb線通過wifi調試

說起做手機開發也有好多年了&#xff0c;說來慚愧&#xff0c;我最近才知道安卓手機是可以不插數據線進行開發調試的。起因是公司近期采購了一批安卓一卡通設備&#xff0c;需要對其進行定制開發APP,但是由于我插USB調試發現沒有反應。通過詢問廠家才知道可以通過WIFI進行調試。…

請注意,以下這幾種操作都會導致流量卡被停用!

最近一段時間&#xff0c;小編經常收到一些反饋&#xff0c;明明是剛辦理的手機號還沒有用幾天就被停用了&#xff0c;今天&#xff0c;這篇文章我們要了解就是手機號被停用的問題。 ? 對于新辦理的手機號會被停用這個問題&#xff0c;主要還是因為運營商為了防止電話詐騙&…

vue監聽數據時 newValue, oldValue操作處理

要只存入新更改的數據&#xff0c;可以在 watch 的回調函數中進行比較&#xff0c;篩選出有變化的屬性并將其存入新數組。以下是一個示例代碼&#xff0c;假設要監聽的對象為 obj&#xff1a; data() {return {differenceArray: [], obj: { /* 對象的初始屬性 */ }}; }, compu…

java數據結構集合復習之包裝類和泛型

前言: 這是我最一年學習java的一部分的回顧總結 1.包裝類 在Java中&#xff0c;由于基本類型不是繼承自Object&#xff0c;為了在泛型代碼中可以支持基本類型&#xff0c;Java給每個基本類型都對應了一個包裝類型。 1.1基本數據類型和對應的包裝類 ----—基本數據類型包裝類…

ubuntu軟件源的兩種格式和環境變量

1. ubuntu的/etc是什么目錄&#xff1f; 在Ubuntu操作系統中&#xff0c;/etc/是一個特殊的目錄&#xff0c;它包含系統的配置文件。這些配置文件用于設置各種系統和應用程序的參數和選項。 一般來說&#xff0c;用戶可以在這個目錄下找到各種重要的配置文件&#xff0c;如網絡…

Web3 ETF的主要功能

Web3 ETF的主要功能可以概括為以下幾點&#xff0c;Web3 ETF仍是一項新興投資產品&#xff0c;其長期表現仍存在不確定性。投資者在投資Web3 ETF之前應仔細研究相關風險&#xff0c;并做好充分的風險評估。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&#xf…

商務辦公優選!AOC Q27E3S2商用顯示器,打造卓越新體驗!

摘要&#xff1a;助辦公室一族縱橫職場&#xff0c;實現高效舒適辦公&#xff01; 在日常商務辦公中&#xff0c;對于辦公室一族來說總有太多“難難難難難點”&#xff1a;工作任務繁瑣&#xff0c;熬夜加班心力交瘁、長時間伏案工作導致頸椎、眼睛等出現問題&#xff0c;職業…

BBA車主,千萬別去試駕問界M9

文 | AUTO芯球 作者 | 雷慢&響鈴 我勸你啊&#xff0c;千萬別去試駕問界M9&#xff0c; 不然啊&#xff0c;可能1個小時50萬就沒了&#xff0c; 不信你看這個“大冤種”&#xff0c; 他曾經發誓打死不買電車&#xff0c; 考慮了三、四年換寶馬X5&#xff0c; 結果談完…

GNU/Linux - 如何編譯kernel

使用 make 命令構建 Linux 內核涉及多個步驟。下面是整個過程的基本概述&#xff1a; 1. 獲取內核源代碼 * 從 kernel.org 或你的發行版軟件倉庫下載內核源代碼。 * 將源代碼解壓縮到一個目錄中。 2. 配置內核 * 切換到內核源代碼目錄。 * 可選擇清理源代碼樹&#xff1a;mak…

前端面試題5(前端常見的加密方式)

前端常見的加密方式 在前端進行數據加密主要是為了保護用戶的隱私和提升數據傳輸的安全性。前端數據加密可以采用多種方法&#xff0c;以下是一些常見的加密技術和方法&#xff1a; 1. HTTPS 雖然不是直接的前端加密技術&#xff0c;但HTTPS是保障前端與后端數據傳輸安全的基…