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