蒲县网站建设销售管理系统排名
web/
2025/9/27 7:20:11/
文章来源:
蒲县网站建设,销售管理系统排名,荆门网站开发公司电话,wordpress域名设置一. 内容简介
韩老师多目标优化#xff1a;多目标粒子群算法 视频: 【2022.2.5韩老师十七课时#xff08;中#xff09;多目标优化#xff1a;多目标粒子群算法】 https://www.bilibili.com/video/BV1eS4y157Xg/?share_sourcecopy_webvd_source7b377d4a833a67013df5…一. 内容简介
韩老师多目标优化多目标粒子群算法 视频: 【2022.2.5韩老师十七课时中多目标优化多目标粒子群算法】 https://www.bilibili.com/video/BV1eS4y157Xg/?share_sourcecopy_webvd_source7b377d4a833a67013df5f95f32b390f8
二. 软件环境
2.1 matlab
三.主要流程
3.1 代码
clear
clcMultiObj.fun (x) [-10.*(exp(-0.2.*sqrt(x(:,1).^2x(:,2).^2)) exp(-0.2.*sqrt(x(:,2).^2x(:,3).^2))), ...sum(abs(x).^0.8 5.*sin(x.^3),2)];
MultiObj.nVar 3;
MultiObj.var_min -5 .* ones(1, MultiObj.nVar);
MultiObj.var_max 5 .* ones(1, MultiObj.nVar);params.Np 200;
params.Nr 150;
params.maxgen 100;
params.W 0.4;
params.C1 2;
params.C2 2;
params.ngrid 20;
params.maxvel 5;
params.u_mut 0.5;REP MOPSO(params, MultiObj);
function REP MOPSO(params, MultiObj)Np params.Np;Nr params.Nr;maxgen params.maxgen;W params.W;C1 params.C1;C2 params.C2;ngrid params.ngrid;maxvel params.maxvel;u_mut params.u_mut;fun MultiObj.fun;nVar MultiObj.nVar;var_min MultiObj.var_min(:);var_max MultiObj.var_max(:);POS repmat((var_max-var_min), Np, 1) .* rand(Np, nVar) repmat(var_min, Np, 1);VEL zeros(Np, nVar);POS_fit fun(POS);PBEST POS;PBEST_fit POS_fit;DOMINATED checkDomination(POS_fit);REP.pos POS(~DOMINATED, :);REP.pos_fit POS_fit(~DOMINATED, :);REP updateGrid(REP, ngrid);maxvel (var_max - var_min) .* maxvel ./ 100;gen 1;display([Generation #0 - Repository size: num2str(size(REP.pos,1))]);stopCondition false;while ~stopConditionh selectLeader(REP);VEL W .* VEL C1 * rand(Np, nVar) .* (PBEST - POS) ... C2 * rand(Np, nVar) .* (repmat(REP.pos(h, :), Np, 1) - POS);POS POS VEL;POS mutation(POS, gen, maxgen, Np, var_max, var_min, nVar, u_mut);[POS, VEL] checkBoundaries(POS, VEL, maxvel, var_max, var_min); POS_fit fun(POS);REP updateRepository(REP, POS, POS_fit, ngrid);if(size(REP.pos, 1) Nr)REP deleteFromRepository(REP, size(REP.pos, 1) - Nr, ngrid);endpos_best dominates(POS_fit, PBEST_fit);best_pos ~dominates(PBEST_fit, POS_fit);best_pos(rand(Np, 1) 0.5) 0;if(sum(pos_best) 1)PBEST_fit(pos_best, :) POS_fit(pos_best, :);PBEST(pos_best, :) POS(pos_best, :);endif(sum(best_pos) 1)PBEST_fit(best_pos, :) POS_fit(best_pos, :);PBEST(best_pos, :) POS(best_pos, :);enddisplay([Generation # num2str(gen) - Repository size: num2str(size(REP.pos,1))]);gen gen 1;if(gen maxgen)stopCondition true;endendh_rep plot(REP.pos_fit(:,1),REP.pos_fit(:,2),ok);
endfunction REP updateRepository(REP, POS, POS_fit, ngrid)DOMINATED checkDomination(POS_fit);REP.pos [REP.pos; POS(~DOMINATED, :)];REP.pos_fit [REP.pos_fit; POS_fit(~DOMINATED, :)];DOMINATED checkDomination(REP.pos_fit);REP.pos_fit REP.pos_fit(~DOMINATED, :);REP.pos REP.pos(~DOMINATED, :);REP updateGrid(REP, ngrid);
endfunction [POS, VEL] checkBoundaries(POS, VEL, maxvel, var_max, var_min)Np size(POS, 1);MAXLIM repmat(var_max(:), Np, 1);MINLIM repmat(var_min(:), Np, 1);MAXVEL repmat(maxvel(:), Np, 1);MINVEL repmat(-maxvel(:), Np, 1);VEL(VEL MAXVEL) MAXVEL(VEL MAXVEL);VEL(VEL MINVEL) MINVEL(VEL MINVEL);VEL(POS MAXLIM) (-1) .* VEL(POS MAXLIM);POS(POS MAXLIM) MAXLIM(POS MAXLIM);VEL(POS MINLIM) (-1) .* VEL(POS MINLIM);POS(POS MINLIM) MINLIM(POS MINLIM);
endfunction dom_vector checkDomination(fitness)Np size(fitness, 1);dom_vector zeros(Np, 1);all_perm nchoosek(1 : Np, 2);all_perm [all_perm; [all_perm(:, 2), all_perm(:, 1)]];d dominates(fitness(all_perm(:, 1), :), fitness(all_perm(:, 2), :));dominated_particles unique(all_perm(d 1, 2));dom_vector(dominated_particles) 1;
endfunction d dominates(x, y)d all(x y, 2) any(x y, 2);
endfunction REP updateGrid(REP, ngrid)ndim size(REP.pos_fit, 2);REP.hypercube_limits zeros(ngrid 1, ndim);for dim 1 : ndimREP.hypercube_limits(:, dim) linspace(min(REP.pos_fit(:, dim)), max(REP.pos_fit(:, dim)), ngrid 1);endnpar size(REP.pos_fit, 1);REP.grid_idx zeros(npar, 1);REP.grid_subidx zeros(npar, ndim);for n 1 : 1 : nparidnames [];for d 1 : 1 : ndimREP.grid_subidx(n, d) find(REP.pos_fit(n, d) REP.hypercube_limits(:, d), 1, first) - 1;if(REP.grid_subidx(n,d) 0)REP.grid_subidx(n,d) 1;endidnames [idnames , num2str(REP.grid_subidx(n, d))];endREP.grid_idx(n) eval([sub2ind(ngrid.*ones(1,ndim) idnames );]);endREP.quality zeros(ngrid, 2);ids unique(REP.grid_idx);for i 1 : length(ids)REP.quality(i, 1) ids(i);REP.quality(i, 2) 10 / sum(REP.grid_idx ids(i));end
endfunction selected selectLeader(REP)prob cumsum(REP.quality(:,2));sel_hyp REP.quality(find(rand(1, 1) * max(prob) prob, 1, first), 1);idx 1 : 1 : length(REP.grid_idx);selected idx(REP.grid_idx sel_hyp);selected selected(randi(length(selected)));
endfunction REP deleteFromRepository(REP, n_extra, ngrid)crowding zeros(size(REP.pos, 1), 1);for m 1 : 1 : size(REP.pos_fit, 2)[m_fit, idx] sort(REP.pos_fit(:, m), ascend);m_up [m_fit(2 : end); Inf];m_down [Inf; m_fit(1 : end - 1)];distance (m_up - m_down) ./ (max(m_fit) - min(m_fit));[~, idx] sort(idx, ascend);crowding crowding distance(idx);endcrowding(isnan(crowding)) Inf;[~, del_idx] sort(crowding, ascend);del_idx del_idx(1 : n_extra);REP.pos(del_idx, :) [];REP.pos_fit(del_idx, :) [];REP updateGrid(REP, ngrid);
endfunction POS mutation(POS, gen, maxgen, Np, var_max, var_min, nVar, u_mut)fract Np / 3 - floor(Np / 3);if fract 0.5sub_sizes [ceil(Np / 3), round(Np / 3), round(Np / 3)];elsesub_sizes [round(Np / 3), round(Np / 3), floor(Np / 3)];endcum_sizes cumsum(sub_sizes);nmut round(u_mut * sub_sizes(2));if(nmut 0)idx cum_sizes(1) randperm(sub_sizes(2), nmut);POS(idx, :) repmat((var_max - var_min), nmut, 1) .* rand(nmut, nVar) repmat(var_min, nmut, 1);endper_mut (1 - gen / maxgen) ^ (5 * nVar);nmut round(per_mut * sub_sizes(3));if nmut 0idx cum_sizes(2) randperm(sub_sizes(3), nmut);POS(idx, :) repmat((var_max - var_min), nmut, 1) .* rand(nmut, nVar) repmat(var_min, nmut, 1);end
end
上边就是全部代码了 下面说里面有些不太理解的问题
这个函数里面实现的的和视频里面讲的还不太一样这个还是有可能选到拥挤的点的视频里面也是这个
function selected selectLeader(REP)prob cumsum(REP.quality(:,2));% 这块随机取得有点按概率的意思sel_hyp REP.quality(find(rand(1, 1) * max(prob) prob, 1, first), 1);idx 1 : 1 : length(REP.grid_idx);selected idx(REP.grid_idx sel_hyp);selected selected(randi(length(selected)));
endREP.quality zeros(ngrid, 2); 这网格质量他实际是把网格分成了400个的两个方向各20网格但是这个还是写的20好像是有点不够的
function REP updateGrid(REP, ngrid)ndim size(REP.pos_fit, 2);REP.hypercube_limits zeros(ngrid 1, ndim);for dim 1 : ndimREP.hypercube_limits(:, dim) linspace(min(REP.pos_fit(:, dim)), max(REP.pos_fit(:, dim)), ngrid 1);endnpar size(REP.pos_fit, 1);REP.grid_idx zeros(npar, 1);REP.grid_subidx zeros(npar, ndim);for n 1 : 1 : nparidnames [];for d 1 : 1 : ndimREP.grid_subidx(n, d) find(REP.pos_fit(n, d) REP.hypercube_limits(:, d), 1, first) - 1;if(REP.grid_subidx(n,d) 0)REP.grid_subidx(n,d) 1;endidnames [idnames , num2str(REP.grid_subidx(n, d))];endREP.grid_idx(n) eval([sub2ind(ngrid.*ones(1,ndim) idnames );]);endREP.quality zeros(ngrid, 2);ids unique(REP.grid_idx);for i 1 : length(ids)REP.quality(i, 1) ids(i);REP.quality(i, 2) 10 / sum(REP.grid_idx ids(i));end
end
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81215.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!