57 lines
1.7 KiB
Matlab
57 lines
1.7 KiB
Matlab
clear
|
|
clc
|
|
data=dlmread('数据.csv');
|
|
%% 数据处理
|
|
%按时段T把每个场景拿出来
|
|
snWind=data(:,1:3:end);
|
|
snSolar=data(:,2:3:end);
|
|
snP=data(:,3:3:end);
|
|
snP(snP==-100)=1;
|
|
randSNCount=500; %要小于16^288 。解的场景数量
|
|
gaCount=20;%粒子数
|
|
%% 初始化
|
|
ga=repmat(struct(),gaCount,1);
|
|
for I=1:gaCount
|
|
[ selectedIndex] = initGA( randSNCount );
|
|
% [ selectedIndex] = evolute(selectedIndex,randSNCount );
|
|
ga(I).selectedIndex=selectedIndex;
|
|
[ selectedWind,selectedSolar,candidateP ] = generateCandidate( snWind,snSolar,snP,randSNCount,ga(I).selectedIndex );
|
|
[ fitness ] = fitnessFun( selectedWind,selectedSolar,candidateP,randSNCount );
|
|
ga(I).fitness=fitness;
|
|
end
|
|
|
|
bestFitness=0;
|
|
bestIndex=0;
|
|
for LOOP=1:10
|
|
fprintf('第%d次迭代\n',LOOP);
|
|
fprintf('最好适度函数%f\n',bestFitness);
|
|
for I=1:gaCount
|
|
fitness=ga(I).fitness;
|
|
if fitness>bestFitness
|
|
bestFitness=fitness;
|
|
bestIndex=ga(I).selectedIndex;
|
|
end
|
|
end
|
|
|
|
for I=1:gaCount
|
|
[ selectedIndex] = evolute(selectedIndex,randSNCount,snSolar );
|
|
ga(I).selectedIndex=selectedIndex;
|
|
[ selectedWind,selectedSolar,candidateP ] = generateCandidate( snWind,snSolar,snP,randSNCount,ga(I).selectedIndex );
|
|
[ fitness ] = fitnessFun( selectedWind,selectedSolar,candidateP,randSNCount );
|
|
ga(I).selectedIndex=selectedIndex;
|
|
ga(I).fitness=fitness;
|
|
end
|
|
end
|
|
%利用优化后的结果给出新的场景
|
|
newSnWind=zeros(randSNCount,96);
|
|
newSnSolar=zeros(randSNCount,96);
|
|
newSnP=zeros(randSNCount,96);
|
|
for I=1:randSNCount
|
|
onesIndex=sparse(bestIndex(I,:),1:96,1,16,96);
|
|
newSnWind(I,:)=sum(onesIndex.*snWind);
|
|
newSnSolar(I,:)=sum(onesIndex.*snSolar);
|
|
newSnP(I,:)=sum(onesIndex.*snP);
|
|
end
|
|
|
|
|