📄 getparetooptimals.m
字号:
function [out_paretoOptimals, out_myAlgCount] = getParetoOptimals(in_algFunVals, in_funInd, in_algInd, in_myAlgNum)
% 函数功能: 对不同算法输入的函数值,求出其中的最优解,并返回 特定算法 获得的解在最优解中的个数。!!只针对两目标函数
% 注意:返回的是 不重复 的最优解,对输入的解集,必须没有重复元素
% 输入:
% in_algFunVals: 带算法编号的 各个 算法得到的 目标值,维数根据 实际情况 而定
% in_funInd: 目标值的 起始 存储位置
% in_algInd: 算法编号的存储位置
% in_myAlgNum: 特定算法的编号,!!这里针对 自己的算法
% 输出:
% out_paretoOptimals: 输入函数值中的 最优解
% out_myAlgCount: 特定算法在 最优解 中的个数
f_solCount = size(in_algFunVals, 1);
% 初始所有的解都是最优解
isOptimal = ones(f_solCount, 1);
% 对每一个 目前还是最优解的解,与当前的最优解 比较,差的话去掉最优解称号,退出,找下一个;被比较的最优解差的话,也去掉称号,换下一最优解比较
for (iSol = 1: f_solCount)
comSol = 1;
while (isOptimal(iSol, 1) == 1) && (comSol <= f_solCount)
if (isOptimal(comSol, 1) == 1) % 是最优解才比较
if (in_algFunVals(comSol, in_funInd) <= in_algFunVals(iSol, in_funInd)) && (in_algFunVals(comSol, in_funInd + 1) <= in_algFunVals(iSol, in_funInd + 1)) && ...
((in_algFunVals(comSol, in_funInd) + in_algFunVals(comSol, in_funInd + 1)) < (in_algFunVals(iSol, in_funInd) + in_algFunVals(iSol, in_funInd + 1)))
isOptimal(iSol, 1) = 0;
elseif (in_algFunVals(iSol, in_funInd) <= in_algFunVals(comSol, in_funInd)) && (in_algFunVals(iSol, in_funInd + 1) <= in_algFunVals(comSol, in_funInd + 1)) && ...
((in_algFunVals(iSol, in_funInd) + in_algFunVals(iSol, in_funInd + 1)) < (in_algFunVals(comSol, in_funInd) + in_algFunVals(comSol, in_funInd + 1)))
isOptimal(comSol, 1) = 0;
end
end
comSol = comSol + 1;
end % 结束 while (isOptimal(iSol, 1) == 1) && (comSol <= f_solCount)
end
%%------------------------------------------%%
% 将最优解存入 out_paretoOptimals 中
out_paretoOptimals =[];
allPOCount = 0;
out_myAlgCount = 0;
for (iSol = 1: f_solCount)
if (isOptimal(iSol, 1) == 1)
out_paretoOptimals = [out_paretoOptimals; in_algFunVals(iSol, :)];
allPOCount = allPOCount + 1;
if (in_algFunVals(iSol, in_algInd) == in_myAlgNum)
out_myAlgCount = out_myAlgCount + 1;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -