⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getparetooptimals.m

📁 离散算法
💻 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 + -