gascenarioreduction/main.m

57 lines
1.7 KiB
Mathematica
Raw Normal View History

clear
clc
data=dlmread('<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.csv');
%% <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>
%<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>T<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>
snWind=data(:,1:3:end);
snSolar=data(:,2:3:end);
snP=data(:,3:3:end);
snP(snP==-100)=1;
randSNCount=500; %ҪС<EFBFBD><EFBFBD>16^288 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gaCount=20;%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
%% <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
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:500
fprintf('<EFBFBD><EFBFBD>%d<EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>\n',LOOP);
fprintf('<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶȺ<EFBFBD><EFBFBD><EFBFBD>%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
%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µij<EFBFBD><EFBFBD><EFBFBD>
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