資源簡(jiǎn)介
用于配電網(wǎng)重構(gòu)的蟻群算法,Matlab程序。
代碼片段和文件信息
clear;
clc;
G=textread(‘IEEE33.txt‘);%支路號(hào)—節(jié)點(diǎn)號(hào)矩陣
alpha=1;%螞蟻在運(yùn)動(dòng)過程中所積累信息(即信息素)在螞蟻選擇路徑時(shí)的相對(duì)重要程度,alpha過大時(shí),算法迭代到一定代數(shù)后將出現(xiàn)停滯現(xiàn)象
beta=5;%啟發(fā)式因子在螞蟻選擇路徑時(shí)的相對(duì)重要程度
rho=0.5;%0 Q=100;%螞蟻釋放的信息素量,對(duì)本算法的性能影響不大
Tau=ones(137)*Q;%路徑上的初始信息素
R=G(:4)‘;
eta=1./R;%對(duì)應(yīng)LN中的支路能見度
Nc=0;
Nc_max=50;
m=25;
trip=zeros(m32);%m只螞蟻?zhàn)哌^的m條路徑
trip(:1)=1;
P=zeros(1m);%同一次迭代中每只螞蟻所走路徑的網(wǎng)損值
Ploss=zeros(1Nc_max);%每次迭代的網(wǎng)損值
PP=zeros(1m);
while?Nc ????Nc=Nc+1????
????for?i=1:m
????????t=1;
????????S=[1];%螞蟻k連入樹的節(jié)點(diǎn)集合
????????W=[234567891011121314151617181920212223242526272829303132];%螞蟻k連入樹的節(jié)點(diǎn)集合
????????E=[218];%兩節(jié)點(diǎn)集合間所有可選路徑
????????while?t<32
????????????t=t+1;
????????????long=length(E);
????????????tao=zeros(1long);
????????????eta1=zeros(1long);
????????????for?j=1:long?
????????????????tao(j)=Tau(E(j));%返回可選路徑上的初始信息素
????????????????eta1(j)=eta(E(j));%返回可選路徑的能見度
????????????end
????????????tao;
????????????eta1;
????????????he=sum((tao.^alpha).*(eta1.^beta));%求和
????????????
%******************************按概率選擇路徑******************************&????????????
????????????q0=0.5;?
????????????probability=zeros(1long);
????????????a=rand;
????????????if?a>q0
????????????????for?k=1:long
????????????????????probability(k)=tao(k)^alpha*eta1(k)^beta;
????????????????end
????????????????probability;
????????????????for?o=1:long??
????????????????????chance=sort(probability‘a(chǎn)scend‘);
????????????????????Locate=find(probability==chance(end));
????????????????????l=E(Locate(1));%若rand大于0.5,在E中選取概率最大的路徑
????????????????????N=G(l2:3);%所選路徑的首、末端節(jié)點(diǎn)編號(hào)
????????????????????P=intersect(NS);%N與已連入樹的節(jié)點(diǎn)的公共節(jié)點(diǎn)
????????????????????if?P==N
????????????????????????Locate=find(E==l);%E是存儲(chǔ)數(shù)據(jù)的數(shù)組名,find是找到等于l的數(shù)的位置
????????????????????????E(Locate)=[];%刪除數(shù)組E中等于l的元素
????????????????????????E=unique(E);
????????????????????????probability(probability==chance(end))=[];
????????????????????else
????????????????????????break
????????????????????end
????????????????end
????????????????%修正3個(gè)集合
????????????????if?intersect(G(l2)S)==G(l2)
????????????????????S=[SG(l3)];
????????????????????Locate=find(W==G(l3));%W是存儲(chǔ)數(shù)據(jù)的數(shù)組名,find是找到等于G(l3)的數(shù)的位置
????????????????????W(Locate)=[];%刪除數(shù)組W中等于G(l3)的元素
????????????????????if?isempty(W)==1
????????????????????????trip(it)=l;%將已走過的路徑存放在trip中
????????????????????????break
????????????????????end
????????????????????[rowcol]=find(G(:2:3)==G(l3));%與節(jié)點(diǎn)j相關(guān)聯(lián)的新增支路所在位置
????????????????????E=[Erow‘];
????????????????????Locate=find(E==l);%E是存儲(chǔ)數(shù)據(jù)的數(shù)組名,find是找到等于l的數(shù)的位置
????????????????????E(Locate)=[];%刪除數(shù)組a中等于l的元素
????????????????????E=unique(E);
????????????????????trip(it)=l;%將已走過的路徑存放在trip中????????????????????
????????????????else????????????
????????????????????if?intersect(G(l3)S)==G(l3)
????????????????????????S=[SG(l2)];
????????????????????????Locate=find(W==G(l2));%W是存儲(chǔ)數(shù)據(jù)的數(shù)組名,find是找到等于G(l2)的數(shù)的位
評(píng)論
共有 條評(píng)論