1 Star 9 Fork 1

Ki_Seki/MOPSO-for-Distribution

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
reorganize.m 1.07 KB
一键复制 编辑 原始数据 按行查看 历史
Ki-Seki 提交于 2022-04-23 22:40 . first commit
% 将粒子中多余的和缺失的元素熨平,使其成为一个全排列
function x = reorganize(x)
% x 是一个非法的粒子,其最大最小值确实为全排列里的最值,但中间的元素存在冗余和缺失
% 返回值 x 是一个经过变换后合法的粒子
%% 判定是否是全排列,如果是,直接返回即可
% 判定定理:n 维全排列的求和与求积值是一定的,且不可能有 n 维非全排列和、积与其相同
n = numel(x);
if prod(x)==prod(1:n) && sum(x)==sum(1:n)
return;
end
%% 找多余的和缺失的元素
dup = []; % 重复出现的元素所在位置
miss = []; % 缺少出现的元素的值
for i = 1 : size(x, 2)
occur = find(x == i);
if size(occur, 2) == 0 % 若缺失
miss = [miss i];
elseif size(occur, 2) > 1 % 若冗余
dup = [dup occur(2:end)];
end
end
%% 将缺失的元素回填至冗余元素出现的位置
for i = 1 : size(dup, 2)
x(dup(i)) = miss(i);
end
end
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ki_seki/mopso-for-distribution.git
git@gitee.com:ki_seki/mopso-for-distribution.git
ki_seki
mopso-for-distribution
MOPSO-for-Distribution
master

搜索帮助