Anexo D creador

Anuncio
ANEXO D: PROGRAMA CREADOR.FOR:
Listado del programa utilizado para generar las combinaciones a verificar (ver capítulo 5.6):
dimension id(49,49)
na=9
write (6,*)'numero de plantas?'
read (5,*)np
call leedist(id)
call generador (na,np,id)
end
subroutine generador(na,np,id)
dimension id(49,49)
dimension ivalmacenes(na)
dimension ivpuntosposibles(49)
dimension iconteoparcial(49,na)
dimension ivplantas(np)
do i=1,np
write (6,*)'planta',i,'?'
read (5,*)ivplantas(i)
enddo
open (unit=2,file='combinpos.res',status='unknown')
kkk=1
c
c
distancia mínima a la que pueden situarse 2 almacenes o almacen respecto planta:
write (6,*)'distancia minima?'
read (5,*)idmin
limpieza de iconteoparcial
do i=1,49
do j=1,na
iconteoparcial(i,j)=0
enddo
enddo
c
creacion ivpuntosposibles
do i=1,49
ivpuntosposibles(i)=1
enddo
c
eliminacion puntos donde hay plantas
do i=1,np
ivpuntosposibles(ivplantas(i))=0
enddo
c
eliminación puntos cercanos a plantas
do i=1,np
do j=1,49
if (id(ivplantas(i),j).lt.idmin) then
ivpuntosposibles(j)=0
endif
enddo
enddo
c
Posicion del almacen 1
do i1=1,49
k=1
if (ivpuntosposibles(i1).eq.1) then
call posalm (i1,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 2
do i2=i1,49
k=2
if (ivpuntosposibles(i2).eq.1) then
call posalm (i2,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 3
do i3=i2,49
k=3
if (ivpuntosposibles(i3).eq.1) then
call posalm (i3,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 4
do i4=i3,49
k=4
if (ivpuntosposibles(i4).eq.1) then
call posalm (i4,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 5
do i5=i4,49
k=5
if (ivpuntosposibles(i5).eq.1) then
call posalm (i5,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 6
do i6=i5,49
k=6
if (ivpuntosposibles(i6).eq.1) then
call posalm (i6,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 7
do i7=i6,49
k=7
if (ivpuntosposibles(i7).eq.1) then
call posalm (i7,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 8
do i8=i7,49
k=8
if (ivpuntosposibles(i8).eq.1) then
call posalm (i8,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
c
Posición del almacen 9
do i9=i8,49
k=9
if (ivpuntosposibles(i9).eq.1) then
call posalm (i9,k,na,ivpuntosposibles,ivalmacenes,iconteoparcial,
+
idmin,id)
write (*,100) ivalmacenes(1),ivalmacenes(2),ivalmacenes(3)
+ ,ivalmacenes(4),ivalmacenes(5),ivalmacenes(6),
+ ivalmacenes(7),ivalmacenes(8),ivalmacenes(9),kkk
write (2,100) ivalmacenes(1),ivalmacenes(2),ivalmacenes(3)
+ ,ivalmacenes(4),ivalmacenes(5),ivalmacenes(6),
+ ivalmacenes(7),ivalmacenes(8),ivalmacenes(9)
100 format (9(1I2,3X),1I10)
kkk=kkk+1
c
c
c
k=9
reposición del ivpuntosposibles tras 9
call repos (i9,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=8
reposición del ivpuntosposibles tras 8
call repos (i8,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=7
reposición del ivpuntosposibles tras 7
call repos (i7,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
c
c
c
c
c
c
k=6
reposición del ivpuntosposibles tras 6
call repos (i6,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=5
reposición del ivpuntosposibles tras 5
call repos (i5,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=4
reposición del ivpuntosposibles tras 4
call repos (i4,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=3
reposición del ivpuntosposibles tras 3
call repos (i3,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=2
reposición del ivpuntosposibles tras 2
call repos (i2,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
k=1
reposición del ivpuntosposibles tras 1
call repos (i1,k,na,ivpuntosposibles,iconteoparcial)
endif
enddo
close (2)
kkk=kkk-1
open (unit=2,file='ncomb.res',status='unknown')
write (2,*)np
do i=1,np
write (2,*)ivplantas(i)
enddo
write (2,*)kkk,idmin
close (2)
end
subroutine posalm (i,k,na,ivpuntosposibles,ivalmacenes,
+
iconteoparcial,idmin,id)
dimension ivpuntosposibles(49)
dimension ivalmacenes(na)
dimension iconteoparcial(49,na)
dimension id(49,49)
ivalmacenes(k)=i
ivpuntosposibles(i)=0
do j=1,49
if (id(ivalmacenes(k),j).lt.idmin) then
if (ivpuntosposibles(j).eq.1) then
c
write (*,*)'puntos anulados en paso',kkk,j
ivpuntosposibles(j)=0
iconteoparcial(j,k)=1
endif
endif
enddo
end
c
subroutine repos (i,k,na,ivpuntosposibles,iconteoparcial)
dimension ivpuntosposibles(49)
dimension iconteoparcial(49,na)
do j=1,49
if (iconteoparcial(j,k).eq.1) then
write (*,*)'puntos repuestos en paso',kkk,j
ivpuntosposibles(j)=1
iconteoparcial(j,k)=0
endif
enddo
ivpuntosposibles(i)=1
end
subroutine lectura(ndist)
dimension ndist(49,49)
open (unit=1,file='distcolumn.dat',status='old')
do i=1,49
do j=1,49
read (1,*) ndist(i,j)
enddo
enddo
close (1)
end
subroutine leedist(id)
dimension id(49,49)
open (unit=1,file='idistancias.dat',status='old')
do ipp=1,2401
read (1,*) i,j,ij
id(i,j)=ij
enddo
close (1)
end
Descargar