[MATLAB] 利用遗传算法函数求目标函数的最优解
最近接触到了遗传算法以及利用遗传算法求最优解,所以就把这些相关的内容整理记录一下。
一、遗传算法简介(摘自维基百科)
遗传算法(英语:genetic algorithm (GA))是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。
算法
- 选择初始生命种群
- 循环
- 评价种群中的个体适应度
- 以比例原则(分数高的挑中概率也较高)选择产生下一个种群。
- 改变该种群(交叉和变异)
- 直到停止循环的条件满足
适用问题
遗传算法擅长解决的问题是全局最优化问题。
跟传统的爬山算法相比,遗传算法能够跳出局部最优而找到全局最优点。而且遗传算法允许使用非常复杂的适应度函数(或者叫做目标函数),并对变量的变化范围可以加以限制。
二、MATLAB中的GA函数
- X = ga(FITNESSFCN, NVARS)
这是GA函数最简单的调用方法,其中FITNESSFCN是目标函数,其参数应为一向量,NVARS则是参数向量的维度。
X是目标函数值为最小时的参数向量。 - X = ga(FITNESSFCN, NVARS, A, b, Aeq, beq, lb, ub, NONLCON, options)
这些参数用于约束X:- AX <= B, AeqX = Beq (线性约束)
- LB <= X <= UB
- NONLCON:定义C(X) <= 0, Ceq(X) = 0(非线性约束)
- options:设置GA的相关参数
- [X,FVAL,EXITFLAG,OUTPUT] = ga(FITNESSFCN, ...)
- FVAL是在目标函数的参数为X时的值
- EXITFLAG是结束遗传算法计算的标志
-0 Maximum number of generations exceeded.
-1 Optimization terminated by the output or plot function.
-2 No feasible point found.
-4 Stall time limit exceeded.
-5 Time limit exceeded. - OUTPUT结构体包含了遗传代数、输出种群等信息
- options
options = gaoptimset();
options.Generations=5000; %迭代次数
options.PopulationSize=30; %种群数目还又其他很多选项可以设置。
三、一个实例
假设要求目标函数f = (339-0.01*x1-0.003*x2)*x1 + (399-0.004*x1-0.01*x2)*x2 - (400000+195*x1+225*x2);
的最大值。
首先编写目标函数myfit.m:
function f = myfit( x )
f = (339-0.01*x(1)-0.003*x(2))*x(1)...
+ (399-0.004*x(1)-0.01*x(2))*x(2)...
- (400000+195*x(1)+225*x(2));
f = -f; %因为GA是寻找最小值,所以为了求这个函数的最大值,取f的相反数
end
调用GA函数:
结果显示: Optimization terminated: maximum number of generations exceeded.
说明迭代达到最大次数仍未求得最优解。因此下面通过options增大迭代次数:
options = gaoptimset();
options.Generations = 2000; %最大迭代数设为2000 %再次调用GA函数
[X,FVAL,EXITFLAG,OUTPUT] =ga(@myfit, 2 ,[], [],[],[],[],[],[],options);
结果显示: Optimization terminated: average change in the fitness value less than options.TolFun.
此时
这个结果与对目标函数 x1、x2 分别求偏导得到的结果(x1=4735, x2=7043, y=553641)是一致的,表明结果正确。
四、其他求最优解的方法
MATLAB还有许多其他求最优解的常用函数,如 fmincon()、fminsearch()、fminimax()等。
[MATLAB] 利用遗传算法函数求目标函数的最优解的更多相关文章
- Python之利用reduce函数求序列的最值及排序
在一般将Python的reduce函数的例子中,通常都是拿列表求和来作为例子.那么,是否还有其他例子呢? 本次分享将讲述如何利用Python中的reduce函数对序列求最值以及排序. 我们用r ...
- matlab中fminbnd函数求最小或者组大值
clc; clear all; close all; fx = @(x) -(0.4./sqrt(1 + x.^2) - sqrt(1+x.^2) .* (1- 0.4./(1 + x.^2))+x) ...
- MATLAB利用solve函数解多元一次方程组
matlab求解多元方程组示例: syms k1 k2 k3; [k1 k2 k3] = solve(-3-k3==6, 2-k1-k2+2*k3==11, 2*k1+k2-k3+1==6)或者用[k ...
- MATLAB 利用filter函数实现滑动平均滤波
function [ y ] = moving_average( x, win_size ) y1=filter(ones(1,win_size/2+1)/win_size,1,x); y2=fi ...
- Matlab用mpeaks函数求峰值点坐标
clear;clc;close all % 初始化 m = [-6,-2,0,2,4,6]; sigma = [1,1,0.5,0.25,0.6,2]; h = [1,2,3,2,2.13,3.14] ...
- MATLAB 的unique函数——数组矩阵的唯一值
MATLAB 的unique函数——求数组矩阵的唯一值 相关MathWork文档见此:unique数组中的唯一值 1.C = unique(A) 返回与 A 中相同的数据,但是不包含重复项.C 已按照 ...
- 【转】利用matlab生成随机数函数
原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...
- 39 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class _039PrintFu ...
- 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
*题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class 第三十九题按条件计算 ...
随机推荐
- windows下使用vnc viewer远程连接Linux桌面(转)
在windows下使用vnc viewer远程连接Linux桌面,主要配置步骤: Linux: 1.rpm -qa vnc //查看是否安装vnc服务,如果没有安装,可以使用yum,或者rpm进行安装 ...
- tornado web框架
tornado web框架 tornado简介 1.tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web ...
- Mobile Service更新和 Notification Hub 对Android的支持
本周,我们要推出一些更新,使移动服务成为移动应用程序更强大.更灵活的后端,同时推出一个与移动服务或网站结合使用的免费 20MB SQL 数据库,并且将支持通过Notification Hub中的 GC ...
- 图片文件,图片文件流和BASE64加密字符串之间的转换,以及图片的BASE64加密字符串再jsp上如何显示
http://blog.csdn.net/sidongxue2/article/details/43036373
- NSInteger到底是什么数据类型
看iOS SDK 方法返回的类型都是NSInteger,但是官方给出的示例代码一般for循环的计数器就都是int了. - (NSInteger)tableView:(UITableView *)tab ...
- zip命令
常用示例: (1)zip -r myfile.zip ./* ----将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件, -r表示递归压缩子目录下所有文件. (2)unzip - ...
- OpenStreetMap(OSM) features
目录 1 Primary features 1.1 Aerialway 1.2 Aeroway 1.3 Amenity 1.3.1 Sustenance 1.3.2 Education 1.3.3 T ...
- AndroidUI 布局动画-布局内容改变动画
实现一个点击菜单动画添加按钮,点击按钮移除当前按钮的动画效果: <LinearLayout xmlns:android="http://schemas.android.com/apk/ ...
- 全国计算机等级考试二级教程-C语言程序设计_第12章_C语言中用户标识符的作用域和存储类
生命周期的概念,也就是生存期,仅仅适用于变量. 代码.常量.定义等等都是与程序共存亡的,他们的生命周期就是程序的生命周期. 静态分配:生命周期是整个程序执行周期,内存会一直存在,在main函数执行之前 ...
- javascript数组去重算法-----1
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...