gascenarioreduction/main.m

38 lines
1.1 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=100; %要小于16^288
selectedIndex=round(1+(16-1)*rand(randSNCount,96));
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);
%计算适度函数
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;
%修改领域
changeN=5;%选择多少时段进行修改。
changedIndex=1:96;
changedIndex=changedIndex( round(1+(96-1)*rand(changeN,1)) );
selectedIndex(:,changedIndex)=round(1+(16-1)*rand(randSNCount,changeN));%这是改变后的值