parent
64b8926958
commit
61eaa2ba60
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
function [ selectedIndex] = initGA( randSNCount )
|
||||||
|
% 随机生成一下初始场景序列
|
||||||
|
selectedIndex=round(1+(16-1)*rand(randSNCount,96));
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
57
main.m
57
main.m
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue