毕业设计 您所在的位置:网站首页 遗传算法课程设计案例 毕业设计

毕业设计

2024-07-18 01:33| 来源: 网络整理| 查看: 265

目录

前言

课题背景和意义

实现技术思路

一、优化设计数学模型

二、Matlab遗传算法优化

 部分源代码

实现效果图样例

最后

前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯基于Matlab的遗传算法在结构优化设计中的应用

课题背景和意义 遗传算法(1972年提出)已经不能很好的解决大规模计算量问题,它很容易陷入“早熟”,常用混合遗传算法,合作型协同进化算法等来替代,这些算法都是GA的衍生算法。 遗传算法 (Genetic Algorithm) 是一种通过模 拟自然进化过程搜索最优解的方法,其主要特点 是直接对结构对象进行操作,不存在求导和函数 连续性的限定,具有更好的全局寻优能力,采用 概率化的寻优方法,能自动获取和指导优化的搜 索空间,自适应地调整搜索方向,不需要确定的 规则。 由于遗传算法在大量问题求解过程独特的优 点和广泛应用,基于Matlab的遗传算法工具箱也 相继出现,如国Sheffild 大学Peter Fleming教授等 开发的遗传算法工具箱和美国 Carolina 州立大学 ChistopherHouck等开发的工具箱GAOT。与传统的优化相比,在求取符合运行要求的全局最优解时,遗传算法作为一种搜索的方法,已经成为成熟的具有良好收敛性、极高鲁棒性和广泛适用性的优化方法,很好的解决了电力系统的多变量、非线性、不连续、多约束的优化控制问题。 实现技术思路 针对实际机械优化设计中大量的非线性规划问题,将以一个实例来研究遗传算法在结构优化设计中的具体应用。如图所示的某机械的悬臂结构,矩形悬臂梁 A 固定在支撑体 B 上。

一、优化设计数学模型

建立数学模型是最优化过程中十分重要的一 步,其直接影响优化设计效果,本课题的问题相 对比较简单,可以很容易地建立,而对于其他复 杂结构的优化设计数学模型,可用回归分析等方 法建立。

优化目标函数

目标函数是设计中预期所要达到的目标,表 达为各设计变量的函数表达式。根据结构设计要 求,在满足相关要求下使得悬臂梁的体积最小, 为单目标,故目标函数如下

约束函数 在最优化设计中,对设计变量取值时的限制 条件称为设计约束,多以用数学不等式来表示, 可以分为性能约束和边界约束。

(1) 性能约束函数,在机械最优化设计中它 是由结构的某种性能或设计要求推导出来的约束 条件,如变形位移、屈服强度和磨损程度等。 根据性能约束函数的定义和实际设计要 求,性能约束函数为结构的最大应力和最大挠 度变形,结合材料力学计算公式计算,得出悬 臂梁最大应力和最大挠度变形的性能约束函数 为:

 (2) 边界约束函数,用以限制某个设计变量 的变化范围,如零件的尺寸等,因此在本课题 中,边界约束函数如下:

 建立优化数学模型

令b=x1,h=x2,并代入相关已知数据,得出悬 臂梁的体积最优化数学模型如下:

 由数学模型可以看出,该优化问题为单目标 非线性最优化问题,其中:目标函数f(x)和约束方程 g1(x)、g2(x)均属于非线性规划。对于非线性的 最优化设计,采用遗传算法进行优化具有明显的优势。

二、Matlab遗传算法优化

遗传算法流程:

编写函数M文件

在Matlab 中使用遗传算法,首先必须编写一 个M文件,来确定优化目标函数。这个M文件应 接受一个行向量,并且返回一个标量,行向量的 长度就是目标函数中独立变量的个数。对于非线 性约束,要另编写一个非线性约束M文件。 新建一个目标函数 M 文件,输入下面代码, 保存到工作目录,文件名为beamOpt。

 另新建一个非线性约束函数的M文件,输入以下代码,保存到工作目录中,文件名为BeamO⁃ pt_constraint。

Matlab遗传算法优化

在 Matlab 中,调用遗传算法有两种方式: (1)以命令方式调用遗传算法函数GA;(2)通过 图形用户界面使用遗传算法工具,在本课题中将 使用第二种方式进行最优化设计。

Matlab 自带的遗传算法工具箱有一个用户界 面 GUI,它使用户可以使用遗传算法而不用工作 在命令行方式。用“gatool”命令打开遗传算法工 具箱GUI交互式界面如图所示。

 如图所示输入相关的参数,运行遗传算 法,运算结果如下图所示,x1 = 73.40 mm,x2 = 129.49 mm,目标函数值f(x) = 1.90×107 mm3 ,计算 迭代次数为6次。

 对于前面内容所运行的计算,遗传算法 “Options”参数设置,基本都是取其默认的设置, 从计算结果图可以看出,其迭代的次数只有 8次,较少的迭代次数得到的优化结果与最优解可 能会有较大的差距。因此,为了得到更优的结 果,通过增加迭代数来寻求最优解,可以在 “option”中设置算法的停止准则,如图:

分别将迭代次数设置为50和60并计算,结果分别如图所示。

迭代 50 次的优化结果:

迭代 60 次的优化结果:

可以看出大约从第30代开始后面每一代的平均适应 值变化很小,所形成的曲线接近水平线,因而可 以断定x1 = 50 mm,x2 =147 mm,目标函数值f(x) = 1.47×107 mm3 已经十分接近最优解,可作为问题的 最优解。

优化结果对比分析

如表的优化结果所示,软件默认的迭代次 数所寻求的“最优解”并非真正的最优解,而通 过自定义增加迭代次数的优化结果已非常接近最 优值,可作为最终确定优化设计值。

 部分源代码

选择:

for i=1:population_size fitness_sum(i) = 0.; end min_index = 1; temp = 1; temp_chromosome(chromosome_size)=0; % 遍历种群 % 冒泡排序 % 最后population(i)的适应度随i递增而递增,population(1)最小,population(population_size)最大 for i=1:population_size min_index = i; for j = i+1:population_size if fitness_value(j) < fitness_value(min_index); min_index = j; end end if min_index ~= i % 交换 fitness_value(i) 和 fitness_value(min_index) 的值 temp = fitness_value(i); fitness_value(i) = fitness_value(min_index); fitness_value(min_index) = temp; % 此时 fitness_value(i) 的适应度在[i,population_size]上最小 % 交换 population(i) 和 population(min_index) 的染色体串 for k = 1:chromosome_size temp_chromosome(k) = population(i,k); population(i,k) = population(min_index,k); population(min_index,k) = temp_chromosome(k); end end end % fitness_sum(i) = 前i个个体的适应度之和 for i=1:population_size if i==1 fitness_sum(i) = fitness_sum(i) + fitness_value(i); else fitness_sum(i) = fitness_sum(i-1) + fitness_value(i); end end % fitness_average(G) = 第G次迭代 个体的平均适应度 fitness_average(G) = fitness_sum(population_size)/population_size; % 更新最大适应度和对应的迭代次数,保存最佳个体(最佳个体的适应度最大) if fitness_value(population_size) > best_fitness best_fitness = fitness_value(population_size); best_generation = G; for j=1:chromosome_size best_individual(j) = population(population_size,j); end end

 交叉:

% 步长为2 遍历种群 for i=1:2:population_size % rand


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有