Trabalho-IA342
Transcrição
Trabalho-IA342
C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 clear all close all %%%%%---------------------- Dados da rede---------------------------%%%%% load('nodos');% load('arcos');% load('reactancias');% Sbase=34000; Vbase=12660; Zbase=(Vbase^2)/Sbase; V=ones(1,34); %%%%%--------------------Lista de arcos-----------------------------%%%%% Arcos=arcos(:,4)';%Declaração do vetor dos arcos Ok=arcos(:,5)'; % Nós origen **Tem em conta todos as possiveis Tk=arcos(:,6)'; % Nós destino **chaves rede de distribução. estado=arcos(:,8)';% Vetor de estado da chaves 0 aberto 1 aberto sub=33; Ok(1)=33; Tk(1)=34; Ok(2)=34; %%%%%%------Chaves_candidatas-----%%%%%%%Sao escolhdas chaves com %%%%%%parametros de conveniencia Ok(34)=3; Tk(34)=8; Ok(35)=9; Tk(35)=27; Ok(36)=10; Tk(36)=29; Ok(37)=17; Tk(37)=30; Ok(38)=22; Tk(38)=25; Ok(39)=4; Tk(39)=19; Ok(40)=18; Tk(40)=22; Ok(41)=24; Tk(41)=28; Ok(42)=21; Tk(42)=24; Arcos(39)=39; Arcos(40)=40; Arcos(41)=41; Arcos(42)=42; estado(39)=0; estado(40)=0; estado(41)=0; estado(42)=0; %%%%%%----------------------------%%%%%%% tama_Nodos=length(nodos); matri_ajace=zeros(tama_Nodos,tama_Nodos); r=(reactancias(:,2)'./Zbase)*1000;%vetores de reactancia normalizada r(39)=0.2067; r(40)=0.2067; r(41)=0.1061; r(42)=0.4243; x=(reactancias(:,3)'./Zbase)*1000;% -1- C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 PL=nodos(3:34,6);%%Carga ativa de cada nó FP=nodos(3:34,7);%%Fator de potência cada nó PL(33)=0; PL(34)=0; FP(33)=1; FP(34)=1; QL=sqrt((PL./FP).^2-PL.^2)./Sbase;%%Carga reativa de cada nó PL=PL./Sbase; Nf=8000; TavoIni=0.0000001; Tavo=ones(1,42)*TavoIni; rotas_for=zeros(Nf,tama_Nodos); %%%%%%%------------------------------------------------------------%%%%%% %%%%%%---------------Declaração de variaveis-----------------------%%%%%% estado_operacion_hijos=zeros(1,34);%vetor de filhos 0. não tem 1. tem filho paiOpera=zeros(1,34);% vetor de pãi de cada nó % nivel=zeros(1,34); % vetor de niveis. tama_Arcos=length(Arcos);%num de arcos % nos_visitados=zeros(size(PL))';%vetor de nós visitados % NivelesNODOS=zeros(size(PL))';%vetor de niveis de cada nó % [fila coluna]=size(Ok); Fluxo_tempQ=0; Fluxo_tempP=0; % %%%%%-------------------------Algoritmo------------------------------%%%%% %%%%%----------------Origem das formigas--------------------------%%%%%%%% cont1=1; for i=1:tama_Arcos matri_ajace(Ok(i),Tk(i))=1; if(estado(i)==0) matri_ajace(Tk(i),Ok(i))=1; else estado_operacion_hijos(Ok(i))=1; % + se o nó tem filho paiOpera(Tk(i))=Ok(i);%ciclo para criar vetor: + pai de cada nó cont1=cont1+1; end end Num_ori_form=0; for i=1:tama_Nodos if(estado_operacion_hijos(i)==0) Num_ori_form=Num_ori_form+1; end end vet_orig_formigas=zeros(1,Num_ori_form); cont2=1; for i=1:tama_Nodos if(estado_operacion_hijos(i)==0) vet_orig_formigas(cont2)=i; cont2=cont2+1; end end %%%%%-------------------------------------------------------------%%%%%%%% -2- C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 %%%%%%%-----------------Calculo de perdas e caminhos direitos------%%%%%% registro_opera=zeros(Num_ori_form,tama_Nodos); registro_opera11=zeros(Num_ori_form,tama_Nodos); nivel=zeros(1,Num_ori_form); for i=1:Num_ori_form clear vec_percur_opracion; nodo_inicial=vet_orig_formigas(i); vec_percur_opracion(1)=nodo_inicial; cont3=2; while vec_percur_opracion(cont3-1)~=34 vec_percur_opracion(cont3)=paiOpera(vec_percur_opracion(cont3-1)); cont3=cont3+1; end %%%%%--------calculo do fluxo do ramo-----------%%%%%% FLUXOxARCOP=zeros(1,cont3-2); FLUXOxARCOQ=zeros(1,cont3-2); FLUXOxARCOP(1)=PL(vec_percur_opracion(1)); FLUXOxARCOQ(1)=QL(vec_percur_opracion(1)); for cont6=2:cont3-2 FLUXOxARCOP(cont6)=PL(vec_percur_opracion(cont6))+FLUXOxARCOP(cont6-1); FLUXOxARCOQ(cont6)=QL(vec_percur_opracion(cont6))+FLUXOxARCOQ(cont6-1); end for cont4=1:cont3-2 ban=1; cont5=1; while ban==1 if Tk(cont5)==vec_percur_opracion(cont4)&& Ok(cont5)==vec_percur_opracion(cont4+1) reactancias_temp(cont4)=r(cont5); ban=0; end cont5=cont5+1; end end PerdasPU=(FLUXOxARCOP.^2+FLUXOxARCOQ.^2)*reactancias_temp';%9. Calcula perdas em cada arco PerdasKWopera=PerdasPU*Sbase; % 10.Calculo de perdas em KW perdas_percurso(i)=PerdasKWopera; clear reactancias_temp; registro_opera11(i,1:length(vec_percur_opracion))=vec_percur_opracion; nivel(1,i)=length(vec_percur_opracion); % t=PerdasKWopera+0.1; end for i=1:Num_ori_form [aa posni]=min(nivel); registro_opera(i,:)=registro_opera11(posni,:); nivel(posni)=tama_Nodos+1; end t=1; %%%%%%-------------------Algoritmo de busca---------%%%%%%%%%%% NfNodo=Nf/Num_ori_form; while t<=100 -3- C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 rotas_for=zeros(Nf,tama_Nodos); t=t+1; iniNodo=1; for i=1:Num_ori_form iniNodo=(i*NfNodo)-(NfNodo-1); rotas_for(iniNodo:iniNodo+NfNodo-1,1)=registro_opera(i,1); end cont7=2; arcos_usados=zeros(Nf,33); cont_form=1; while cont_form<=Nf cont_form z=1; num_nodos_rota=0; cont7=2; conta_nodos=2; nodos_visitado=[]; nodos_visitado(1)=rotas_for(cont_form,1); while rotas_for(cont_form,cont7-1)~=34 %%%_____avaliaçâo de chaves ----------%%%%%% num_anex_chaves=sum(matri_ajace(:,rotas_for(cont_form,cont7-1))); if (num_anex_chaves==1) rotas_for(cont_form,cont7)=paiOpera(rotas_for(cont_form,cont7-1)); nodos_visitado(conta_nodos)=rotas_for(cont_form,cont7); conta_nodos=conta_nodos+1; else %%%%%%_____________Duas Chaves--------%%%%%%%%%%% cont8=1; p=1; vizinhos=[]; while isempty(vizinhos) for k=1:tama_Nodos ban5=0; if matri_ajace(k,rotas_for(cont_form,cont7-1))==1 for pp=1:length(nodos_visitado) if(k==nodos_visitado(pp)) ban5=1; end end if(ban5==0) vizinhos(cont8)=k; cont8=cont8+1; ban2=0; cont9=1; for cont9=1:tama_Arcos if(estado(cont9)==1) if Tk(cont9)==rotas_for(cont_form,cont7-1)&& Ok(cont9)==k Tavo_arcos_candidatos(p)=Tavo(cont9); p=p+1; end else if (Tk(cont9)==rotas_for(cont_form,cont7-1)&& Ok(cont9)==k)||(Ok(cont9)==rotas_for(cont_form,cont7-1)&& Tk(cont9)==k) -4- C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 Tavo_arcos_candidatos(p)=Tavo(cont9); p=p+1; end end end end end end if isempty(vizinhos) ii=1; while rotas_for(cont_form,ii)~=rotas_for(cont_form,cont7-1) ii=ii+1; end cont7=ii; rotas_for(cont_form,ii:tama_Nodos)=zeros(1,tama_Nodos-ii+1 ); end end %%Calculo para escolha do novo ramo prob=Tavo_arcos_candidatos./sum(Tavo_arcos_candidatos); [minp pos]=max(prob); o=1; for n=1:length(vizinhos)%%% Escolhe prob min if minp==prob(n) minpro(o)=vizinhos(n); o=o+1; end end rotas_for(cont_form,cont7)=minpro(randi(o-1,1)); nodos_visitado(conta_nodos)=rotas_for(cont_form,cont7); conta_nodos=conta_nodos+1; clear vizinhos; clear prob; clear Tavo_arcos_candidatos; clear minpro; end cont7=cont7+1; end %%%%%% Calculo de flujos por arco [c posnodo]=min(rotas_for(cont_form,:)); num_nodos_rota=posnodo-1; FLUXOxARCOP=zeros(1,num_nodos_rota-1); FLUXOxARCOQ=zeros(1,num_nodos_rota-1); FLUXOxARCOP(1)=PL(rotas_for(cont_form,1)); FLUXOxARCOQ(1)=QL(rotas_for(cont_form,1)); for cont6=2:num_nodos_rota-1 FLUXOxARCOP(1,cont6)=PL(rotas_for(cont_form,cont6))+FLUXOxARCOP(1,cont6-1 ); FLUXOxARCOQ(1,cont6)=QL(rotas_for(cont_form,cont6))+FLUXOxARCOQ(1,cont6-1 ); end reactancias_temp=[]; for cont4=1:num_nodos_rota-1 -5- C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 ban=1; cont5=1; while ban==1 if(estado(cont5)==1) if Tk(cont5)==rotas_for(cont_form,cont4)&& Ok(cont5)==rotas_for( cont_form,cont4+1) reactancias_temp(cont4)=r(cont5); arcos_usados(cont_form,z)=cont5; z=z+1; ban=0; end else if (Tk(cont5)==rotas_for(cont_form,cont4)&& Ok(cont5)==rotas_for( cont_form,cont4+1))||(Ok(cont5)==rotas_for(cont_form,cont4)&& Tk(cont5)==rotas_for(cont_form, cont4+1)) reactancias_temp(cont4)=r(cont5); arcos_usados(cont_form,z)=cont5; z=z+1; ban=0; end end cont5=cont5+1; end end %%Calculo de Perdas por percurso PerdasPUNovas=(FLUXOxARCOP.^2+FLUXOxARCOQ.^2)*reactancias_temp';%9. Calcula perdas em cada arco PerdasKWNovas=PerdasPUNovas*Sbase; % 10.Calculo de perdas em KW DeltaTavo(cont_form)=1/PerdasKWNovas; clear reactancias_temp; %t=PerdasKWNovas; for ll=1:Num_ori_form if rotas_for(cont_form,1)==vet_orig_formigas(ll) if PerdasKWNovas<=perdas_percurso (ll) perdas_percurso(ll)=PerdasKWNovas; quemmenor(ll)=cont_form; rotaOtma(ll,:)=rotas_for(cont_form,:); end end end ban4=0; iii=1; %%% Eliminação de percurso direito while iii<=Num_ori_form && ban4==0 if sum(~(rotas_for(cont_form,:)==registro_opera(iii,:)))==0 %%rota de operaçao nao deve ser tida %%enconta rotas_for(cont_form,2:tama_Nodos)=zeros(1,tama_Nodos-1); cont_form=cont_form-1; ban4=1; %DeltaTavo(cont_form)=1/(PerdasKWNovas+40); end iii=iii+1; end -6- C:\Users\maguirre\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\EQ6DRXWM\planejamento103.m segunda-feira, 12 de dezembro de 2011 13:08 %end cont_form=cont_form+1; end %%% Carga novo feromonio for j=1:Nf [mini lugar]=min(arcos_usados(j,:)); for i=1:lugar-1 Tavo(arcos_usados(j,i))= Tavo(arcos_usados(j,i))*0.5+DeltaTavo(j); end end end -7-