加入粒子

Signed-off-by: facat@ipso <facat@ipso>
This commit is contained in:
facat@ipso 2014-11-24 01:17:07 +08:00
parent 64b8926958
commit 61eaa2ba60
5 changed files with 74 additions and 24 deletions

9
evolute.m Normal file
View File

@ -0,0 +1,9 @@
function [ selectedIndex ] = evolute( selectedIndex,randSNCount )
%
changeN=1;%
changedIndex=1:96;
changedIndex=changedIndex( round(1+(96-1)*rand(changeN,1)) );
selectedIndex(:,changedIndex)=round(1+(16-1)*rand(randSNCount,changeN));%
% [ selectedWind,selectedSolar,candidateP ] = generateCandidate( snWind,snSolar,snP,randSNCount,selectedIndex );
end

12
fitnessFun.m Normal file
View File

@ -0,0 +1,12 @@
function [ fitness ] = fitnessFun( selectedWind,selectedSolar,candidateP,randSNCount )
%
fitness=0;
for I=1:randSNCount
for J=1:randSNCount
fitness=fitness+candidateP(I)*( abs( sum(selectedWind(I,:)-selectedWind(J,:)) )+abs( sum(selectedSolar(I)-selectedSolar(J)) ) );
end
end
fitness=fitness/randSNCount/randSNCount;
end

14
generateCandidate.m Normal file
View File

@ -0,0 +1,14 @@
function [ selectedWind,selectedSolar,candidateP ] = generateCandidate( snWind,snSolar,snP,randSNCount,selectedIndex )
selectedWind=zeros(randSNCount,96);
selectedSolar=zeros(randSNCount,96);
selectedP=zeros(randSNCount,96);
for I=1:randSNCount
onesIndex=sparse(selectedIndex(I,:),1:96,1,16,96);
selectedWind(I,:)=sum(snWind.*onesIndex);
selectedSolar(I,:)=sum(snSolar.*onesIndex);
selectedP(I,:)=sum(snP.*onesIndex);
end
candidateP=prod(selectedP,2);
candidateP=candidateP./sum(candidateP);
end

6
initGA.m Normal file
View File

@ -0,0 +1,6 @@
function [ selectedIndex] = initGA( randSNCount )
%
selectedIndex=round(1+(16-1)*rand(randSNCount,96));
end

57
main.m
View File

@ -7,31 +7,40 @@ snWind=data(:,1:3:end);
snSolar=data(:,2:3:end); snSolar=data(:,2:3:end);
snP=data(:,3:3:end); snP=data(:,3:3:end);
snP(snP==-100)=1; snP(snP==-100)=1;
randSNCount=100; %16^288
gaCount=100;%
%% ³õʼ»¯ %% ³õʼ»¯
% ga=repmat(struct(),gaCount,1);
randSNCount=100; %16^288 for I=1:gaCount
selectedIndex=round(1+(16-1)*rand(randSNCount,96)); [ selectedIndex] = initGA( randSNCount );
selectedWind=zeros(randSNCount,96); % [ selectedIndex] = evolute(selectedIndex,randSNCount );
selectedSolar=zeros(randSNCount,96); ga(I).selectedIndex=selectedIndex;
selectedP=zeros(randSNCount,96); [ selectedWind,selectedSolar,candidateP ] = generateCandidate( snWind,snSolar,snP,randSNCount,ga(I).selectedIndex );
for I=1:randSNCount [ fitness ] = fitnessFun( selectedWind,selectedSolar,candidateP,randSNCount );
onesIndex=sparse(selectedIndex(I,:),1:96,1,16,96); ga(I).fitness=fitness;
selectedWind(I,:)=sum(snWind.*onesIndex);
selectedSolar(I,:)=sum(snSolar.*onesIndex);
selectedP(I,:)=sum(snP.*onesIndex);
end end
candidateP=prod(selectedP,2);
candidateP=candidateP./sum(candidateP); bestFitness=0;
% bestIndex=0;
fitness=0; for LOOP=1:100
for I=1:randSNCount fprintf('%d\n',LOOP);
for J=1:randSNCount fprintf('%f\n',bestFitness);
fitness=fitness+candidateP(I)*( abs( sum(selectedWind(I,:)-selectedWind(J,:)) )+abs( sum(selectedSolar(I)-selectedSolar(J)) ) ); for I=1:gaCount
fitness=ga(I).fitness;
if fitness>bestFitness
bestFitness=fitness;
bestIndex=ga(I).selectedIndex;
end end
end end
fitness=fitness/randSNCount/randSNCount;
% for I=1:gaCount
changeN=5;% [ selectedIndex] = evolute(selectedIndex,randSNCount );
changedIndex=1:96; ga(I).selectedIndex=selectedIndex;
changedIndex=changedIndex( round(1+(96-1)*rand(changeN,1)) ); [ selectedWind,selectedSolar,candidateP ] = generateCandidate( snWind,snSolar,snP,randSNCount,ga(I).selectedIndex );
selectedIndex(:,changedIndex)=round(1+(16-1)*rand(randSNCount,changeN));% [ fitness ] = fitnessFun( selectedWind,selectedSolar,candidateP,randSNCount );
ga(I).selectedIndex=selectedIndex;
ga(I).fitness=fitness;
end
end