基于遗传优化算法的小车障碍物避障路线规划matlab仿真

news2024/11/17 23:59:58

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       一种通过模拟自然进化过程搜索最优解的方法,对于一个最优化问题,该算法通过一定数量的候选解种群迭代地执行选择、交叉、变异、评价等操作使得种群向更好的解进化。

         遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。遗传算法的实现过程实际上就像自然界的进化过程那样。

遗传算法的一般步骤:

1.随机产生种群

2.根据策略判断个体的适应度,是否符合优化准则,若符合,输出最佳个体及其最优解,结束。否则,进行下一步

3.依据适应度选择父母,适应度高的个体被选中的概率高,适应度低的个体被淘汰

4.用父母的染色体按照一定的方法进行交叉,生成子代

5.对子代染色体进行变异

由交叉和变异产生新一代种群,返回步骤2,直到最优解产生

基本遗传算法的具体过程如下:
这里写图片描述

2.仿真效果预览

matlab2022a仿真如下:

优化初始阶段,路径。

优化中期阶段,路径。

 

优化结束,路径。

 

3.MATLAB核心程序

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
 
%设定数据
Data=[];
Data.B=[20 18];           %X轴Y轴边界
Data.S_E=[0,0;20,20];     %起点,终点
Data.size=100;             %种群大小
Data.length=30;           %染色体长度
M=round(Data.size/2);     %外部存档集规模
MaxIte=20;                %最大迭代次数
 
pm=0.3;%变异概率
pc=0.6;%交叉概率
% Obs.S=[];%障碍物各个顶点
Data.Obs(1).S=[1,4;2,4;2,1;1,1];%每个顶点存储按照顺时针顺序排列
Data.Obs(2).S=[3,6;4,6;4,3;3,3];
Data.Obs(3).S=[6,4;7,4;7,1;6,1];
Data.Obs(4).S=[8,10;9,10;9,5;8,5];
Data.Obs(5).S=[10,14;14,14;14,12;10,12];
Data.Obs(6).S=[14,8;18,8;18,6;14,6];
[Pop R k]=intpop(Data,Data.size,Data.length); %生成初始种群
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
chromlength=Data.length;%染色体长度
Obs=Data.Obs;           %障碍物坐标  与 Data.Obs相同
S_E=Data.S_E;           %起点,终点  与Data.S_E 相同
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
Lindex=[];   %每个种群中每个线段的直线参数a b c   ax+by+c=0
Lindex.abc=[];
 
for i=1:Data.size
    [Cindex P_Lindex]=check_crossing(Pop.ch(i).x(:,1),Pop.ch(i).x(:,2),chromlength,Obs,S_E); %检查是否路径段是否与障碍物相交
    %Cindex表示出现交叉点的点位置下标
    while 1-isempty(Cindex)
           [Pop.ch(i).x]=newpop(Pop.ch(i).x,Data,R,chromlength,k,Cindex);   %生成新种群   %保证点不在障碍物内   
           [Cindex P_Lindex]=check_crossing(Pop.ch(i).x(:,1),Pop.ch(i).x(:,2),chromlength,Obs,S_E);%对新种群检查是否相交
%             Cindex
            if 1-isempty(Cindex)          
                [Pop.ch(i).x]=newpop(Pop.ch(i).x,Data,R,chromlength,k,Cindex);    
                [Cindex P_Lindex]=check_crossing(Pop.ch(i).x(:,1),Pop.ch(i).x(:,2),chromlength,Obs,S_E);
            end
 
    end
     Lindex(i).abc=P_Lindex;
end
 
 
[F]=Goals(Pop,S_E,Data.size,chromlength,Obs,Lindex); %计算目标函数值
Pop.f=F;
 
Qop.ch=[];%外部存档集
Qop.f=[];
Qop.fitness=[];
 
 
%开始循环
for t=1:MaxIte
     t
     [Pop Qop Pop_Qop]=cal_Fitness(Pop,Qop);%计算适应度   
     [Qop]=environmental_sele(Pop,Qop,Pop_Qop,M); %环境选择
 
     if t==MaxIte       
        [NDSet]=sel_NDSet(Qop);  %选择非支配个体  
         break;
     else
         [NewQ_ch]=binary_tournament_selection(Qop);  % 锦标赛选择 
         [NewQ_ch]=cross_mutation(NewQ_ch,Data,Obs,S_E,pc,pm,chromlength,k,R);% 染色体交叉 突变
         [NewQ_ch]=delete_point(NewQ_ch,Data,chromlength,Obs,S_E,k,R);  %平滑算子(有待改进)
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%重新赋值
         Q_size=length(NewQ_ch);
         Qop.ch=[];
         
         for q=1:Q_size
              Qop.ch(q).x=NewQ_ch(q).ch;                    %重新赋值染色体
         end
         
         Qop.f=Goals(Qop,S_E,Q_size,chromlength,Obs,Lindex); %重新计算目标函数值
         Qop.fitness=[];
     end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下为画图程序
S_size=6; %总共多少个点
S(1).xy=[1,4;2,4;2,1;1,1;1,4];
S(2).xy=[3,6;4,6;4,3;3,3;3,6];
S(3).xy=[6,4;7,4;7,1;6,1;6,4];
S(4).xy=[8,10;9,10;9,5;8,5;8,10];
S(5).xy=[10,14;14,14;14,12;10,12;10,14];
S(6).xy=[14,8;18,8;18,6;14,6;14,8];
 
ND_size=length(NDSet.ch);
% ND_size=Data.size;
for example=1:ND_size;   %第几个种群
    if mod(example,4)==1
    P=[Data.S_E(1,:);NDSet.ch(example).x];
    P=[P;Data.S_E(2,:)];
    figure(example);
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
    for i=1:S_size
        for j=1:4
            plot([S(i).xy(j,1) S(i).xy(j+1,1)],[S(i).xy(j,2) S(i).xy(j+1,2)],'-r');
         hold on; 
        end  
    end
    grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    plot(P(:,1),P(:,2),'.b');
    hold on
    plot(P(:,1),P(:,2),'-b');
    hold on
    end
end
A89

4.完整MATLAB

V

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

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

相关文章

MyBatisPlus简述

文章目录一、MyBatisPlus入门案例与简介1.入门案例2.springboot整合mybatis的方式3.springboot整合mybatisplus步骤1.创建环境,上面我们已经创建过了步骤2.创建数据库及表步骤2.pom.xml补全依赖步骤3.添加MP的相关配置信息步骤4.根据数据库表创建实体类步骤5.创建Da…

linux安装redis哨兵

安装环境 服务器一台: 服务器IP:172.169.3.251主从端口:6379、6380、6381哨兵端口,26379、26380、26381安装目录:/usr/local/redis配置文件目录:/usr/loca/redis/conf redis安装 1、下载redis wget ht…

设计模式--策略模式

文章目录前言一、未使用设计模式二、策略模式1.定义2.结构三、应用场景四、优缺点优缺参考资料前言 需求: 一天,产品经理走过来对你说。猫啊(自称),帮我设计一个计算器,需要的功能有求最大值,最…

【JavaEE-Servlet】Filter过滤器详解

Filter过滤器熟悉的关键字-Filter(回顾-联系-可以不看)Filter概述何时使用?Filter生命周期过滤器单个实现doFilter方法关于Filter的配置路径Filter的执行顺序在web.xml文件中进行配置的时候,Filter的执行顺序是什么?使…

HTML期末学生大作业-班级校园我的校园网页设计与实现html+css+javascript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]Python计算机毕业设计Django停车场管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

使用 JavaScript 检测用户是否在线

有时您可能希望增强您的应用程序以通知用户他们可能已经失去了互联网连接。 用户可能正在访问您的网站并收到缓存版本,因此通常看起来他们的互联网仍在工作。 然而,他们失去了引擎盖下的连接,并且不会加载任何新内容。 在这里向他们显示一些…

博客系统(页面设计)

努力经营当下,直至未来明朗! 文章目录前言一、【博客列表页】blog_list.html参考代码:二、【博客详情页】 blog_detail.html参考代码:三、【博客登录页】login.html参考代码:四、【博客编辑页】参考代码:【…

QFtp的使用

1. 环境 Win10 QT5.9.9 2. 相关说明 Qt5.0之后移除了QFtp类(基于FTP协议实现的一个类),并且使用 QNetworkAccessManager 实现了 Ftp 的上传/下载功能。尽管后者在性能上和稳定性上有所提升,但有些原本 QFtp 有的功能 QNetwork…

什么是微服务?

文章目录什么是微服务微服务技术栈单体架构分布式架构认识微服务微服务技术框架SpringCloud什么是微服务 当我们提到微服务,很多人第一反应就是SpringCloud,但是微服务技术并不能与SpringCloud完全划等号: 微服务是分布式架构的一种&#x…

AI视频监控在畜牧养殖中的技术应用解决方案

一、方案概况 随着养殖业迅猛发展的同时也给养殖业主带来了严峻挑战。对养殖业来说,养殖场大多建立在偏远地区,给集中管理带来不便;畜禽养殖成本大,丢失、偷盗等情况时有发生,容易造成巨大的经济损失。建立一套远程视…

013. N 皇后

1.题目链接: 51. N 皇后 2.解题思路: 2.1.题目要求: 给一个数字 n ,要求返回所有 n 个 皇后能在 n X n 的棋盘上 不相互攻击 的情况。 能攻击到的情况:以皇后自身为原点,横、竖、同斜线(45度…

Linux搭建单机多进程zookeeper集群

01 ZooKeeper是什么 ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基…

用数字隔离器取代传统的光耦合器

介绍 光耦合器是一种已有几十年历史的技术,广泛用于信号隔离,通常提供安全隔离、信号电平移位和地面回路缓解。它们通常用于广泛的终端应用中,包括数据通信电路、开关模式电源系统、测量和测试系统,以及孤立的数据采集系统。光耦…

【入门】初识深度学习

文档背景 机器学习和深度学习的概念十分火热。听上去也很难,不慌,有时候就需要行动在前脑子在后。不管,干就完啦。 前言 人工智能(ArtificialIntelligence,AI)是最宽泛的概念,是研发用于模拟、延…

数据库基本语法

SQL常用语句总结 mysql -u root -p mysql会提示你输入密码&#xff0c;输入安装配置MySQL服务时设置的密码即可。 输入如下命令生成样例数据库&#xff1a; CREATE DATABASE university; USE university; SOURCE <DLL.sql文件路径>; SOURCE <InsertStatements.sql文…

Jenkins实践指南--pipeline概述

1.pipeline概述 1.1 什么是pipeline 从某种抽象层次上讲&#xff0c;部署流水线&#xff08;Deployment pipeline&#xff09;是指从软件版本控制库到用户手中这一过程的自动化表现形式。——《持续交付-发布可靠软件的系统方法》 pipeline 英语愿意为管道&#xff0c;在Jen…

Python之路—200行Python代码搞了个打飞机游戏!!

早就知道pygame模块&#xff0c;就是没怎么深入研究过&#xff0c;恰逢这周未没约到妹子&#xff0c;只能自己在家玩自己啦&#xff0c;一时兴起&#xff0c;花了几个小时写了个打飞机程序。 很有意思&#xff0c;跟大家分享下。 先看一下项目结构 1 2 3 4 5 6 7 8 9 10 11 1…

盒子模型-css

个人学习笔记 文章目录1.什么是盒子模型&#xff1f;2.外边距3.css边框4.内边距1.什么是盒子模型&#xff1f; HTML文档中的每个元素都被描绘成矩形盒子&#xff0c;这些矩形盒子通过一个模型来描述其占用的空间&#xff0c;这个模型称为盒子模型。 盒子模型用四个边界描述&am…

打字的哪阿空扥

打字的那些事之快速移动光标 一## 、提出快速移动光标的原因 &#xff08;1&#xff09;键盘移动光标方向键不合理 情景再现&#xff1a; 当我们在打出一句话时&#xff0c;其中一个字打错&#xff0c;我们就需要去删除它&#xff0c;此时我们做的动作&#xff0c;无非有两种…