matlab智能算法之遗传算法

news2024/12/28 3:09:16

智能算法之遗传算法

  • 智能算法之遗传算法
    • 1.背景
    • 2.算法
    • 3.案例
      • 3.1 案例求解二元函数的最大值

智能算法之遗传算法

1.背景

2.算法

3.案例

3.1 案例求解二元函数的最大值

例1:计算二元函数 f ( x , y ) = 20 + x 2 + y 2 − 10 ∗ ( c o s ( 2 π x ) + c o s ( 2 π y ) ) f(x,y)=20+x^2+y^2-10*(cos(2\pi x)+cos(2\pi y)) f(x,y)=20+x2+y210(cos(2πx)+cos(2πy)) 的最大值,其中 x ∈ [ 0 , 10 ] , y ∈ [ 0 , 5 ] x\in[0,10],y\in [0,5] x[0,10],y[0,5]
目标函数:

% -------------------适应度函数--------------------目标函数
function y = fitnessfcn(x)
    y = 20+x(1)^2+x(2)^2-10*(cos(2*pi*x(1))+cos(2*pi*x(2)));
end

选择/复制:

% ----------------------------选择子函数selection--------------------------------
function population = selection(population, best, fitness, N)
    newpopulation = zeros(N, size(population, 2));           % 先预先分配内存   可以不要
    p = fitness./sum(fitness);
    q = cumsum(p);
    for i = 1:(N-1)
        r = rand;
        tmp = find(r <= q);
        newpopulation(i, :) = population(tmp(1), :);
    end
    newpopulation(N, :) = best;                              % 保留最优 
    population = newpopulation;
end

交叉:

% -------------------交叉子函数crossover-------------------
function population = crossover(population, best, pc, L, N)
    for i = 1:2:(N-1)
        cc = rand;
        if cc < pc
            point = 1 + ceil(rand*(L-2));                    % 取得一个2到L-1的整数
            ch = population(i, :);
            population(i, point+1:L) = population(i+1, point+1:L);
            population(i+1, point+1:L) = ch(1, point+1:L);
        end
    end
    population(N, :) = best;                                 % 保留最优
end

变异:

% -------------------------变异子函数mutation----------------------
function population = mutation(population, pm, L, N)
    mm = rand(N, L)<pm;                                      % 小于变异概率的赋值为1,其他为0;也可以取反变异,这里的mm是逻辑值
    mm(N, :) = zeros(1, L);                                  % 最优保留,不变异
    population(mm) = 1-population(mm);                       % 变异发生
end

二进制转换为十进制:

% ----------------解码子函数decode------------------
function [xx, fitness] = decoding(population, lb, ub, Li, N)
    for i = 1:N
        for k = 1:length(Li)
            s(k) = 0;
            for j = 1:Li(k)
                s(k) = s(k) + population(i, sum(Li(1:k))-j+1)*2^(j-1);    % 二进制转十进制
            end
            x(k) = (ub(k) - lb(k))*s(k)/(2^Li(k)-1)+lb(k);                % 映射到取值范围内
        end
        fitness(i) = fitnessfcn(x);
        xx(i, :) = x;
    end
end

主函数:

clc;clear;close all;
% ----------------初始化参数--------------------
e = 0.01;                         % 计算精度
lb = [0; 0];                      % 自变量下界
ub = [10; 5];                     % 自变量上界
Li = ceil(log2((ub-lb)./e));       
L = sum(Li);                      % 变量字串长度
N = 30;                           % 群体规模
T = 30;                           % 最大遗传代数
pc = 0.9;                         % 交叉概率
pm = 0.05;                        % 变异概率                       
% -----------------初始种群----------------------
population = round(rand(N, L));                           % 初始种群,二进制编码(0,1)之间随机数,然后四舍五入为0/1
[xx, fitness] = decoding(population, lb, ub, Li, N);      % 解码,计算适应度
[optfit, indmax] = max(fitness);                 % 初始种群最佳个体的适应度和索引
best = population(indmax, :);                    % 初始种群最优染色体  二进制的
optx = xx(indmax, :);                            % 初始种群最优变量值  十进制的
fitcurve = zeros(1, T+1);                        % 有多少代最优适应度
fitcurve(1) = optfit;                            % 第一代的最优适应度
% -------------------迭代求解----------------------
for ii = 1:T
    population = selection(population, best, fitness, N);        % 选择(复制)
    population = crossover(population, best, pc, L, N);          % 交叉
    population = mutation(population, pm, L, N);                 % 变异
    [xx, fitness] = decoding(population, lb, ub, Li, N);         % 解码,计算适应度
    [fmax, indmax] = max(fitness);                               % 当代最佳个体
    if fmax >= optfit
       best = population(indmax, :);                             % 到目前为止最优染色体
       optx = xx(indmax, :);                                     % 到目前为止最优变量值
       optfit = fmax;                                            % 到目前为止最优适应度
    end
    fitcurve(ii+1) = optfit;                                     % 存储每代的最优适应度
end
optx                                                             % 最优变量
optfit                                                           % 最优适应度

% ------------------------画图---------------------------
subplot(1,2,1);
plot(0:T, fitcurve);
title('最优适应度曲线');
xlabel('遗传代数'); ylabel('最优适应度');
subplot(1,2,2);
x = linspace(0, 10);
y = linspace(0, 5);
[x, y] = meshgrid(x, y);
f = 20+x.^2+y.^2-10*(cos(2*pi*x)+cos(2*pi*y));
mesh(x, y, f);
hold on;
scatter3(optx(1), optx(2), optfit, 'red', 'filled');  
xlabel('x'); ylabel('y'); zlabel('f');title('f(x,y)=20+x^2+y^2-10*(cos(2\pi x)+cos(2\pi y))')

得到最优解为: ( 9.5406 , 4.5303 ) (9.5406,4.5303) (9.5406,4.5303),最大值为 f ( 9.5406 , 4.5303 ) = 151.0422 f(9.5406,4.5303)=151.0422 f(9.5406,4.5303)=151.0422
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Node.js计算机毕业设计大学生健康系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

Qt扫盲-QToolButton 理论总结

QToolButton 理论总结1. 概述2. 使用场景3. 外观样式4. 菜单用途1. 概述 ToolButton 是一种特殊按钮&#xff0c;用于快速访问 特定命令或选项。与普通PushButton 按钮常用显示内容不同&#xff0c;ToolButton 通常不显示文本标签&#xff0c;而是显示图标。当然&#xff0c;也…

Windows与Linux利用系统自带实现共享文件夹的功能

这里需要两台机器在同一局域网或者可互相ping通。系统以Windows11和Windows Subsystem for Linux&#xff08;Ubuntu22.04.1&#xff09;或国产Linux发行版的统信UOS&#xff08;版本号20&#xff09;为例&#xff0c;其他的版本系统也类似&#xff0c;非Linux虚拟机也测试过&a…

蚁群算法详解-解决TSP问题

文章目录前言一、蚁群算法是什么&#xff1f;算法步骤二、基本原理三、数学模型1、算法中的参数设置2、构建路径轮盘赌例子3、更新信息素浓度代码终止四、代码展示五、参数实际设定1.参数设定的准则2.蚂蚁数量3.信息素因子4.启发函数因子5.信息素挥发因子6. 最大迭代次数7. 组合…

Android 实现相机(Camera)预览

CameraX 是一个 Jetpack 库&#xff0c;旨在帮助您更轻松地开发相机应用。 对于新应用&#xff0c;我们建议从 CameraX 开始。它提供一致且易于使用的 API&#xff0c;适用于绝大多数 Android 设备&#xff0c;并向后兼容 Android 5.0&#xff08;API 级别 21&#xff09;。 Ca…

Python基础篇学习

本篇博文目录:一.Python基础语法1.Python基础知识2.了解Python的基础语法结构3.python基础知识二.数据类型1.数字2.字符串3.布尔4.空值&#xff1a;None5.列表6.元祖7.字典8.Bytes9.集合(Set)三:程序三大结构( 顺序结构&#xff0c;分支结构&#xff0c;循环结构)1.顺序结构2.分…

2022-我的秋招之旅

1. 自我介绍 ​ 版1&#xff1a;&#xff08;实习&#xff09; ​ 面试官好&#xff0c;我叫xx&#xff0c;来自xx&#xff0c;目前研究生xx&#xff0c;就读于xx&#xff0c;在研究生期间&#xff0c;担任的职务为xx&#xff0c;在校期间参加各种比赛&#xff0c;如xx等&…

MATLB|实时机会约束决策及其在电力系统中的应用

目录 一、概述 二、数学模型 2.1 机会约束决策的情景方法 2.2 带有测量的情景方法 三、 机会约束决策的一种快速方法 3.1 通过仿射变换进行近似调节 3.2 可行域的仿射变换 3.3 两阶段决策算法 四、算例——配电网 4.1 防止过电压的有功功率削减 4.2 数值模拟 4.3 运…

第二十章 多源最短路之Floyd算法的思路即实现(超强解析)

第二十章 多源最短路之Floyd算法的思路即实现一、什么是多源最短路二、Floyd算法1、算法思路2、算法模板&#xff08;1&#xff09;问题&#xff1a;&#xff08;2&#xff09;代码模板&#xff1a;&#xff08;3&#xff09;代码分析:一、什么是多源最短路 我们之前了解到的d…

远程Jenkins新增Mac电脑节点,你知道怎么操作么?

目录&#xff1a;导读 一&#xff0c;前言 二&#xff0c;Mac电脑准备 1&#xff0c;网络环境 2&#xff0c;设置允许远程登录 三&#xff0c;Jenkins新增节点 1&#xff0c;新建节点 2&#xff0c;配置节点 3&#xff0c;节点启动代理 四&#xff0c;写在最后 一&…

算法竞赛入门【码蹄集进阶塔335题】(MT2176-2200)

算法竞赛入门【码蹄集进阶塔335题】(MT2176-2200&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2176-2200&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2176 围栏木桩2. MT2177 学习时间3. MT2178 最长子段…

【设计模式】观察者模式Observe(Java)

文章目录1. 观察者模式定义2. 类图3.Java实现3.1 定义主题Interface3.2 定义观察者Interface3.3 定义具体主题3.4 定义具体观察者3.5 定义测试主方法1. 观察者模式定义 观察者模式定义了对象之间的一对多依赖&#xff0c;这样以来&#xff0c;当一个对象改变状态时&#xff0c…

如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等?

如何利用ArcGIS实现电子地图可视化表达&#xff1f;如何利用ArcGIS分析空间数据&#xff1f;如何利用ArcGIS提升SCI论文的层次&#xff1f;制图是地理数据展现的直观形式&#xff0c;也是地理数据应用的必要基础 本文从ArcGIS的基本操作、ArcGIS 的空间数据分析及ArcGIS 的高级…

使用MyBatis Generator自动创建代码

使用MyBatis Generator自动创建代码安装jdk下载jar 和配置xml文件自动生成代码报错分析与解决Table configuration with catalog null, schema null, and table public.user_t did not resolve to any tablesThe specified target project directory src does not exist安装jdk…

深入解决Linux内存管理之page fault处理

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器&#xff0c;Contex-A53&#xff0c;双核使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 内核实现只是在进程的地址空间建立好了vma区域&#xff0c;并没有实际的虚拟地址到物理地址的映射操作。…

基于Pyqt5实现笔记本摄像头拍照及PaddleOCR测试

在上一篇文章《基于百度飞桨PaddleOCR的图片文字识别》的基础上&#xff0c;做了个简单的扩展&#xff1a; 1、通过Pyqt5做个简单的UI界面&#xff1b; 2、通过OpenCV操作笔记本摄像头进行视频显示、拍照等功能&#xff1b; 3、加载图片&#xff1b; 4、对拍照图片或者加载的图…

Python贝叶斯回归分析住房负担能力数据集

我想研究如何使用pymc3在贝叶斯框架内进行线性回归。根据从数据中学到的知识进行推断。 最近我们被客户要求撰写关于贝叶斯回归的研究报告&#xff0c;包括一些图形和统计输出。 视频&#xff1a;线性回归中的贝叶斯推断与R语言预测工人工资数据案例 贝叶斯推断线性回归与R语言…

猿如意---Visual Studio手把手教学安装和下载.

亲自为大家示范如何使用猿如意以及在猿如意当中下载&#xff0c;安装和使用python3.10版本&#xff0c;让大家喜欢上这款好用的app—猿如意。 文章目录前言一、手把手教你猿如意的安装、下载二、手把手教你Visual Studio的安装、下载1.找到我需要的工具2.我需要的工具的安装、下…

最新Crack:foxit pdf sdk 8.4.1_win_java

Foxit pdf sdk一个功能强大、易于使用的核心 API&#xff0c;用于呈现、查看、注释、签名、保护和管理 PDF 中的表单。 Foxit pdf sdk开发人员的最佳工具 快速整合 C、C#、C、Python 和 Java 中功能强大且易于使用的核心 API。系统要求&#xff1a;Windows XP、Vista、7、8 和…

【云原生 | Kubernetes 实战】12、K8s 四层代理 Service 入门到企业实战应用(上)

目录 一、Service 四层代理基本介绍 1.1 四层负载均衡 Service&#xff1a;概念、原理解读 1 为什么要有Service&#xff1f; 2 Service 概述 3 Service 工作原理 4 kubernetes 集群中有三类 IP 地址 二、创建 Service 资源 2.1 Service 的四种类型 2.2 Service 的端口…