MATLAB 遗传算法
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
本文目录
- 遗传算法
- MATLAB 实现遗传算法
遗传算法
遗传算法是一种模拟自然界生物进化机制的优化算法,它通过模拟自然选择、交叉和变异等操作来寻找问题的最优解。
遗传算法通常包括以下步骤:
- 定义问题的目标函数和约束条件,以及变量的编码方式。
- 生成初始种群,即一组随机的可行解。
- 计算每个个体的适应度值,即目标函数的值。
- 选择操作,根据适应度值选择一部分个体进入下一代。
- 交叉操作,对选中的个体进行染色体的交换,产生新的个体。
- 变异操作,对某些个体的某些基因进行随机改变,增加种群的多样性。
- 重复3-6步,直到满足终止条件,如达到最大迭代次数或适应度值达到预设阈值。
- 输出最优解或最优解集。
MATLAB 实现遗传算法
MATLAB 中的遗传算法函数为 ga
,其基本语法为:
[x,fval] = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
其中,fun
为目标函数,nvars
为变量个数,A
为不等式约束系数矩阵,b
为不等式约束右端项,Aeq
为等式约束系数矩阵,beq
为等式约束右端项,lb
为变量下界,ub
为变量上界,nonlcon
为非线性约束函数,intcon
为整数变量的下标。
该函数可以求解线性规划、整数规划、非线性规划、混合整数规划等各种优化问题。
例1
求解以下非线性规划问题:
minf(x)=x12+x22+x32+8\begin{equation} \min \quad f(x)=x_{1}^2+x_{2}^2+x_{3}^2+8 \end{equation} minf(x)=x12+x22+x32+8
s.t. {x12−x2+x32≥0x1+x22+x33≤20−x1−x22+2=0x2+2x32=3x1,x2,x3≥0\begin{equation} \text { s.t. } \left\{ \begin{array}{c} x_{1}^2-x_{2}+x_{3}^2 \geq 0 \\ x_{1}+x_{2}^2+x_{3}^3 \leq 20 \\ -x_{1}-x_{2}^2+2 = 0 \\ x_{2}+2x_{3}^2 = 3 \\ x_{1}, x_{2}, x_{3} \geq 0 \end{array} \right. \end{equation} s.t. ⎩⎨⎧x12−x2+x32≥0x1+x22+x33≤20−x1−x22+2=0x2+2x32=3x1,x2,x3≥0
解
转换为标准形式:
minf(x)=x12+x22+x32+8\begin{equation} \min \quad f(x)=x_{1}^2+x_{2}^2+x_{3}^2+8 \end{equation} minf(x)=x12+x22+x32+8
s.t. {−x12+x2−x32≤0x1+x22+x33−20≤0x1+x22−2=0x2+2x32−3=0x1,x2,x3≥0\begin{equation} \text { s.t. } \left\{ \begin{array}{c} -x_{1}^2+x_{2}-x_{3}^2 \leq 0 \\ x_{1}+x_{2}^2+x_{3}^3-20 \leq 0 \\ x_{1}+x_{2}^2-2 = 0 \\ x_{2}+2x_{3}^2-3 = 0 \\ x_{1}, x_{2}, x_{3} \geq 0 \end{array} \right. \end{equation} s.t. ⎩⎨⎧−x12+x2−x32≤0x1+x22+x33−20≤0x1+x22−2=0x2+2x32−3=0x1,x2,x3≥0
定义目标函数:
function f = objfun(x)f = x(1)^2 + x(2)^2 + x(3)^2 + 8;
end
定义非线性约束函数:
function [c,ceq] = nonlcon(x)c = [-x(1)^2 + x(2) - x(3)^2; x(1) + x(2)^2 + x(3)^3 - 20];ceq = [x(1) + x(2)^2 - 2; x(2) + 2*x(3)^2 - 3];
end
代码求解:
[x,fval] = ga(@objfun,3,[],[],[],[],[0,0,0],[],@nonlcon)
输出结果:
x =0.5516 1.2035 0.9477fval =10.6508
例2
求解以下整数规划问题:
maxZ=4x1+3y1+5y2\begin{equation} \max \quad Z=4x_{1}+3y_{1}+5y_{2} \end{equation} maxZ=4x1+3y1+5y2
s.t. {y1,y2are integers2x1+y1+3y2≤36x1+y1≥8x1+y2≥10x1+y1−y2=4x1,y1,y2≥0\begin{equation} \text { s.t. } \left\{ \begin{array}{c} y_{1},y_{2} \text{ are integers} \\ 2 x_{1}+y_{1}+3y_{2} \leq 36 \\ x_{1}+y_{1} \geq 8 \\ x_{1}+y_{2} \geq 10 \\ x_{1}+y_{1}-y_{2} = 4 \\ x_{1}, y_{1}, y_{2} \geq 0 \end{array} \right. \end{equation} s.t. ⎩⎨⎧y1,y2 are integers2x1+y1+3y2≤36x1+y1≥8x1+y2≥10x1+y1−y2=4x1,y1,y2≥0
解
转换为标准形式:
min−Z=−4x1−3y1−5y2\begin{equation} \min \quad -Z=-4x_{1}-3y_{1}-5y_{2} \end{equation} min−Z=−4x1−3y1−5y2
s.t. {y1,y2are integers2x1+y1+3y2≤36−x1−y1≤−8−x1−y2≤−10x1+y1−y2=4x1,y1,y2≥0\begin{equation} \text { s.t. } \left\{ \begin{array}{c} y_{1},y_{2} \text{ are integers} \\ 2x_{1}+y_{1}+3y_{2} \leq 36 \\ -x_{1}-y_{1} \leq -8 \\ -x_{1}-y_{2} \leq -10 \\ x_{1}+y_{1}-y_{2} = 4 \\ x_{1}, y_{1}, y_{2} \geq 0 \end{array} \right. \end{equation} s.t. ⎩⎨⎧y1,y2 are integers2x1+y1+3y2≤36−x1−y1≤−8−x1−y2≤−10x1+y1−y2=4x1,y1,y2≥0
代码求解:
fun = @(x) -4*x(1) - 3*x(2) - 5*x(3);
A = [2, 1, 3; -1, -1, 0; -1, 0, -1];
b = [36; -8; -10];
Aeq = [1, 1, -1];
beq = 4;
lb = [0, 0, 0];
ub = [];
intcon = [2, 3];
[x,fval] = ga(fun,3,A,b,Aeq,beq,lb,ub,[],intcon);
fval = -fval;
输出结果:
x =4.0000 7.0000 7.0000fval =72.0000
相关文章:
MATLAB 遗传算法
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
探讨 Java 中 valueOf 和 parseInt 的区别
前言 在编程中,遇到类型转换,好像会经常用到 parseInt 和 valueOf,当然这里只拿 Integer 类型进行陈述,其他类型也是雷同的; 想必有读者也跟我一样,经常交叉使用这两个方法,但却不知道这两者到…...
JSON学习笔记
♥课程链接:【狂神说Java】一小时掌握JSON_哔哩哔哩_bilibili配套的当然还要学习ajax不管是前端后端,感觉这部分内容是必须的,不然真的做项目的时候云里雾里。总体json的内容不多,具体就:1. 列表、对象等语法格式2. js…...
家政服务小程序实战教程07-轮播图组件
小程序中首页一般显示轮播图的功能,点击轮播图会跳转到具体的一篇文章或者是产品,本篇我们就介绍一下轮播图功能的开发 01 设计数据源 我们轮播图组件需要两个字段,一个是展示的图片,一个是跳转页面传入的参数。打开数据源&…...
MySQL之索引创建、删除、唯一索引、普通索引、及命名规则、注意事项
一、MySQL 索引 定义 索引是一个数据结构,用于加速数据库表中数据的查询。索引存储了一些数据表中的列值,以及这些列值在数据表中的位置,这样就可以通过索引来快速查找到数据表中的某一行数据。 MySQL 支持多种索引类型,包括普通…...
【C++设计模式】学习笔记(3):策略模式 Strategy
目录 简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金…...
Java——聊聊JUC中的ThreadLocal
文章目录: 1.什么是ThreadLocal? 1.1 api介绍 1.2 最简单的案例认识ThreadLocal 1.3 线程池结合ThreadLocal案例 2.Thread &ThreadLocal & ThreadLocalMap 3.ThreadLocal内存泄漏问题 3.1 四大引用之强引用 3.2 四大引用之软引用 3.3 四…...
软件工程(4)--螺旋模型
前言 这是基于我所学习的软件工程课程总结的第四篇文章。 在软件开发过程中必须及时识别和分析风险,并且采取适当措施以消除或减少风险的危害。构建原型是一种能使某些类型的风险降至最低的方法。为了降低交付给用户的产品不能满足用户需要的风险,一种行…...
图解LeetCode——剑指 Offer 50. 第一个只出现一次的字符
一、题目 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 二、示例 2.1> 示例 1: 【输入】s "abaccdeff" 【输出】b 2.2> 示例 2: 【输入】s "" 【输出】 限制: 0 < s 的…...
《HTML 5与CSS 3核心技法》读书笔记
目录前言第1章 写在前面第2章 HTML 语法基础第3章 布局类元素 ,房子的楼板、柱子和大梁第4章 功能类元素,房子的门、窗、水管和电气第5章 CSS基础第6章 选择器,确定样式的作用范围选择器类型选择器的组合使用第7章 权重,样式发送冲…...
【沐风老师】3DMAX几何投影插件Geometry Projection使用详解
【几何投影插件】 描述 3DMAX几何投影插件Geometry Projection,将一个或多个对象或它的顶点选择沿全局或局部 x、y 或 z 轴投影到另一个对象上。 适用版本 3dMax2013或更高版本 安装设置 插件的安装非常简单,解压后把插件脚本 “geometry_projectio…...
面试问题整理
20200422面试题 1、有nginx为什么还要用gateway 2、factorybean和beanfactory有什么区别 https://www.cnblogs.com/leeego-123/p/12159574.html 2、aop原理 3、ioc原理 4、注解requestbody和responsebody区别。pathvireable和requestparam注解区别,feign客户端的注解…...
“区块链60人”2022赋能中国区块链创新人物名单公布
2022年11月5日,“2022第五届全国高校人工智能大数据区块链教育教学创新论坛”在京隆重召开。此次论坛公布了“区块链60人”2022赋能中国区块链创新人物评选活动获评名单。 本次评选活动通过媒体报道、第三方推荐、专家评选等环节,坚持“公开、公平、公正…...
day2324 数组
文章目录相关概念codeArrayTest08 数组拷贝相关概念 day23课堂笔记 1、数组 1.1、数组的优点和缺点,并且要理解为什么。 第一:空间存储上,内存地址是连续的。 第二:每个元素占用的空间大小相同。 第三:知道首元素的内…...
【Python实战】神仙运气—快看看你的彩票:2千多万元大奖无人领,马上就过期了,下一期的中奖者会是你吗?(纯技术交流)
前言 越努力越幸运 哈喽~我是栗子同学! 特别注意:不管是沉迷赌球,还是沉迷购彩,都是不可取的。本文纯是一个技术学习内容。 听说关注我的人会暴富哦!、 所有文章完整的素材源码都在👇👇 粉丝…...
2023年上半年软考高项信息系统项目管理师2月25日开班
信息系统项目管理师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资…...
数据库(第一天)
文档信息 文档类别正式文档文档编号数据库基础课 1.2-001版本1.2-001文档名称数据库基础课编写负责人/编写时间梁昭东/2023 年 1 月 30 日审核负责人/审核时间年 月 日批准人/批准时间年 月 日 变更记录 日期版本号变更内容修订者2023.01.30v1.2版根据实际情况增删了部分内容…...
一文了解 ArrayList 的扩容机制
了解 ArrayList 在 Java 中常用集合类之间的关系如下图所示: 从图中可以看出 ArrayList 是实现了 List 接口,并是一个可扩容数组(动态数组),它的内部是基于数组实现的。它的源码定义如下: public class A…...
牛态已成选股源码
{牛态已成} {条件选股} {其他类型} N:7; A1:(REF(H,N) HHV(H,((2 * N) 1))); B1:FILTER(A1,N); C1:BACKSET(B1,(N 1)); D1:FILTER(C1,N); A2:(REF(L,N) LLV(L,((2 * N) 1))); B2:FILTER(A2,N); C2:BACKSET(B2,(N 1)); D2:FILTER(C2,N); E1:((REF(LLV(L,(2 * N)),1) REF(…...
Python基础
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。小编也整理了一套关于学习Python入门…...
浅显易懂的说清楚小游戏与H5游戏的技术区别
从“跳一跳”到“羊了个羊”微信小游戏上线4年时间,除了涌现出不少火爆全网的小游戏之外,也有类似于“动物餐厅”、“口袋奇兵”等游戏得以在此孵化繁荣,凭借着微信强大的社交属性小游戏成为游戏厂商在桌面端、App 端、H5 端之外争夺的另一个…...
【Python入门第七天】Python 数字
Python 数字 Python 中有三种数字类型: intfloatcomplex 为变量赋值时,将创建数值类型的变量: 实例 x 10 # int y 6.3 # float z 2j # complex如需验证 Python 中任何对象的类型,请使用 type() 函数: 实…...
Python自动化测试 软件测试最全教程(附笔记),看完可就业
最近看到很多粉丝在后台私信我,叫我做一期Python自动化测试的教程,其实关于这个问题,我也早就在着手准备了,我录制了一整套完整的Python自动化测试的教程,都上传在B站上面,大家有兴趣的可以去看一下&#x…...
Windows 安装Tomcat
版本:tomcat8.5jdk-8u231一.解压JDK安装包 更换JDK安装路径二.解压安装Tomcat 选择jdk安装路径更换tomcat安装路径三.设置环境变量 1.“环境变量”界面中系统变量点击”新建“,创建CATALINA_HOMEC:\RESSET\tomcat(Tomcat服务器的根目录)2.创建…...
知识图谱业务落地技术推荐之图数据库汇总
0.图数据库排名 链接:https://db-engines.com/en/ranking/graph+dbms 0.1简要分析(各种图数据库属性) Neo4j(主流) 历史悠久且...
2023新华为OD机试题 - 最小传递延迟(JavaScript) | 刷完必过
最小传递延迟 题目 通讯网络中有N个网络节点 用1 ~ N进行标识 网络通过一个有向无环图进行表示 其中图的边的值,表示节点之间的消息传递延迟 现给定相连节点之间的延时列表times[i]={u,v,w} 其中u表示源节点,v表示目的节点,w表示u和v之间的消息传递延时 请计算给定源节点到…...
SpringMVC基础入门(一)之理论基础概念
文章目录SpringMVC1.概念2.常用注解请求与响应1.请求参数2.JSON传输3.常用注解响应1.响应页面2.响应JSON数据Rest风格1.介绍2.常用注解SpringMVC 1.概念 (1)定义 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。 (2)为什…...
前端知识点
一. slice和splice区别: 1.splice改变原数组,slice不改变原数组。 2.splice除了可以删除之外,还可以插入。 3.splice可传入3个参数,slice接受2个参数。slice(start,end):方法可从已有数组中返回选定的元素,…...
【docker知识】从容器中如何访问到宿主机
一、说明 使用 Docker 能实现服务的容器化,并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。 二、方法1:简单的选择 适用于 Windows 和 Ma…...
MySQL入门篇-MySQL常用流程控制函数小结
备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊常见的流程控制函数 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本 流程控制函数 函数名函数用途CASEcase语句用于条件判断if()if/else条件判断ifnull()null数据处理nullif()retur…...
威海网站开发制作/上海网站建设方案
快速排序是一种分治的排序算法,其主要思想是通过选择一个基准数,将数组划分成两个子序列,左边的数都比基准数小,右边的数都比基准数大,然后对这两个子序列分别进行快速排序,以此达到最终排序的目的。 在Jav…...
企业网站的形式有哪些/互联网广告代理
前言:为啥要用无人值守安装系统?很简单的答案!就两个!一个是方便日常工作,另一个就是可以用来装逼!常规装系统的办法有哪些?光盘安装系统>一个服务器DVD内置光驱百千块,百台服务器…...
沧州有做网站的吗/有什么平台可以推广
问题:生成时提示 gl.h中出现一堆错误,如 error C2144: 语法错误 : “void”的前面应有“;” error C2182: “APIENTRY” : 非法使用“void”类型 error C2086: “int APIENTRY” : 重定义 error C2146: 语法错误 : 缺少“;”(在标识符“glClearStencil”…...
苏州专业网站建设开发公司/seo工具包
写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2.将字符串用格式转换类转换成日期( Date date format.parse(str) )3.将日期设置成…...
用python 做网站/网络营销有哪些主要功能
https://www.jianshu.com/p/4140be00d4e3 题目描述建模方法特征工程我的几次提升方法从其他队伍那里学习到的提升方法总结和感想神经网络方法的一点思考大数据量与分布式计算的一点思考参加比赛和学习知识的对比最后的感受趣事写在前面 我是一个之前PhD做分布式计算、虚拟机调度…...
wordpress实现伪静态/上海短视频推广
前几天有网友问在输入坐标或长度的时候是否能输入公式,比如20/3或7*8这样简单的算式。cad虽然在定位点或长度时不能直接输入算式,但利用计算器功能不仅可以输入数字的算式,还可以输入点之前的算式,点可以是直接拾取的点࿰…...