数学建模学习(10):遗传算法

遗传算法简介

• 遗传算法(Genetic Algorithms)是基于生物进化理论的原理发展起来的一种广为

应用的、高效的随机搜索与优化的方法。其主要特点是群体搜索策略和群体中个体之

间的信息交换,搜索不依赖于梯度信息。它是20世纪70年代初期由美国密执根

(Michigan)大学的霍兰(Holland)教授发展起来的。迄今为止,遗传算法是进

化算法中最广为人知的算法。

• 遗传算法主要在复杂优化问题求解和工业工程领域应用,取得了一些令人信服的成果,

所以引起了很多人的关注。遗传算法成功的应用包括:作业调度与排序、可靠性设计、

车辆路径选择与调度、成组技术、设备布置与分配、交通问题,等等。
遗传算法的特点

• 遗传算法的处理对象不是参数本身,而是对参数集进行了编码的个体。此操作使得遗传算法可以直接对结构对象

进行操作。

• 许多传统搜索算法都是单点搜索算法,容易陷入局部的最优解。遗传算法同时处理群体中的多个个体,即对搜索

空间中的多个解进行评估,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。

• 遗传算法基本上不用搜索空间的知识或其他辅助信息,而仅用适应度函数值来评估个体,在此基础上进行遗传操

作。适应度函数不仅不受连续可微的限制,而且其定义域可以任意设定。这一特点使得遗传算法的应用范围大大

扩展了。

• 遗传算法不是采用确定性规则,而是采用概率的变迁规则来指导搜索的方向。

• 具有自组织、自适应和自学习性。遗传算法利用进化过程获得的信息自行组织搜索,适应度大的个体具有较高的

生存概率,并能获得更适应环境的基因结构

遗传算法中的基本概念

群体(population):又称种群、染色体群,是个体(individual)的集合,代表问题的解空间子集。

串(string)及串空间:串是个体的表达形式,对应着遗传学中的染色体,对应实际问题的一个解。

群体规模(population size):染色体群中个体的数目称为群体的大小或群体规模。

基因(gene):是指染色体的一个片段,可以是一个数值、一组数或一串字符。

交换(crossover):指在一定条件下两条染色体上的一个或几个基因相互交换位置。

交换概率:判断是否满足交换条件的一个小于1的阈值。

变异(mutation):指在一定条件下随机改变一条染色体上的一个或几个基因值。

变异概率:判断是否满足变异条件的一个小于1的阈值。

后代:染色体经过交换或变异后形成的新的个体。

适应度(fittness):用来度量种群中个体优劣(符合条件的程度)的指标值,它通常表现为数值形式。

选择(selection):根据染色体对应的适应值和问题的要求,筛选种群中的染色体,染色体的适应度越高,保存下来的概率越大,反之则越小,甚至被淘汰。
遗传算法终止规则

给定一个最大的遗传代数MAXGEN,算法迭代在达到MAXGEN时停止。

当进化中两代最优个体小于要求的偏差x时,算法终止。

所有个体或者指定比例以上个体趋同,此时停止计算。

达到最大计算时间限制。
相关函数的语法
工具箱实现:

matlab 复制代码
%plotobjective(@shufcn,[-2,2;-2,2]);
%目标函数
fun = @lincontest6;
%需要优化的函数变量的个数
number = 2;
%不等式约束
A = [1 1;-1 2;2 1];%线性不等式的约束条件
b = [2;2;3];%线性不等式的约束条件
%等式约束
Aeq = [];%系数
beq = [];%边界值
%边界约束
lb = zeros(2,1);%下边界
ub = [];%上边界
%非线性约束
%nonlcon
% % 定义约束函数
% function [c, ceq] = nonlcon(x)
%     c = [-(x(1) + x(2) - 1)]; % 不等式约束 x1 + x2 ≥ 1
%     ceq = []; % 没有等式约束,设为空
% end
[x,fval,exitflag,output] = ga(@lincontest6,2,A,b,Aeq,beq,lb,ub);
disp("最优的参数");
disp(x)
disp("最优值");
disp(fval)
disp("显示遗传代数");
disp(output.generations)
disp("显示调用目标函数的次数");
disp(output.funccount)

效果

Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

最有的参数

0.6670 1.3340

Optimization terminated: maximum number of generations exceeded.

最优的参数

0.6670 1.3340

最优值

-8.2258

显示遗传代数

200

显示调用目标函数的次数

9453

相关推荐
Duck Bro6 分钟前
数据结构:顺序表(动态顺序表)
c语言·数据结构·c++·学习·算法
·云扬·6 分钟前
Lambda 表达式详解
java·开发语言·笔记·学习·1024程序员节
再不会python就不礼貌了24 分钟前
Ollama 0.4 发布!支持 Llama 3.2 Vision,实现多模态 RAG
人工智能·学习·机器学习·ai·开源·产品经理·llama
dal118网工任子仪2 小时前
web安全漏洞之命令注入
笔记·学习·安全·web安全·网络安全
五味香2 小时前
Linux命令学习,git命令
linux·c语言·开发语言·c++·git·学习·算法
邂逅you2 小时前
深度优先搜索之全排列问题(C语言版)
c语言·数据结构·学习·算法·贪心算法·深度优先
小黑子不会打篮球3 小时前
记一次文件包含刷题(伪协议篇)
网络协议·学习·web安全
何作欢3 小时前
day04 vue学习
javascript·vue.js·学习
埋头编程~3 小时前
【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)
java·c++·学习
hengzhepa4 小时前
ElasticSearch备考 -- 集群配置常见问题
运维·学习·elasticsearch·搜索引擎·es