Matlab-遗传算法

news2024/12/22 14:34:43

文章目录

  • 遗传算法
  • 一、介绍
  • 二、遗传算法的思想
    • 1.试用范围
    • 2.案例
      • 2.1 算法思路
      • 2.2 代码实现


遗传算法

一、介绍

遗传算法是一个启发式算法,主要可以用于优化问题,下边将进行举例来进行初步了解。
举例:

  1. 从做菜说起,首先你是一个大厨,想创作出一些美味,刚开始会随机生成很多个原始配方每种配方所用的原料和手法都不相同,有无穷多种解,传统算法难以求解。

  2. 接下来会请一些评委对这些配方做出的菜进行打分(适应度)

  3. 分数高的配方会进行配方交叉会保留一部分评分高的配方,舍弃评分低的配方。配方交叉后会产生新的配方。

  4. 有时候会再交叉后会变更食材或者烹饪方式(变异)也就是进行大胆尝试创新。
    变异可能会带来惊喜,也有可能有惊无喜,所以只小概率进行

  5. 继续对新的配方进行评分,继续交叉,小概率变异,不断循环一直到无改进空间为止。

二、遗传算法的思想

在这里插入图片描述

1.试用范围

(1)线性/非线性、多目标、多函数优化类问题。
(2)不依赖于问题的背景和领域,连续/离散、单峰/多峰形式均可以
(3)和模拟退火相比有良好的全局搜索能力,不易陷入局部最优。
(4)相比于粒子群算法,遗传算法可以直接求离散问题。
注:
1. 离散优化问题常见的有组合优化、整数规划等。离散优化决策变量是有限集合中的元素,例如,在组合优化问题中,可能需要选择一组物品的组合,其中每个物品的选择是二进制的(选或不选)。
2. 连续优化决策变量可以是实数范围内的任意值(或者说在一个区间内),没有跳跃或离散点。例如,在求解一个函数的最小值时,x 可以是实数域内的任何值。
3.求解方法:

连续优化:通常使用基于梯度的优化算法(如梯度下降、牛顿法、拟牛顿法等)或全局优化算法(如粒子群优化、遗传算法等)。
离散优化:可能使用基于枚举的算法(如回溯法、分支限界法等)、整数规划方法(如分支定界法、割平面法等)、元启发式算法(如离散粒子群优化、遗传算法等)或特定的组合优化算法(如贪心算法、动态规划等)。

2.案例

在这里插入图片描述
很明显这是一个离散问题(组合问题)。
1.我们采用0和1来表示物品是否装进包内。
2.每一个物品的装包状态看成一个基因
3.问题的一个解是12位的数字所组成的个体。
在这里插入图片描述

2.1 算法思路

种群初始化->选择运算->交叉运算->变异运算->迭代循环。
选择运算:
主要是从每一代群体中挑选出优良个体遗传给下一代。
准则:
1. 适应度越高的个体被选中的几率越大。
2. 适应度较低的个体仍有被选中的可能。

问题: 为什么不直接从大到小排序选择前几个适应度比较高的个体?:
1.适应度最高的几个个体意味着适应度相差无几
2.往往基因也很相似
3.如果每次只选择适应度最高的个体就意味着每轮所选择的个体相似度很高
4.也就意味着他们的后代的相似度也高,进化陷入了停滞,意味着陷入局部最优解

我们采用轮盘赌法(思想见代码)

2.2 代码实现

%设置迭代次数
maxg=180;
%设置交叉概率
p1=0.8;
%设置变异概率
p2=0.03;
%体积和价值
C = [78,39,90,82,61,52,12,37,49,55,64,8];  % 物品体积
W = [64,37,22,41,76,34,22,21,10,57,32,12]; % 物品价值
%惩罚系数
alpha=50;
%基因数目
N=12;
Vlim=350;
maxItem=80;

%初始化种群,80个
population=randi([0,1],80,N);
%开始迭代
for i=1:maxg
    %适应度计算
    for j=1:maxItem
        fit(j)=fitness(C,W,alpha,population(j,:),Vlim);

    end
    %适应度的最大值
    maxfit=max(fit);
    %最大值的索引,有可能多个
    maxIndex=find(fit==maxfit);
    %记录下初始最优的个体
    bestItem=population(maxIndex(1,1),:);
     %采用轮盘赌法根据适应度进行初步筛选优秀个体
      %每个个体被选中的概率
      selectP=fit./sum(fit);
      %累计概率
      selectP=cumsum(selectP);
      %比较数组bet
      bet=rand(maxItem,1);
      bet=sort(bet);
      %更新bet
      bet_i=1;
      %更新个体
      item_i=1;
      %开始找,直到选出与种群数量相等的个体数
      while bet_i<=maxItem
          if selectP(item_i)>bet(bet_i)
              choosef(bet_i,:)=population(item_i,:);
              bet_i=bet_i+1;
          else
              item_i=item_i+1;
          end

      end
      %交叉,两两
     for i=1:2:maxItem
         p_v=rand;
         if p_v<p1 %80概率交叉
             %每个基因还有一半概率交叉
             q=randi([0,1],1,N);
             for j=1:N
                 if q(j)==1
                 temp=choosef(i+1,j);  % 第i+1个个体的第j个基因赋值给临时变量
                choosef(i+1,j)=choosef(i,j);
                choosef(i,j)=temp;
                 end
             end

         end
     end
%变异
for n=1:maxItem
    for m=1:N
        variation=rand(1,1);
        if variation<p2 %有2%的概率进行变异
            choosef(n,m)=~choosef(n,m);%基因取反
        end
    end
end
  population=choosef;
  population(1,:)=bestItem;
  %本轮的最优适应度
  bestfit(i)=maxfit;

end   
figure
plot(bestfit)
xlabel('迭代次数')
ylabel('目标函数值')
title('遗传算法适应度迭代')



%适应度函数
function result=fitness(c,w,alpha,item,vlim)
%总体积
    totalC=sum(item.*c);
    %总价值
    totalV=sum(item.*w);
    if totalC>vlim
         %让超过约束的方案适应度很低,也就是几乎不选择。
        totalV=totalV-alpha*(totalV-vlim);
    end
    result=totalV;

end

在这里插入图片描述

适应度图:
在这里插入图片描述

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

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

相关文章

Ubuntu22.04本地部署qwen模型、jupyterlab开发环境、LoRA微调全流程

前言 这段时间在自己的Win11系统上部署了chatGLM以及Qwen模型&#xff0c;进行对话、推理以及工具调用都没有问题&#xff0c;但是在尝试进行微调的时候发现好像并不能成功&#xff0c;因此花费了很大的力气&#xff0c;又分别在ubuntu桌面版、windows子系统WSL2 Ubuntu上部署…

leetcode-55 跳跃游戏

leetcode Problem: 55. 跳跃游戏 思路 假设我们是一个小人&#xff0c;从第一个下标开始&#xff0c;每次经过一个位置&#xff0c;我们就可以根据当前位置的数值nums[i]和位置下标i计算出该位置所能到达的后续位置的最大值rnums[i]i。而这个r之前的区域一定都是可以经过的。…

Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation论文阅读

1. 代码地址 GitHub - cardwing/Codes-for-PVKD: Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation (CVPR 2022) 2. 动机 本篇文章旨在将点云语义分割的复杂模型中的知识蒸馏到较轻量级的模型中。具体的实现方式为将原有的3D backbone网络的每一层进…

恶劣天候激光雷达点云模拟方法论文整理

恶劣天候点云模拟方法论文整理 模拟雨天点云&#xff1a;【AAAI2024】模拟雪天点云&#xff1a;【CVPR 2022 oral】模拟雾天点云&#xff1a;【ICCV2021】模拟点云恶劣天候的散射现象&#xff1a;【Arxiv 2021】模拟积水地面的水花飞溅点云&#xff1a;【RAL2022】 模拟雨天点云…

蓝桥杯Web开发【大赛大纲】15届

一、 组别 Web应用开发分为&#xff1a;大学组和职业院校组。 每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。 研究生和本科生只能报大学组。 其它高职高专院校可自行选择报任意组别。 二. 竞赛赛程 省赛时长&#xff1a;4小时。 决赛时长&#xff1a;4小…

纹理映射技术在AI去衣中的艺术与科技融合

引言&#xff1a; 在数字图像处理的世界里&#xff0c;AI去衣技术正逐步揭开其神秘的面纱。这门技术结合了深度学习的智能算法与图形学的先进手段&#xff0c;以实现对图像中衣物的智能识别与处理。在这一过程中&#xff0c;纹理映射技术发挥着至关重要的作用。本篇博客将深入探…

【GESP试卷】2024年03月Scratch四级试卷

2024年GESP03月认证Scratch四级试卷 分数&#xff1a;100 题数&#xff1a;27 一、单选题(共15题&#xff0c;每题2分&#xff0c;共30分) 010203040506070809101112131415CDBBACBCDCDADBA 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&…

【综合类型第 39 篇】《我的创作纪念日》成为创作者的第2048天

这是【综合类型第 39 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 前言 无意间看了一眼CSDN的私信&#xff0c;提示我 Allen Su &#xff0c;不知不觉今天已经是你成为创作者的 第2048天 啦&#xff0c;为了纪念这一天&#xff0c;我们为您准备了一份专属小…

vue3 响应式基础(怎么改变界面值)

在开发中&#xff0c;我们需要在改变一个数据的同时&#xff0c;去改变页面的变化&#xff0c;那这个时候响应式声明用起来就比较方便 之前做安卓开发的时候&#xff0c;要改变页面&#xff0c;首先拿到页面的一个控件&#xff0c;再对控件进行赋值或者其他的操作来改变界面 1、…

孢子捕捉分析仪的工作原理

TH-BZ1孢子捕捉分析仪是一种专门用于捕捉和分析空气中飘浮的病原菌孢子的设备。它利用现代传感技术、图像识别技术和网络通信技术&#xff0c;通过设置在田间的设备&#xff0c;连续不断地抽吸周围空气&#xff0c;吸附空气中漂浮的病原菌孢子到特制的载玻带上。然后&#xff0…

基于Kafka的日志采集

目录 前言 架构图 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 启动 二、部署filebeat 部署filebeat 添加配置文件 启动 三、部署kibana 部署kibana 修…

Vitis HLS 学习笔记--抽象并行编程模型-不良示例

目录 1. 简介 2. 基础 kernel 2.1 pass kernel 2.2 double_pass kernel 2.3 add_kernel 2.4 split kernel 3. 三种bypass 3.1 input_bypass 3.2 middle_bypass 3.3 output_bypass 4. 总结 1. 简介 本文展示三个在数据流水线中常见的问题&#xff1a; 输入参数绕过…

DAMA:数据治理 CDGA/CDGP 认证考试备考经验分享

一、关于DAMA中国和CDGA/CDGP考试 国际数据管理协会&#xff08;DAMA国际&#xff09;是一个全球性的专业组织&#xff0c;由数据管理和相关的专业人士组成&#xff0c;非营利性机构&#xff0c;厂商中立。协会自1980年成立以来&#xff0c;一直致力于数据管理和数字化的研究、…

计算机毕业设计hadoop+spark微博舆情大数据分析 微博爬虫可视化 微博数据分析 微博采集分析平台 机器学习(大屏+LSTM情感分析+爬虫)

电商数据建模 一、分析背景与目的 1.1 背景介绍 电商平台数据分析是最为典型的一个数据分析赛道&#xff0c;且电商数据分析有着比较成熟的数据分析模型&#xff0c;比如&#xff1a;人货场模型。此文中我将通过分析国内最大的电商平台——淘宝的用户行为&#xff0c;来巩固数…

WebRTC | 网络传输协议 RTP 和 RTCP

WebRTC | 网络传输协议 RTP 和 RTCP WebRTC | 网络传输协议 RTP 和 RTCP如何选择 TCP 与 UDPRTP概述工作机制报文结构RTP 的使用RTP 拓展头RTP 中的填充数据翻译器和混合器同步控制报文大小wireshark 抓取 RTP 报文 RTCP概述工作机制分组类型报文结构WebRTC 的反馈报文RTPFBPSF…

接口响应断言

目录 接口断言介绍接口断言方式介绍响应状态码断言 课程目标 掌握什么是接口断言。了解接口断言的多种方式。掌握如何对响应状态码完成断言。 思考 这两段代码是完整的接口自动化测试代码吗&#xff1f; …省略… when().get(“https://httpbin.ceshiren.com/get?namead&…

白鹭群优化算法,原理详解,MATLAB代码免费获取

白鹭群优化算法&#xff08;Egret Swarm Optimization Algorithm&#xff0c;ESOA&#xff09;是一种受自然启发的群智能优化算法。该算法从白鹭和白鹭的捕食行为出发&#xff0c;由三个主要部分组成:坐等策略、主动策略和判别条件。将ESOA算法与粒子群算法(PSO)、遗传算法(GA)…

5.24学习记录

[FSCTF 2023]ez_php2 比较简单的pop链 <?php highlight_file(__file__); Class Rd{public $ending;public $cl;public $poc;public function __destruct(){echo "All matters have concluded";die($this->ending);}public function __call($name, $arg){for…

揭秘Python的魔法:装饰器的超能力大揭秘 ‍♂️✨

文章目录 Python进阶之装饰器详解1. 引言装饰器的概念与意义装饰器在Python编程中的作用 2. 背景介绍2.1 函数作为对象2.2 高阶函数 3. 装饰器基础3.1 理解装饰器3.2 装饰器的工作原理 4. 带参数的装饰器4.1 为什么需要带参数4.2 实现带参数的装饰器使用函数包裹装饰器使用类实…

【ZYNQ】AXI-Quad-SPI SDK 开发记录 测试

前人工作 如前人工作&#xff0c;在Navigate to BSP Settings中找到历例程 file:///F:/Xilinx/Vitis/2019.2/data/embeddedsw/XilinxProcessorIPLib/drivers/spi_v4_5/doc/html/api/example.html使用XSpi_LowLevelExample例子&#xff0c;源代码的AI解析 int XSpi_LowLeve…