前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蚁群算法求函数最大值二

蚁群算法求函数最大值二

作者头像
mwangblog
发布2018-12-10 14:38:14
1.2K0
发布2018-12-10 14:38:14
举报
文章被收录于专栏:mwangblogmwangblog

状态转移和约束边界函数

函数说明如下:

functionsants = edgeselection(ants, tau, P0, lamda, xl, xu, yl, yu)

% 状态转移 + 约束边界

% ants input 蚁群

% tau input 信息素

% P0 input 转移概率常数

% lamda input 局部搜索参数

% xl input x最小值

% xu input x最大值

% yl input y最小值

% yu input y最大值

% sants output 输出蚁群

下面计算函数的状态转移概率,进行局部搜索和全局搜索:

sants= ants;

% 计算状态转移概率

[taubest,~] = max(tau);

p= abs((taubest - tau) / taubest);

lsindex= find(p < P0);

gsindex= find(p >= P0);

% 局部搜索

r= rand(length(lsindex), 2);

sants(lsindex,:) = sants(lsindex, :) + (2 .* r - 1) .* lamda;

% 全局搜索

r= rand(length(gsindex), 2);

gedge= repmat([xu-xl, yu-yl], length(gsindex), 1);

sants(gsindex,:)= sants(gsindex,:) + gedge .* (r - 0.5);

之后约束边界:

% 约束边界

sants(sants(:,1) < xl, 1) = xl;

sants(sants(:,1) > xu, 1) = xu;

sants(sants(:,2) < yl, 2) = yl;

sants(sants(:,2) > yu, 2) = yu;

最后进行选择:

% 选择

objvalue= calObjFun(ants);

sobjvalue= calObjFun(sants);

tindex= find(sobjvalue < objvalue);

sants(tindex,:) = ants(tindex, :);

一些其他函数

初始化蚁群函数:

functionants = initant(num, xl, xu, yl, yu)

% 初始化蚁群

% num input 蚂蚁数量

% xl input x最小

% xu input x最大

% yl input y最小

% yu input y最大

% ants output 蚁群

ants= rand(num, 2);

ants(:,1)= xl + (xu - xl) .* ants(:,1);

ants(:,2)= yl + (yu - yl) .* ants(:,2);

计算目标函数值函数:

functionobjval = calObjFun(X)

% 计算目标函数值

% X input 点输入 [x, y] nx2

% objvalue output 输出nx1

objval= -(X(:,1) .^ 4 + 3 .* X(:,2) .^ 4 - 0.2 .* cos(3*pi .* X(:,1)) ...

- 0.4 .* cos(4*pi .* X(:,2)) + 0.6);

绘制函数图像函数:

functionplotobjfun(xl, xu, yl, yu, step)

% 绘制函数图像

% xl input x最小值

% xu input x最大值

% yl input y最小值

% yu input y最大值

% step input 采样距离

[x,y] = meshgrid(xl:step:xu, yl:step:yu);

f= '-(x.^4 + 3*y.^4 - 0.2*cos(3*pi*x) - 0.4*cos(4*pi*y) + 0.6)';

z= eval(f);

mesh(x,y, z);

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 状态转移和约束边界函数
  • 一些其他函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档