Ver/Abrir

Anuncio
ANEXO E: PROGRAMA VALORACIÓN_COSTES.FOR:
Listado del programa utilizado para valorar los costes de transporte de cada
combinación y seleccionar la más económica, verificando limitación de transporte
capilar (ver capítulo 5.7):
dimension idistancias(49,49)
dimension iconsumos(49)
c
c
open (unit=3,file='ncomb.dat',status='old')
lectura del número de plantas y donde estan
read (3,*)np
lectura del número de almacenes
write (6,*)'número de almacenes?'
read (5,*)na
call leedistancias (idistancias)
call leeconsumos (iconsumos)
call zonario (iconsumos,idistancias,np,na)
end
subroutine leedistancias(id)
dimension id (49,49)
open (unit=1,file='idistancias.dat',status='old')
do icont=1,2401
read (1,*)i,j,idist
id(i,j)=idist
enddo
close (1)
end
subroutine leeconsumos (iconsumos)
dimension iconsumos(49)
open (unit=1,file='consumos.dat',status='old')
do i=1,49
read (1,*) iconsumos(i)
enddo
close (1)
end
subroutine zonario (iconsumos,id,np,na)
dimension id(49,49)
dimension ivplantas(np)
dimension ivalmacenes(na)
dimension ivjerarquico(49,2)
dimension ivjalmacenes(na)
dimension ivjdefinitivo(49)
dimension ivjadefinitivo(na)
dimension iconsumos(49)
dimension ipesosalmacenes(49)
dimension ivplantmejor(np)
dimension ivalmmejor(na)
open (unit=2,file='resultado.res',status='unknown')
c
Lectura de donde estan las plantas
do i=1,np
read (3,*)ivplantas(i)
enddo
c
lectura de la distancia maxima que permitiremos a los capilares
write (6,*)'distancia maxima de capilar?'
read (5,*)icaplim
c
lectura del número de combinaciones que hay que comprobar
read (3,*)ncomb,idmin
close (3)
open (unit=3,file='combinpos.dat',status='old')
write (2,*)'número de plantas:',np
write (2,*)'número de almacenes:',na
write (2,*)'distnacia mínima entre alm/plantas',idmin
write (2,*)'número de combinaciones evaluadas',ncomb
acostetptetotalopt=1000000000
c
tantos do's como combinaciones existan:
do kik=1,ncomb
c
limpieza de vectores jerarquicos
do i=1,49
do j=1,2
ivjerarquico(i,j)=0
enddo
enddo
do i=1,na
ivjalmacenes(i)=0
enddo
read (3,*)ivalmacenes(1),ivalmacenes(2),ivalmacenes(3),
+ ivalmacenes(4),ivalmacenes(5),ivalmacenes(6),
+ ivalmacenes(7),ivalmacenes(8),ivalmacenes(9)
do i=1,49
idistasusup=10000
do j=1,np
idistasusup=min(idistasusup,id(i,ivplantas(j)))
if (idistasusup.eq.id (i,ivplantas(j)))
+ isusup=ivplantas(j)
enddo
ivjerarquico(i,2)=isusup
do j=1,na
idistasusup=min(idistasusup,id(i,ivalmacenes(j)))
if (idistasusup.eq.id (i,ivalmacenes(j)))
+ isusup=ivalmacenes(j)
enddo
ivjerarquico(i,1)=isusup
enddo
100
format (1I2,22x,1I2,14x,1I4)
do i=1,na
idistasusup=10000
do j=1,np
idistasusup=min(idistasusup,id(ivalmacenes(i),ivplantas(j)))
if (idistasusup.eq.id(ivalmacenes(i),ivplantas(j)))
+ isusup=ivplantas(j)
enddo
ivjalmacenes(i)=isusup
enddo
c
Cálculo costes total:
asumatotal=0
do i=1,49
if (ivjerarquico(i,1).eq.i) then
aprecioi=30.764+30*0.0589
asumatotal=asumatotal+aprecioi*iconsumos(i)*1000
else
apreciodircap=30.764+id(i,ivjerarquico(i,2))*0.0589
costedirectoi=apreciodircap*iconsumos(i)*1000
if (ivjerarquico(i,1).eq.ivjerarquico(i,2)) then
asumatotal=asumatotal+costedirectoi
else
do j=1,na
if
(ivjerarquico(i,1).eq.ivalmacenes(j))icontaux=j
enddo
aprecioindcap=30.764+id(i,ivjerarquico(i,1))*0.0589
aprecioindprim=0.012*id(ivjerarquico(i,1)
+
,ivjalmacenes(icontaux))
costeindirectoi=iconsumos(i)*(aprecioindcap+
+
aprecioindprim)*1000
if (costedirectoi.lt.costeindirectoi) then
if (id(i,ivjerarquico(i,2)).lt.icaplim) then
ivjerarquico(i,1)=ivjerarquico(i,2)
asumatotal=asumatotal+costedirectoi
else
asumatotal=asumatotal+costeindirectoi
endif
else
asumatotal=asumatotal+costeindirectoi
endif
endif
endif
enddo
c
comprobación de que se cumple la condicion de icapmax:
icapmax=1
do ic=1,49
if (id(ic,ivjerarquico(ic,1)).gt.icapmax) then
icapmax=id(ic,ivjerarquico(ic,1))
ies=ic
endif
enddo
if (icaplim.gt.icapmax) then
if (asumatotal.lt.acostetptetotalopt) then
icapmaxreal=icapmax
iesreal=ies
acostetptetotalopt=asumatotal
do i=1,np
ivplantmejor(i)=ivplantas(i)
enddo
do i=1,na
ivalmmejor(i)=ivalmacenes(i)
enddo
do i=1,49
ivjdefinitivo(i)=ivjerarquico(i,1)
enddo
do i=1,na
ivjadefinitivo(i)=ivjalmacenes(i)
enddo
endif
write (*,*)'combinacion numero',kik,asumatotal,acostetptetotalopt
endif
enddo
write (2,*)'suma ponderada optima',acostetptetotalopt
write (2,*)'capilar de maxima distancia',iesreal
write (2,*)'distancia maxima de capilar',icapmaxreal
write (2,*)'almacenes su planta'
do i=1,na
write (2,*)ivalmmejor(i),ivjadefinitivo(i)
enddo
write (2,*)'plantas'
do i=1,np
write (2,*)ivplantmejor(i)
enddo
write(2,*)'zona su superior'
do i=1,49
write(2,*)i,ivjdefinitivo(i)
enddo
close (2)
close (3)
end
Documentos relacionados
Descargar