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-

Documentos relacionados