在matlab中使用遗传算法执行最优化
遗传算法是一种通用的最优化方法,具体原理可以看:遗传算法详解与实验。下面记录在Matlab中如何使用遗传算法来做优化。
用法
调用方式如下:
1 x = ga(fun,nvars)
2 x = ga(fun,nvars,A,b)
3 x = ga(fun,nvars,A,b,Aeq,beq)
4 x = ga(fun,nvars,A,b,Aeq,beq,lb,ub)
5 x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon)
6 x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
7 x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon)
8 x = ga(fun,nvars,A,b,[],[],lb,ub,nonlcon,IntCon,options)
9 x = ga(problem)
10 [x,fval] = ga(___)
11 [x,fval,exitflag,output] = ga(___)
12 [x,fval,exitflag,output,population,scores] = ga(___)
参数解释
fun: 要执行最优化的函数,用于输入待优化变量$x$。只能包含一个参数,可以是单个标量,也可以是向量。输出一个标量。
nvars: 最优化函数传入向量的元素数量。
A, b: 线性不等式约束的系数。即待优化变量$x$要满足$A\cdot x \le b$。
Aeq, beq: 线性等式约束的系数。即待优化变量$x$要满足$Aeq\cdot x = beq$。
lb, ub: 传入向量的取值范围。即待优化变量$x$要满足$lb\le x\le ub$。
nonlcon: 定义非线性不等式约束和等式约束的函数。该函数只能包含一个参数用于接受待优化变量$x$,然后输出不等式约束值$C(x)$和等式约束值$Ceq(x)$。约束$x$满足$C(x)\le 0$和$Ceq(x)=0$。
IntCon: 限制待优化参数为整数,传入需要限制为整数的待优化参数的位置。如对于3维变量$x$,设置IntCon为$[1,3]$表示第一和第三维的元素被限制为整数。
options: 遗传算法的设置,设置初始化、迭代次数、种群大小等。具体请看链接。
[]: 对于不想使用的约束,可以用中括号[]省略。
传出参数
x: 最优化后的变量。
fval: $x$对应的函数值。
exitflag: 遗传算法结束标志,一个整数。分别解释如下:

output: 遗传算法的优化过程信息。
population: 遗传迭代最后的种群。数组每行表示一个函数变量。
scores: 最后种群的个体值。也就是数组中各个变量的函数值。
例子
首先定义待优化函数:
1 function outp = func(varargin)
2 narginchk(1,2);
3 if nargin == 1
4 x = varargin{1}(1);
5 y = varargin{1}(2);
6 elseif nargin == 2
7 x = varargin{1};
8 y = varargin{2};
9 end
10 outp = 2*exp((-(x+3).^2-(y-3).^2)/10) + 1.2*exp((-(x-3).^2-(y+3).^2)/10) + exp(-cos(3*x)-sin(3*y));
11 outp = -outp;
12 end
然后是该函数的可视化和优化:
1 %% 函数可视化
2 x = linspace(-5,0,500);
3 y = linspace(0,5,500);
4 [X, Y] = meshgrid(x, y);
5
6 Z = func(X, Y);
7 mesh (X,Y,Z);
8
9 %% 优化
10 [x, f] = ga(@func, 2);
通过可视化可以看到最小值大概在$(-3.14, 3.66)$附近:

优化结果也是如此:

在matlab中使用遗传算法执行最优化的更多相关文章
- Matlab中的一些小技巧
(转于它处,仅供参考) 1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断.MATLAB这时可能正疲于应付,响应会有些滞后. ...
- 【matlab】将matlab中数据输出保存为txt或dat格式
将matlab中数据输出保存为txt或dat格式 总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt ...
- 在matlab中配置vlfeat
[转自]http://cnyubin.com/?p=85 在VLFeat官网上是这么介绍VLFeat的:VLFeat开源库实现了很多著名的机器视觉算法,如HOG, SIFT, MSER, k-mean ...
- matlab中subplot函数的功能
转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...
- 将matlab中数据输出保存为txt或dat格式
:FID= FOPEN(filename,permission) 用指定的方式打开文件 FID=+N(N是正整数):表示文件打开成功,文件代号是N. FID=-1 : 表示文件打 ...
- Matlab中reshape函数的使用
reshape把指定的矩阵改变形状,但是元素个数不变, 例如,行向量: a = [1 2 3 4 5 6] 执行下面语句把它变成3行2列: b = reshape(a,3,2) 执行结果: b = 1 ...
- Matlab中的数据类型
Matlab中有15种基本数据类型,主要是整型.浮点.逻辑.字符.日期和时间.结构数组.单元格数组以及函数句柄等. 1.整型:(int8:uint8:int16:uint16:int3 ...
- 关于MATLAB中的tic toc的问题
关于MATLAB中的tic toc的问题 其一) MATLAB实际单位时间计时函数的具体应用,在编写程序时,经常需要获知代码的执行实际时间,这就需要在程序中用到计时函数,matlab中提供了以下三种方 ...
- MATLAB中的函数的归总
字符串操作函数 1. 函数eval可以用来执行用字符串表示的表达式 2. 函数deblank可以去掉字符串末尾的所有空格 3. 函数findstr可以用来在长 ...
- MATLAB中多行注释的三种方法
MATLAB中多行注释的三种方法 A. %{ 若干语句 %} B. 多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释 ...
随机推荐
- SimpleTranslationAIAgent:基于C#与LLM的翻译AI Agent
基于C#与LLM通过简单对话即可实现文件到文件的翻译任务 该软件是MIT协议完全开源免费的,但是调用LLM的API可能需要费用,但是没关系,赛博菩萨硅基流动与智谱AI等都有免费的模型可调了. 这个Tr ...
- Delta Lake 学习
解决了什么问题 delta lake 是有 ACID 支持,有time travel... 对数据可以验证,不再需要 λ 架构 对事务的ACID支持,解决了spark job 可能会中间excepti ...
- 合合信息推出国央企智能文档处理解决方案,AI赋能信创国产化
信息时代,数字化转型已成为推动经济高质量发展的关键力量.国央企是国民经济的重要支柱,其数字化转型进程关乎着自身与产业链上下游企业的共同发展.文档的智能化处理可有效提升信息流转的效率.促进知识的沉淀与传 ...
- TS-TCC: 通过时序和上下文对比学习时间序列表征《Time-Series Representation Learning via Temporal and Contextual Contrasting》(时间序列、时序表征、时间和上下文对比、对比学习、自监督学习、半监督学习)
现在是2023年11月14日的22:15,肝不动了,要不先回寝室吧,明天把这篇看了,然后把文档写了.OK,明天的To Do List. 现在是2023年11月15日的10:35,继续. 论文:Time ...
- ASP.NET Core – 网站发布要做的事儿 Publish, Minification, Compression, Cache, HSTS, URL Rewrite Https & www, Close IIS Feature
前言 要发布网站需要做一些优化, 比如 cache, compression, minification 等等. 以前有写过相关的文章: Asp.net core 学习笔记 ( IIS, static ...
- Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启
当应用程序在运行时需要加载图片文件时,如果图片文件位于 bin 目录下,下载新图片会导致应用程序重启,这是因为 Java 应用程序在加载资源时通常会遵循以下机制: 类加载器: Java 应用程序使用类 ...
- USB2.0 DP DM VBUS
在USB 2.0中,设备成功枚举的标志可以通过观察 D+ (dp).D- (dm) 和 VBUS 引脚的电压波形来判断.以下是这些信号在USB 2.0枚举过程中常见的状态: VBUS (5V供电): ...
- 数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年1月刊
墨天轮数据社区是一个专业的数据技术内容分享社区,汇集了来自各行业的专家大咖.一线技术人员,他们勤于记录.乐于分享,发布了众多国内外数据库技术相关的优质实操文章.文档.在这里,我们将为大家整理墨天轮网站 ...
- 反射获取Exception的所有类
var test = "test"; $"{test} 喜喜".Dump(); // 反射 var types = Assembly .GetAssembly( ...
- 云原生周刊:CNCF 2023 年度调查报告 | 2024.4.15
开源项目推荐 highlight 该项目是一个开源全栈监控平台.其功能包括错误监控.会话重放.日志记录.分布式跟踪等. Helm Compose Helm Compose 是一个 helm 插件,用于 ...