?? 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 + -