gascenarioreduction/main.m

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