?? getstbests.m
字號:
% 函數功能: 返回輸入種群中的全局最優解及其個數,粒子編號改為 -1
% |--注意:輸入的種群必須按照 適應度值 升序排列
function [out_bests, out_bCount]=getStBests(in_stPop, in_comInd, in_jobCount, in_dCInd, in_nDInd, in_fitInd, in_pBInd)
% 輸入參數:
% |--in_stPop: 要得到全局最優解的種群,包括解的全部信息 ((popSize + gBCount) × parInfSize)維
% |--in_comInd: 比較的位置
% |--in_jobCount: 作業個數,應等于主函數中的 jobCount
% |--in_dCInd: 被優越數在記錄粒子信息的一維數組中的位置,應等于主函數中的 dCInd
% |--in_nDInd: 鄰近密度在記錄粒子信息的一維數組中的位置,應等于主函數中的 nDInd
% |--in_fitInd: 適應度值在記錄粒子信息的一維數組中的位置,應等于主函數中的 fitInd
% |--in_pBInd: 粒子編號在記錄粒子信息的一維數組中的位置,應等于主函數中的 pBInd
% 返回參數:
% |--out_bests: 全局最優解,(out_bCount × parInfSize)維
% |--out_bCount: 全局最優解的個數,視具體情況而定
[f_pSize, f_parInfSize]= size(in_stPop);
% in_pBInd = in_fitInd + 1; % 粒子號數在這里沒用,在替換差解時用來判斷是否是gBest,是就不替換該位置
out_bests(1, 1: in_fitInd) = in_stPop(1, 1: in_fitInd);% 默認排序后 適應度值 最低的為全局最優解
out_bests(1, in_pBInd) = -1;
out_bCount = 1;
%%------------------------------------------%%
% 選出所有的非劣解,判斷條件為 適應度值 為 第一個粒子的適應度
stPi=2; % 起始位置
% gBf=in_stPop(1,in_fitInd);
f_bestCom = in_stPop(1, in_comInd); % 最優解的 適應度
while (stPi <= f_pSize ) && (in_stPop(stPi, in_comInd) == f_bestCom) % 在前幾個中搜索,只適用于按 適應度值 排完序的
serPi = 1;
findFlag = 0; % 表示沒找到相同的序列
while (serPi <= out_bCount) && (findFlag == 0)
if (in_stPop(stPi,1: in_jobCount) == out_bests(serPi, 1: in_jobCount) )
findFlag = 1;
end
serPi = serPi + 1;
end
if (findFlag == 0) && (in_stPop(stPi, in_dCInd) == 0) % 該粒子還沒進入 全局最優解,且不是劣解
out_bCount = out_bCount+1;
out_bests(out_bCount, 1: in_fitInd)=in_stPop(stPi, 1: in_fitInd);
out_bests(out_bCount, in_pBInd) = -1;
end
stPi = stPi + 1;
end
% % % % % %%------------------------------------------%%
% % % % % % 根據鄰近密度,轉化適應度為選擇壓力,鄰近密度越小,即個體越優,選擇壓力越大
% % % % % % 為防止鄰居數為0時,選擇概率為100%,統一修正加1
% % % % % f_nDensity = -ones(out_bCount, 1);
% % % % % f_nDensity(:, 1) = out_bests(:, in_nDInd) + 1;
% % % % % f_nDSum = sum(f_nDensity);
% % % % % for (f_gBi = 1: out_bCount)
% % % % % out_bests(f_gBi, in_fitInd) = (f_nDSum - out_bests(f_gBi, in_nDInd)) / f_nDSum;
% % % % % end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -