微分进化(Difference Evolution,DE)算法是一种优化算法,据称其比GA(遗传算法)等更为优秀。

借鉴网上实现的DE算法,用Matlab实现了对若干函数优化问题的解法,代码如下:

function [] = de_test

clear all;

close all;

clc;

%解:X = [0, 0, ...]

%nVar = 30

%dims: [-30, 30]

function fitness = sphere(vals)

prod = vals .* vals;

fitness = sum(prod, 2);

end

%f(x) = 1/4000 * sum^n_1(x_i)^2 - prod^n_1 * cos(x_i/sqrt(i)) + 1

%f* = 0, x* = [0, 0, ...];

%nVar = 30

%dims: [-600, 600]

function fitness = griewank(vals)

[h w] = size(vals);

p1 = vals.^2;

p1 = 1/4000 .* sum(p1, 2);

t = sqrt([1:w]);

p2 = vals ./ repmat(t, h, 1);

p2 = cos(p2);

p2 = prod(p2, 2);

fitness = p1 - p2 + 1;

end

%解: X = [1, 1, 1, ...]

function fitness = RosenBroek(vals)

[k n] = size(vals);

vals1 = vals(:, 1:n-1);

vals2 = vals(:, 2:n);

tmp = vals2 - vals1 .* vals1;

tmp = 100 * tmp .* tmp;

tmp1 = (vals1 - 1).^2;

fitness = sum(tmp, 2) + sum(tmp1, 2);

end

%许多局部最小值,最优解:X = [0, 0], 固定2个变量

function fitness = Rastrigin (X)

v = X.^2 - 10 .* cos(2 * pi .* X) + 10;

fitness = sum(v, 2);

%fitness = 20 + X(:, 1).^2 + X(:, 2).^2 - 10 .* (cos(2 * pi * X(:, 1)) + cos(2 * pi * X(:, 2)));

end

%参数

popSize = 100; % 群规模

F = 0.5;                    % 突变因子

C = 0.9;                    % 交叉率

iterTimes = 300; % 迭代次数

Run = 4;        % 测试轮次

id = [1:popSize];

%结果

bestFit = 1e5;  %设取最小值

bestGene = [];

for r = 1:Run  %轮次

Func = r;     % 测试适应度函数

switch Func

case 1

Func = @sphere;

Xmin = -100;

Xmax = 100;

nVar = 30;

case 2

Func = @griewank;

Xmin = -600;

Xmax = 600;

nVar = 2;

case 3

nVar = 2;

Func = @RosenBroek;

Xmin = -100;

Xmax = 100;

case 4

nVar = 2;

Func = @Rastrigin

Xmin = -5.12;

Xmax = 5.12;

end;

Func

tic;

%1.初始化种群

X = Xmin + rand(popSize, nVar) * Xmax;

%2.每轮迭代

for i = 1:iterTimes

X0 = X;

%             F = 2 * (1 - (i-1)/iterTimes);

%个体突变得到V

for j = 1:popSize

ids = id;

ids(j) = [];

rids = randperm(popSize - 1, 3);

rids = ids(rids);

V = X(rids(1), :) + F * (X(rids(2), :) - X(rids(3), :));

%对V(j, :)值域检查

ids = find(V < Xmin);

if length(ids) > 0

V(ids) = Xmin;

end;

ids = find(V > Xmax);

if length(ids) > 0

V(ids) = Xmax;

end;

%对每个X和V的配对,进行交叉操作,结果存在U中

jrand = floor(rand() * nVar + 1);  %必交叉项,保证至少一个交叉

for n = 1:nVar

R1 = rand();

if (R1 < C || n == jrand)

U = V;    %保留子代基因

else

U = X(j, :);    %保留父代基因

end

end

%在子代和父代间做选择运算

if Func(U) < Func(X(j, :))

Tr = U;

else

Tr=X(j, :);

end

% 更新种群基因

X(j,:) = Tr;

%计算新的适应度

fitness = Func(X(j,:));

%记录全局最优解

if fitness < bestFit

bestFit = fitness;

bestGene = X(j, :);

end;

end  %结束个体更新

end

bestGene

bestFit

toc

end

end运行结果如下:

Func =

@de_test/sphere

bestGene =

Columns 1 through 15

-7.5570  -11.9099    9.9957  -37.8403  -17.9445   -7.1438  -21.4304  -33.6260  -22.1812  -66.1438    0.9014  -39.6724   -0.3175  -56.4815   26.5422

Columns 16 through 30

6.5446  -31.9653   -9.3640  -37.1629  -23.7325    2.7271   -6.3413  -21.3204  -13.1450   28.7402  -28.8170  -22.6226   10.9031  -16.6128  -14.7637

bestFit =

2.0583e+04  (从此结果看,算法效果不佳)

时间已过 2.285354 秒。

Func =

@de_test/griewank

bestGene =

1.0e-08 *

0.1702    0.1424

bestFit =

0

时间已过 3.337347 秒。

Func =

@de_test/RosenBroek

bestGene =

1.0e-08 *

0.1702    0.1424

bestFit =

0

时间已过 1.747765 秒。

Func =

@de_test/Rastrigin

Func =

@de_test/Rastrigin

bestGene =

1.0e-08 *

0.1702    0.1424

bestFit =

0

时间已过 1.403871 秒。

微分进化算法解决函数优化问题的matlab代码,Matlab微分进化算法及优化函数测试...相关推荐

  1. matlab基于人工蜂群算法的函数优化分析【matlab优化算法十一】

    基于人工蜂群算法的函数优化分析 自然界中的群居昆虫,它们虽然个体结构简单,但是通过个体间的合作却能够表现出极其复杂的行为能力.受这些社会性昆虫群体行为的启发,研宄者通过模拟这些群体的行为提出了群集智能 ...

  2. matlab中fic算法,粒子群算法在函数优化问题中的应用最终版(全文完整版)

    <粒子群算法在函数优化问题中的应用.doc>由会员分享,可免费在线阅读全文,更多与<粒子群算法在函数优化问题中的应用(最终版)>相关文档资源请在帮帮文库(www.woc88.c ...

  3. java开发模拟退火算法解决函数最值!

    在众多搜索算法之中,模拟退火是一种搜索性的算法,但是它的缺点在于收敛性比较弱. 这里主要运用模拟退火算法解决函数y=xsin(10xpi)+2的最优值问题. 代码及算法原理如下: /********* ...

  4. 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

    机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三) 代码 数据 结果 代码 代码按照下列顺序依次: 1. function result(true_value,pr ...

  5. MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式

    MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式 关键词:综合能源 分布式协同优化 交替方向乘子法 最优潮流 参考文档:<基于串行和并行ADMM算法的电_气能量流分布式协同优化 ...

  6. MATLAB代码:基于蒙特卡洛算法的电动汽车充电负荷预测 关键词:蒙特卡洛 电动汽车 充电负荷预测

    MATLAB代码:基于蒙特卡洛算法的电动汽车充电负荷预测 关键词:蒙特卡洛 电动汽车 充电负荷预测 仿真平台:MATLAB 主要内容:代码主要做的是电动汽车的充电负荷模拟预测,具体为:从影响电动汽车充 ...

  7. 基于matlab的捕食算法,【优化求解】基于matlab细菌觅食算法的函数优化分析【含Matlab源码 217期】...

    一.简介 实际生活需求促进了最优化方法的发展.近半个多世纪以来,由于传统优化方法的不足,一些具有全局优化性能且通用性强的进化算法,因其高效的优化性能.无需问题精确描述信息等优点,受到各领域广泛的关注和 ...

  8. CMA-ES算法解决连续优化问题

    一.算法介绍 CMA-ES是Covariance Matrix Adaptation Evolutionary Strategies的缩写,中文名称是协方差矩阵自适应进化策略,主要用于解决连续优化问题 ...

  9. ABC人工蜂群算法求解函数优化实例C++(2020.11.5)

    ABC人工蜂群算法C++ 人工蜂群算法 1.原理 2.算法流程 3.函数优化实例 4.求解函数优化的ABC源代码C++ 人工蜂群算法 1.原理 最常见的基于蜜蜂采蜜行为的蜂群算法是Karaboga(2 ...

最新文章

  1. thinkpad重装系统不引导_重装系统时,如何判断Windows的启动方式是Legacy还是UEFI?...
  2. sap data service安装方法
  3. php udp发送和接收_php socket通信(tcp/udp)实例分析
  4. boost::hana::front用法的测试程序
  5. python游戏代码示例_练习项目20:使用python制作游戏(中)
  6. Javascript玩转Prototype(一)——先谈C#原型模式
  7. pytorch 训练过程学习率设置衰减
  8. 小程序监听android返回键,如何监听小程序返回按钮事件?
  9. VMware 发布的版本 Build 与个版本对应关系
  10. inDesign教程,如何制作个性化的感谢卡?
  11. Ubuntu下bin文件的安装
  12. 杭州电子科技大学计算机技术考研总结
  13. 写给励志做码农的大学生
  14. 推荐使用的热电阻Pt100测温电路
  15. 百度地图迁徙大数据_百度地图迁徙大数据:北上广深城内出行年后首次大幅增长...
  16. Linux(centos或者redhat)下下载RPM包到指定目录但不安装
  17. 《罗辑思维》第31期:你的女神你不懂
  18. 低温工作笔记本计算机,电脑低温自动关机
  19. Android仿淘宝京东商品规格参数颜色筛选
  20. BTC公钥生成地址的过程详解

热门文章

  1. 微博:建立在45度仰角基础上的媒体与社交平台
  2. 【暮色天】不是不破 时候未到(2.19)
  3. Socket断线重连
  4. mac创建桌面快捷方式
  5. CSS设置文字背景虚化,变透明的两种方法
  6. 网络安全系列连载(1)到底什么是数字证书
  7. (转)H5的pushState与replaceState的用法
  8. 鸿蒙mate watch,鸿蒙要上手表?Mate Watch或将与Mate 40同时推出
  9. 2023年京东618优惠活动攻略
  10. CodeForces - 1305 C. Kuroni and Impossible Calculat(鸽巢原理)