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));%这是改变后的值