数学建模暑期集训26:遗传算法

article/2025/3/15 17:24:07

遗传算法是优化类问题的经典智能算法。本篇将介绍遗传算法的基本概念以及利用遗传算法来求解单目标规划模型。

达尔文进化论的基本思想

遗传算法的设计是受到达尔文进化论的启发。先看下面这张图的几个基本概念。
在这里插入图片描述
一些花构成一个种群
每朵花被称为个体
每个个体内有染色体,染色体上有基因
通过自然选择,种群内最适合环境的花朵将有更大的概率生存下来,适合环境的程度称作适应度,适应度低的个体将在进化中不断淘汰。

遗传算法的步骤

在这里插入图片描述

初始化种群

生成固定数量的个体构成种群,每个个体的基因随机赋值。
在这里插入图片描述

选择操作

选择操作:从旧个体中以一定概率选择优良个体组成新的种群,以繁殖得到下一代。

通过轮盘赌的方法来进行选择。
在这里插入图片描述
在这里插入图片描述
个体适应度占总体适应度的概率,就是该个体被选择的概率。
在这里插入图片描述

交叉操作

交叉操作:从种群中随机选择两个个体,通过两个染色体的交换组合,把父串的优秀特征遗传给子串,从而产生新的优秀个体。

采用实数交叉,第k个染色体ak和第l个染色体al在j位的交叉操作方法为,b为[0, 1]随机数:
在这里插入图片描述

变异操作

变异操作:从种群中随机选择一个个体,选择个体中的一点进行变异以产生更优秀的个体。

第i个个体的第j个基因aij进行变异操作的方法为,r为[0,1]随机数,gen为当前迭代次数,genmax为最大迭代次数:
在这里插入图片描述
注:交叉操作和编译操作的公式不唯一,主要是这种思想,这里仅为一种可行的函数表示方法。

matlab实现遗传算法

例题 MCM2020B

在这里插入图片描述

文件结构

在这里插入图片描述

目标函数fun.m

function y = fun(x)y = 1 / (62.17 * x(2) * sqrt(2 * x(2) * x(1) * sqrt(x(3))) * exp(x(4)));Sdown = (sqrt(3) / 4) * x(1) ^ 2 * 6;
Sup = x(3) * Sdown;
V = (1 / 3) * x(2) * (Sup + Sdown + sqrt(Sup * Sdown));if V <= 1 && V >= 0.01y = y;
elsey = y + 10000;
end

生成随机数 Code.m

function ret = Code(lenchrom, bound)
flag = 0;
while flag == 0pick = rand(1, length(lenchrom));ret = bound(:, 1)' + (bound(:, 2) - bound(:, 1))' .* pick;flag = test(lenchrom, bound, ret);
end

判断是否超出边界 test.m

function flag = test(lenchrom, bound, code)
flag = 1;
[n, ~] = size(code);
for i = 1 : nif code(i) < bound(i, 1) || code(i) > bound(i, 2)flag = 0;end
end

选择操作Select.m

function ret = Select(individuals, sizepop)individuals.fitness = 1 ./ (individuals.fitness);
sumfitness = sum(individuals.fitness);
sumf = individuals.fitness ./ sumfitness;
index=[];
for i = 1 : sizepoppick = rand;while pick==0pick = rand;endfor j = 1 : sizepoppick = pick - sumf(j);if pick < 0index = [index, j];break;endend
end
individuals.chrom = individuals.chrom(index, :);
individuals.fitness = 1 ./ individuals.fitness(index);
ret = individuals;

交叉操作Cross.m

function ret = Cross(pcross, lenchrom, chrom, sizepop, bound)
for i = 1 : sizepoppick = rand(1, 2);while prod(pick) == 0pick = rand(1, 2);endindex = ceil(pick .* sizepop);pick = rand;while pick == 0pick = rand;endif pick > pcrosscontinue;endflag = 0;while flag == 0pick = rand;while pick == 0pick = rand;endpos = ceil(pick .* sum(lenchrom));pick = rand;v1 = chrom(index(1), pos);v2 = chrom(index(2), pos);chrom(index(1), pos) = pick * v2 + (1 - pick) * v1;chrom(index(2), pos) = pick * v1 + (1 - pick) * v2;flag1 = test(lenchrom, bound, chrom(index(1), :));flag2 = test(lenchrom, bound, chrom(index(2), :));if flag1 * flag2 == 0flag = 0;elseflag = 1;endend
end
ret = chrom;

变异操作Mutation.m

function ret = Mutation(pmutation, lenchrom, chrom, sizepop, pop, bound)
for i = 1 : sizepoppick = rand;while pick == 0pick=rand;endindex = ceil(pick * sizepop);pick = rand;if pick > pmutationcontinue;endflag = 0;while flag == 0pick = rand;while pick == 0pick = rand;endpos = ceil(pick * sum(lenchrom));v = chrom(i, pos);v1 = v - bound(pos, 1);v2 = bound(pos, 2) - v;pick = rand;if pick > 0.5delta = v2 * (1 - pick ^ ((1 - pop(1) / pop(2)) ^ 2));chrom(i, pos) = v + delta;elsedelta=v1 * (1 - pick ^ ((1 - pop(1) / pop(2)) ^ 2));chrom(i, pos) = v - delta;endflag = test(lenchrom, bound, chrom(i, :));end
end
ret = chrom;

主函数Genetic.m

clc
clearmaxgen = 500;
sizepop = 500;
pcross = 0.6;
pmutation = 0.01;
lenchrom = [1, 1, 1, 1]; %这里修改变量个数
bound = [0.2, 0.8; 0.1, 0.6; 0.01, 1; 0.01, 0.25];  %这里修改变量约束范围individuals = struct('fitness', zeros(1, sizepop), 'chrom', []);
avgfitness = [];
bestfitness = [];
bestchrom = [];for i = 1 : sizepopindividuals.chrom(i,:) = Code(lenchrom, bound);x = individuals.chrom(i, :);individuals.fitness(i) = fun(x);
end[bestfitness, bestindex] = min(individuals.fitness);
bestchrom = individuals.chrom(bestindex, :);
avgfitness = sum(individuals.fitness) / sizepop;trace=[];
for i = 1 : maxgenindividuals = Select(individuals, sizepop);avgfitness = sum(individuals.fitness) / sizepop;individuals.chrom = Cross(pcross, lenchrom, individuals.chrom, sizepop, bound);individuals.chrom = Mutation(pmutation, lenchrom, individuals.chrom, sizepop, [i, maxgen], bound);for j = 1 : sizepopx = individuals.chrom(j, :);individuals.fitness(j) = fun(x);end[newbestfitness, newbestindex] = min(individuals.fitness);[worestfitness, worestindex] = max(individuals.fitness);if bestfitness > newbestfitnessbestfitness = newbestfitness;bestchrom = individuals.chrom(newbestindex, :);endindividuals.chrom(worestindex, :) = bestchrom;individuals.fitness(worestindex) = bestfitness;avgfitness=sum(individuals.fitness) / sizepop;trace = [trace; avgfitness, bestfitness];
endfigure
plot((1 : maxgen)', trace(:, 1), 'r-', (1: maxgen)', trace(:, 2), 'b--');
title(['函数值曲线  ' '终止代数=' num2str(maxgen)], 'fontsize', 12);
xlabel('进化代数', 'fontsize', 12);
ylabel('函数值', 'fontsize', 12);
legend('各代平均值', '各代最佳值', 'fontsize', 12);
ylim([-0.5, 5])
disp('函数值                   变量');
disp([1 / bestfitness, x]);

实际使用

实际运用时,只需修改目标函数、变量个数及约束条件。


http://chatgpt.dhexx.cn/article/YTcxxiwV.shtml

相关文章

2021年亚太杯三等奖选手C题思路

文章目录 亚太杯C题第一小问亚太杯C题第二小问亚太杯C题第三小问亚太杯C题第四小问亚太杯C题第五小问 昨天晚上刚出了亚太杯的成绩&#xff0c;获得了三等奖&#xff0c;毕竟是第一次参加数学建模比赛&#xff0c;不是成功参与奖就很高兴了&#xff0c;结束了之后&#xff0c;还…

python使用networks读取txt文件画一个有权有向图

class demo():def __init__(self):self.file_pathtest.txt#图文件 def draw_graph(self):G2 nx.DiGraph() # 创建&#xff1a;空的 有向图f open(self.file_path)lines [l.split() for l in f.readlines() if l.strip()]# print(lines)for i in lines:G2.add_edge(i[0],…

数学建模常用功能

目录 pandas读取数据 查看数据异常 提取指定列 将dataframe数据以numpy形式提取 数据划分 随机森林回归 GBDT回归 特征重要性可视化 输出&#xff1a; ​ 绘制3D散点图 导入自定义包且.py文件修改时jupyter notebook自动同步 dataframe删除某列中重复字段并删除对应行…

c语言文件操作

文件操作读写 1 文件处理原理及基本概念 C语言的文件处理功能&#xff0c;大体上分为两种&#xff1a;一种是设置缓冲区&#xff0c;另一种是不设置缓冲区。因为不设置缓冲区的方法直接对磁盘进行操作&#xff0c;速度较慢&#xff0c;并且由于不是C的标准函数&#xff0c;跨…

无人机视角展示(无人机图像定位 )--某数学建模A题MATLAB代码

近期没啥空&#xff0c;水个简单的。。。。 目前只写了第一问&#xff0c;有空再写。。。。。 问题描述 无人驾驶飞机简称“无人机”&#xff0c;是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机。搭载图像设备的无人机在高空航拍、区域巡视、军事侦查等方面有广泛…

2020 全国大学生数学建模竞赛C题思路+代码

题目链接&#xff1a;天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享 前言 又是一年数据挖掘题型&#xff0c;第一次接触这种题型还是在去年的mathorcup上&#xff0c;这种题的难度就在于指标的建立和数据的处理上。后面会出一份关于数据挖掘题型&#xff0c;我的相关经…

PU learning半监督学习

半监督学习 Positive-unlabeled learning 什么是半监督学习 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能&#xff0c;就是半监督学习&#xff08;semi-supervised learning&#xff09;。 要利用未标记样本&#xff0c;必然要做一些将未标记样本所揭示的数…

详解基于图卷积的半监督学习

Kipf和Welling最近发表的一篇论文提出&#xff0c;使用谱传播规则&#xff08;spectral propagation&#xff09;快速近似spectral Graph Convolution。 和之前讨论的求和规则和平均规则相比&#xff0c;谱传播规则的不同之处在于聚合函数。它使用提升到负幂的度矩阵D对聚合进行…

【半监督医学图像分割 2023】RCPS

文章目录 【半监督医学图像分割 2023 】RCPS摘要1. 介绍2. 相关工作2.1 医学图像分割2.1 半监督学习2.3 对比学习 3. 方法3.1 整体概述3.2 纠正伪监督3.3 双向Voxel对比学习。 4. 实验 【半监督医学图像分割 2023 】RCPS 论文题目&#xff1a;RCPS: Rectified Contrastive Pseu…

半监督之数据增强

目录 前言 传统常见的 Free Lunch for Few-shot Learning: Distribution Calibration Learning to Augment for Data-Scarce Domain BERT Knowledge Distillation MixText: Linguistically-Informed Interpolation of Hidden Space for Semi-Supervised Text Classificati…

半监督的语义分割

现阶段传统的语义分割已经逐渐走向瓶颈&#xff0c;你设计一个网络&#xff0c;修改一下U-Net增加一个模块&#xff0c;现在已经很难再出优秀的成果&#xff0c;大家对你的创新程度认可度也越来越低。所以现在大家在进行语义分割的时候往往需要自行创造出一些需求&#xff0c;比…

半监督学习介绍

转载地址 https://blog.csdn.net/ice110956/article/details/13775071 什么是半监督学习? 传统的机器学习技术分为两类&#xff0c;一类是无监督学习&#xff0c;一类是监督学习。 无监督学习只利用未标记的样本集&#xff0c;而监督学习则只利用标记的样本集进行学习。 但…

半监督目标检测相关方法总结

戳我&#xff0c;查看GAN的系列专辑~&#xff01; 等你着陆&#xff01;【GAN生成对抗网络】知识星球&#xff01; 作者丨kinredon知乎 编辑丨极市平台 来源丨https://zhuanlan.zhihu.com/p/404160115 近期阅读了一些半监督目标检测&#xff08;Semi-Supervised Object Detecti…

半监督深度学习

个人博客&#xff1a;wyxogo.top 半监督学习 在有标签数据无标签数据混合成的训练数据中使用的机器学习算法。一般假设&#xff0c;无标签数据比有标签数据多&#xff0c;甚至多得多。 要求&#xff1a; 无标签数据一般是有标签数据中的某一个类别的&#xff08;不要不属于的…

半监督学习深度学习算法

该文章主体摘自知乎糯米稻谷的文章&#xff0c;对一些细节添加了自己的理解 文章链接https 半监督学习 啥是半监督学习&#xff08;Semi-supervised Learning&#xff09;1.简单自训练&#xff08;simple self-training&#xff09;2.协同训练&#xff08;co-training&#xff…

深度半监督学习方法总结

深度神经网络已被证明在对大量标记数据进行监督学习的训练中是非常有效的。 但是大多数现实世界的数据并没有被标记&#xff0c;并且进行全部标记也是不太现实的&#xff08;需要大量的资源、时间和精力&#xff09;。 为了解决这个问题半监督学习 ( semi-supervised learning)…

深度半监督学习

半监督学习介绍 Zhu X, Goldberg A B. Introduction to semi-supervised learning[J]. Synthesis lectures on artificial intelligence and machine learning, 2009, 3(1): 1-130. 链接半监督 无监督学习&#xff1a;主要目的是从独立同分布采样中得到的n个独立样本中找到in…

半监督SVM

半监督SVM 什么是半监督学习半监督SVM要做什么TSVM 这里是阅读周志华的《机器学习》中关于半监督SVM&#xff08;S3VM&#xff09;的笔记。 什么是半监督学习 在数据的搜集中&#xff0c;获得标记数据的成本是高昂的&#xff0c;而获得未标记的数据则是低廉的&#xff0c;为此…

半监督学习代码实战

sklearn官方例子——用半监督学习做数字识别 什么是半监督学习 半监督学习很重要&#xff0c;为什么呢&#xff1f;因为人工标注数据成本太高&#xff0c;现在大家参加比赛的数据都是标注好的了&#xff0c;那么如果老板给你一份没有标注的数据&#xff0c;而且有几百万条&am…

半监督学习综述

Chapter 7 Semi-supervised Learning 翻译不易&#xff0c;未经允许请勿转载&#xff01; Author: Mohamed Farouk Abdel Hady and Friedhelm Schwenker Translator: Howard Wonanut 摘要 传统的监督学习方法需要使用有标签数据建立模型。然而&#xff0c;在现实世界中给训练…