Sistema de Apoyo para Pymes

Anuncio
Sistema de apoyo a procesos productivos en Pymes: Un caso de aplicación1
Ricardo Contreras A., M. Angélica Pinninghoff J., Evelyn Osses L.
Departamento de Ingeniería Informática y Ciencias de la Computación
Facultad de Ingeniería
Universidad de Concepción, Chile
e-mail: {rcontrer,mpinning}@udec.cl
Resumen
Este trabajo muestra la experiencia de desarrollo de un software que utiliza técnicas de inteligencia artificial
para optimizar los procesos de producción de una empresa Pyme (Pequeñas y medianas empresas) del sector metalmecánico.
El software busca apoyar la planificación de tareas productivas de la empresa, en particular la
planificación de tiempos y prioridades de ejecución de diferentes órdenes de trabajo. Para esta aplicación se optó
por el uso de algoritmos genéticos, los cuales aunque no necesariamente encuentran soluciones óptimas, permiten
llegar a soluciones satisfactorias, como lo muestran los resultados alcanzados, que validan la utilización de esta
técnica.
Palabras clave. Optimización, Algoritmos genéticos, Planificación de la producción, Aplicaciones en el sector
productivo.
1
Trabajo con financiamiento DIUC, Proyecto 203.093.008-1.0, Universidad de Concepción
1. Introducción
El caso a tratar corresponde a una Fundición, empresa del sector metal-mecánico, encargada de producir bienes
físicos, específicamente productos (piezas y partes) para otras empresas que abarcan rubros asociados a madera,
cemento, celulosa, papel, aserraderos entre otras.
La mayoría de las empresas catalogadas como Pymes no busca soluciones de índole computacional para agilizar
sus procesos productivos, principalmente por la idea de los altos costos involucrados en un desarrollo computacional
concreto, limitándose al uso de computadores sólo para el apoyo a las actividades administrativas. La idea tras este
proyecto es que es posible disponer de soluciones computacionales con costos marginales y que por lo tanto es
posible masificar el uso de soluciones computacionales de bajo costo para apoyar a sectores particulares en el mundo
productivo.
El problema del scheduling plantea la necesidad de un procedimiento para lograr distribuir una cantidad
limitada de recursos a un conjunto de tareas, en un cierto plazo. O sea, se trata de un proceso de toma de decisiones
que tiene como meta la optimización de uno o más objetivos. Los recursos y tareas pueden tomar muchas formas.
Los recursos pueden ser, por ejemplo, máquinas en una industria, pistas de aterrizaje en un aeropuerto, unidades de
procesamiento en un ambiente computacional. Las tareas pueden tener diferentes niveles de prioridad, criterio según
el cual ocupan un lugar dentro de una configuración solución. En el caso de la empresa de esta experiencia, los
recursos son trabajadores y/o maquinarias y las tareas corresponden a los procesos que deben seguir los productos y
piezas para su elaboración.
El problema del scheduling es reconocidamente un problema de la clase NP para los cuales no existen
soluciones algorítmicas polinomiales conocidas, lo que justifica su tratamiento con heurísticas. En este caso
particular se explora la capacidad de los algoritmos genéticos para llegar a soluciones satisfactorias. Por otra parte,
diversos intentos de resolver este tipo de problemas se vienen desarrollando desde hace algún tiempo, siendo crítico
el tipo particular de aplicación y la naturaleza de los operadores de recombinación utilizados [Beat92]. La
diferencia, a veces no bien comprendida, entre scheduling y secuenciación de tareas también es analizada en la
referencia anterior.
El presente artículo está estructurado de la siguiente forma: La sección 2 presenta la definición del problema
específico a resolver; la sección 3 plantea el proyecto general. La sección 4 ilustra la propuesta de solución mediante
el uso de algoritmos genéticos y muestra algunos aspectos involucrados en el diseño e implementación de la
solución; la sección 5 muestra las pruebas y resultados obtenidos para finalmente en la sección 6 presentar las
conclusiones derivadas del trabajo.
2. El problema
Como se mencionó en la Introducción, se trata de solucionar el problema de asignación de recursos (incluido el
recurso tiempo) a las diversas etapas del proceso de elaboración de productos en una pequeña empresa metalmecánica genérica, cuyo negocio consiste en la fabricación de productos en algún metal fundido.
Es necesario identificar los elementos que son comunes a todas las empresas que poseen las características
anteriormente señaladas. Se destacan tres grandes conjuntos de elementos: las Etapas (E i) metal-mecánicas que
deben seguir los productos para su elaboración, los Recursos (Rij) que permitirán llevar a cabo dichas etapas y los
Productos (Pi) que se deben elaborar en un plazo determinado. Así, se tiene los siguientes conjuntos involucrados:
E = {E1, ..., Ei, ... En}
R = {R1, ..., Ri, ..., Rn}
Rj = {Rj1, ..., Rji, ..., Rjm}
P = {P1, ..., Pi, ..., Pk}
(conjunto de n etapas productivas)
(conjunto de n tipos de recursos)
(conjunto de m recursos del tipo i)
(conjunto de k productos a elaborar)
Algunas suposiciones necesarias para acotar el problema son; existe una cantidad determinada n de etapas
productivas, en que n es la cantidad de recursos disponibles, además a cada etapa E i le corresponde un cierto tiempo
de duración, esta cantidad depende del proceso de producción definido en cada empresa en forma particular, es
decir, el proceso tendrá una cantidad de etapas productivas que podría diferir para empresas diferentes, según la
orientación del negocio. Las etapas Ei son consecutivas de acuerdo al índice i, es decir, si para un determinado
tiempo t se ha puesto en ejecución la etapa E1, entonces la etapa 2 se podrá ejecutar a partir del tiempo t+x, en que x
es el tiempo que toma en completarse la etapa E1.
Adicionalmente, para elaborar un producto no siempre son necesarias n etapas, aunque el proceso debe
contemplar como mínimo una de ellas. Las etapas que se necesita ejecutar dependen del tipo de producto
considerado, el tiempo que tome cada etapa para elaborar un producto también depende del tipo de producto en
particular.
Si bien existen otras consideraciones adicionales, no resulta indispensable describirlas en su totalidad ya que
corresponden más bien a detalles necesarios para la operación pero cuya falta no oscurece la descripción del
problema que se intenta dar en este punto.
En resumen, lo que se intenta es minimizar el tiempo de elaboración total de un conjunto de productos que
aparecen en, eventualmente, diferentes órdenes de trabajo.
2.1 El problema específico.
Como se mencionó, se trata de crear un software de apoyo para la planificación de órdenes de trabajo
(asignación de tiempos y otros recursos a los procesos de elaboración de productos) para una empresa de fundición,
pequeña empresa perteneciente al sector metal-mecánico. En la actualidad dicha planificación se lleva a cabo en
forma manual e intuitiva, si se refiere a las estimaciones de tiempo, por ejemplo, y está a cargo de funcionarios
expertos en la producción de los bienes.
El modo en que la empresa elabora los productos es a pedido, es decir, no se produce stock, sino que son
elaborados a medida que los clientes efectúan sus pedidos. La empresa dispone de un grupo de personas cuya
función es recopilar las órdenes de trabajo, coherentemente con el movimiento de la empresa, lo que a su vez está
asociado a su tamaño. Una vez efectuado el contrato de negocio con los clientes, la empresa adquiere el compromiso
de entregar los productos en un cierto plazo y bajo ciertas condiciones de acuerdo al contrato original; dichas
condiciones quedan especificadas en una orden de trabajo.
Desde el punto de vista de la producción, la empresa puede dividirse en seis unidades que se ordenan de acuerdo
a la disposición mostrada en la figura 1, que representa el diagrama general de la fase de producción llevada a cabo
por la empresa.
Fabricación
de modelos
Moldeo
Fusión y
preparación
de aleación
Limpieza y
Rebabado
Tratamiento
Térmico y
Terminación
Mecanizado
de piezas
Figura 1. Diagrama General de la Fase de Producción
Si bien es cierto la elaboración de cualquier producto sigue el orden señalado en la figura 1, ésta no
necesariamente debe considerar los seis procesos. Además, con el objeto de cumplir con los plazos estipulados la
empresa puede tomar la decisión de subcontratar procesos a otras empresas, lo que ocurre en dos situaciones
definidas: falta de tiempo para efectuar el proceso (recursos no disponibles) o falta de maquinaria (recursos no
existentes). Al generar una orden de trabajo puede quedar especificado, a priori, qué partes del proceso se van a
subcontratar o bien dicha decisión puede ser tomada sobre la marcha bajo consideraciones de fecha de entrega, por
sobrecarga de trabajo en alguna sección o si el costo de subcontratar es menor que el costo de realizarlo en la
empresa. Si el precio de la subcontratación es mayor al estipulado, la diferencia debe ser asumida por la empresa.
Los procesos que pueden subcontratarse son tres: Mecanizado, Modelo y Tratamiento térmico.
3. El proyecto
En la actualidad no existen herramientas que se sustenten en la inteligencia artificial para encontrar soluciones
en la planificación de la producción para las Pymes. Existe en este sector la creencia de que cualquier sistema
computacional implica una alta inversión, lo que suele ser efectivo en el caso de software distribuido por grandes
compañías comerciales. Aunque el mercado ofrece, en general, múltiples soluciones software para resolver
problemas del sector productivo, no se consigue satisfacer las necesidades de las empresas pues son aplicaciones de
tipo general y no se amoldan a una realidad particular. Elaborar una herramienta que cumpla estas características es
factible, de bajo costo y puede requerir pocos recursos operacionales.
En consecuencia, los objetivos generales planteados para el proyecto son dos; primero diseñar un modelo
algorítmico modificable que se adapte a los cambios en el medio empresarial productivo de modo de adecuarse a
diferentes realidades dentro de una familia acotada, por ejemplo empresas del sector metal-mecánico; y segundo,
construir un software que se apoye en los algoritmos genéticos para optimizar un sistema de producción
manufacturero.
En resumen, se debe construir un software que permita la planificación de las órdenes de trabajo en una
fundición, bajo el criterio de la optimización de los tiempos de producción, o sea, se busca minimizar el tiempo total
de producción. Para ello, el software debe generar como respuesta una planificación lo suficientemente clara para
que los usuarios puedan entenderla y ponerla en práctica con un esfuerzo mínimo.
4. Propuesta de solución
Los algoritmos genéticos corresponden a una técnica de la inteligencia artificial, constituyendo un mecanismo
interesante para encontrar soluciones aproximadamente óptimas a problemas de optimización, con base en los
principios de la herencia y la evolución de las especies.
En la década del 70, Holland [Holl95] planteó la posibilidad de incorporar los mecanismos naturales de
selección y supervivencia de las especies para resolver una gran cantidad de problemas asociados al área de
inteligencia artificial que habían sido resueltos de manera muy eficiente por la naturaleza pero que resultaban un
desastre al abordarlos a través de computadores. Para una descripción más detallada de los principios, terminología
usada y aplicaciones en el contexto de los algoritmos genéticos, es posible referirse a [Bell96, Gold89, Holl95,
Mich96, Mitc96, Vose99].
La solución al problema consiste en una calendarización factible de las etapas productivas que debe efectuar la
empresa (fundición) para elaborar un determinado número de productos, más una asignación de recursos apropiados
para la realización de las etapas. El objetivo ya enunciado es optimizar el tiempo que toma la elaboración de la
totalidad de los productos, el cual se espera sea el menor posible.
Desde el punto de vista de la implementación utilizando algoritmos genéticos, la estructura del cromosoma debe
admitir cualquier configuración posible, por esta razón debe contener las n Etapas de producción, pues corresponden
a la mayor configuración (representando el paso de un producto por todas las etapas de producción). Cada etapa y
cada recurso asignado corresponderán a un gen del cromosoma. Si un producto no realiza una o más etapas, éstas
deberán codificarse con un valor tal (típicamente nulo) que no sean consideradas en la asignación de recursos. La
estructura del cromosoma se muestra en la figura 2, a continuación.
Etapa 1 R 1j
Etapa… R…
Etapa k R kj
Etapa… R…
Etapa n R nj
Figura 2. Estructura o Genotipo del Cromosoma
La estructura solución está compuesta por un total de n genes (largo fijo del cromosoma), los cuales contienen
los datos asociados a las n posibles etapas de producción y a sus respectivos recursos asignados.
En la figura 2, el recurso R1j asignado a la Etapa1 representa a cualquier recurso del tipo R1 que se encuentre
disponible en el momento de la asignación. La Etapak representa a una etapa intermedia cualquiera con su respectivo
recurso Rkj. Las etapas y recursos sin subíndices y con puntos suspensivos representan un sinnúmero de etapas y
recursos que podrían formar parte del cromosoma. Esto dependerá directamente de la cantidad n de etapas de
producción llevadas a cabo por la empresa.
Los valores que puede tomar cada gen (alelos) corresponden a: una cantidad de tiempo t, una hora de inicio h i,
una fecha de inicio fi, una hora de término ht, una fecha de término ft y un recurso Rkj. Los valores considerados para
las etapas y recursos se explicitan en términos de rangos con mayor precisión en la Tabla 1 a continuación.
Tipo de Valor
Datos
Rango
Cantidad de tiempo t
t ∈ Z + ∪ { 0}
Hora de Inicio hi
hi = (hhi , mmi ) / hhi , mmi ∈ Z + ∪ { 0}
Fecha de Inicio fi
f i = (d i , mi , a i ) / d i , mi , ai ∈ Z + ∪ { 0}
Hora de Término ht
ht = ( hht , mmt ) / hht , mmt ∈ Z + ∪ { 0}
Fecha de Término ft
f t = (d t , mt , at ) / d t , mt , at ∈ Z + ∪ { 0}
Recurso Rkj
Rkj ∈ Rk , j = 1..m , m = Rk
Etapas
Recursos
Tabla 1. Alelos correspondientes a cada gen
El valor del subíndice k para Rkj es igual al valor del subíndice de la etapa del gen al que pertenece. Por ejemplo,
si el valor del Recurso contenido en un gen es R23, este gen debe contener a la Etapa2.
La figura 3 presenta un ejemplo de cromosoma para la empresa considerando un proceso productivo que consta
solamente de 5 etapas.
Etapa1 Etapa2
20 R 15
Locus:
1
Etapa3
25 R21
2
Etapa4
60 R 32
3
Etapa5
95 R41
4
33 R 52
5
Figura 3. Ejemplo de Cromosoma para un Proceso Productivo de 5 Etapas
Como se puede apreciar, el total de genes es 5, que equivale al número de etapas. Con respecto a los
datos, sólo se ha incluido el tiempo de duración de cada etapa y el recurso asignado. La unidad de medida, para
el caso del tiempo, se considerará como minutos. Los valores de cada uno de los genes pueden variar dentro de
los dominios permitidos, no así la estructura del gen que será siempre la misma para cada ubicación (locus) y
para cualquier cromosoma.
4.1 Aspectos técnicos de la solución
La cantidad de individuos (cromosomas) en la población inicial se elige como la cantidad k de productos
a elaborar en un intervalo de tiempo determinado. Los tiempos asociados a cada gen son especificados por el
usuario mientras que la asignación de recursos será responsabilidad del sistema construido. Un recurso puede
tener dos estados posibles: libre u ocupado; las transiciones entre uno y otro estado dependen del tiempo que
tome una etapa en la utilización del recurso (lo que es identificado como la hora de su liberación). La hora de
liberación del recurso se acompaña de la fecha, pues es posible que la utilización de un recurso particular se
prolongue por más de un día.
Al momento de iniciar la planificación, se considera que todos los recursos se encuentran disponibles.
Además, dado que la empresa tiene un horario de trabajo determinado, los recursos están disponibles al inicio de
la jornada laboral en la fecha en que se hace la planificación. La población inicial es una solución arbitraria,
factible, ordenando los productos en filas y realizando la atribución de recursos por columnas, con el criterio de
asignar al producto bajo consideración el primer recurso disponible.
En el caso bajo estudio, es la población completa la que representa una solución al problema y no cada
uno de los cromosomas particulares. Esto porque cada individuo representa una calendarización particular para
ese producto, mientras que el conjunto de individuos representa la calendarización total de la población en una
fecha determinada; así, cada nueva población es también una nueva propuesta de solución.
Con lo anterior, resulta relativamente sencillo determinar el fitness, el que es expresado como
Fitness(P(t)) = tf (xtjn) – ti (xti1)
donde tf representa el tiempo de finalización del proceso correspondiente al gen n del producto xtj (último
producto en terminar su elaboración) y ti representa al tiempo de inicio del proceso correspondiente al gen 1 del
producto xti (primer producto en iniciar su elaboración). El superíndice t identifica la generación. Evidentemente
las mejores soluciones son las que tienen un valor de fitness menor.
El fitness aplicado a la evaluación de cromosomas particulares considera como criterio el tiempo de
elaboración de un producto. La comparación entre individuos no es factible si se trata de individuos que difieren
en sus etapas productivas (por ejemplo, comparar un producto que tenga mecanizado con otro que no lo
contemple), pero el fitness individual entrega información del tiempo de elaboración del producto individual y
aquellos cuyo tiempo de elaboración es mayor son de alguna forma castigados. El método para seleccionar
individuos aptos para el cruzamiento es el método ruleta [Mitc96], generando las probabilidades de selección de
acuerdo al mecanismo de evaluación individual recién descrito.
El método de cruzamiento difiere de la forma habitual. Para generar una nueva solución, basta con
modificar los recursos que han sido asignados a cada proceso, por lo que el cruzamiento propuesto es efectuado
dentro de cada configuración (candidata a solución). Así, se intercambian los recursos asignados a procesos del
mismo tipo entre los padres (productos) escogidos para el cruzamiento, lo que es efectuado para cada proceso de
elaboración. La razón de lo anterior es que los métodos tradicionales de cruzamiento llegan a generar soluciones
eventualmente no factibles [Grut02].
Algunas consideraciones a tener en cuenta a la hora de realizar el cruzamiento descrito son las
siguientes:
-
-
Un padre no debe ser escogido más de una vez para efectuar el cruzamiento (para evitar considerar
productos duplicados cuando no corresponde).
Una vez escogida la pareja de padres, se decide el cruzamiento en función de la probabilidad de
cruzamiento; si ese valor de probabilidad no es alcanzado, ambos padres pasan intactos a la próxima
generación.
Todos los padres deben cruzarse o pasar intactos a la generación siguiente, pues la nueva generación
debe contemplar todos los productos.
Si un padre no tiene pareja (el caso que se presenta cuando la cantidad de productos es impar), debe
pasar intacto a la generación siguiente.
A medida que vayan reasignándose los recursos a los procesos, se debe asignar fecha y hora de inicio
de cada proceso y se debe modificar la disponibilidad del recurso.
La probabilidad de cruzamiento se establece en 80%, pues es el valor que entregó, para este caso particular,
los mejores resultados.
Además de las particularidades que presenta la solución, se ha omitido la aplicación del operador de
mutación, por su alta posibilidad de generar soluciones no factibles, por una parte, y por otra porque podría
quedar fuera de consideración, por ejemplo, un recurso disponible cuyo uso agilizaría el proceso completo de
producción.
5. Resultados
Para la construcción del software se comenzó con el desarrollo de prototipos que representaban los aspectos
más visibles a los usuarios (entradas, salidas y algunas funcionalidades básicas). Luego se derivó a un modelo
incremental de manera de permitir la incorporación de nuevas funcionalidades. El lenguaje elegido para el
desarrollo es C++ dadas sus propiedades de reutilización y extensibilidad por una parte y a la correspondencia
entre las estructuras utilizadas y los elementos típicamente genéticos, es decir, a la facilidad para representar los
genes mediante una estructura (clase). Para el diseño de la interfaz se escogió C++ Builder, pues provee un
conjunto importante de componentes reutilizables en lenguaje C++ que permiten la creación de ventanas
gráficas, menús desplegables entre otros elementos y funcionalidades. Además, la comunicación entre la
interfaz y el código del programa resulta directa.
Para analizar el desempeño del sistema se usó una familia de pruebas con 15 productos (un producto puede
tener hasta 200 partes). La cantidad de unidades a elaborar por producto fue variable, al igual que los procesos
involucrados en la elaboración de cada uno de ellos. Se consideró además una cantidad variable de
generaciones: 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1500, 2000, 2500 y 3000, con un porcentaje
de probabilidad del operador de cruzamiento entre 60% y 80%.
Las pruebas se realizaron de la siguiente forma: para cada valor que asumía la cantidad de generaciones, se
varió el porcentaje de cruzamiento entre los valores arriba citados, generando un total de 70 situaciones
diferentes (identificadas por su número de generaciones y su porcentaje de cruzamiento), cada situación descrita
fue ejecutada 10 veces.
La figura 4, a continuación, ilustra los mejores valores de fitness obtenidos en las pruebas realizadas para
1000 generaciones, para todos los porcentajes de variación del operador de cruzamiento. En la esquina superior
derecha se encuentra la leyenda que indica el caso representado en cada curva. En la sigla “Gnk_Cnj”, nk
corresponde a la cantidad de generaciones y nj al porcentaje del operador de cruzamiento. Cada curva contiene
diez puntos que representan a los mejores resultados obtenidos por ejecución.
G1000_C60
G1000_C65
G1000_C70
G1000_C75
G1000_C80
Análisis con 1000 Generaciones
46000
Valor del Fitness
44000
42000
40000
38000
36000
34000
32000
0
100
200
300
400
500
600
700
800
900
1000
No. Generación
Figura 4. Resultados obtenidos para 1000 generaciones
Para todas las variaciones del operador de cruzamiento se logra encontrar el mejor valor. Cuando el
porcentaje de cruzamiento es del 80%, el valor se encuentra tempranamente, en la generación 265. De todas
formas, el criterio de detención del algoritmo es la completación del total de generaciones indicadas.
En resumen, los resultados más relevantes son los siguientes. La familia de productos constituyó una
población inicial (de acuerdo a los criterios que corresponden a la forma habitual de operar de los usuarios) con
un fitness igual a 55746. El mejor resultado encontrado es una población cuyo fitness es igual a 36036. Según
lo anterior, se obtiene una mejora de tiempos superior al 30% con respecto a la población inicial.
Por otra parte, los mejores resultados se obtienen a partir de 200 generaciones; para el caso de 100
generaciones las mejoras son menos relevantes. En cuanto al operador de cruzamiento, el resultado mejor
alcanzado se obtiene a partir de un porcentaje de cruzamiento del 70%.
Para el caso de 100 generaciones, el resultado óptimo se encontró en todas las variaciones del porcentaje de
cruzamiento, pero sólo en una de las 10 ejecuciones por cada situación; para el caso de 2500 generaciones el
mejor valor se encuentra hasta en cinco de las diez ejecuciones para un 75% como valor de la probabilidad de
cruzamiento
6. Conclusiones
A simple vista, la función fitness asociada a las soluciones y la función fitness asociada a la selección
de padres no consideran una función de penalidad que represente las eventuales variaciones (típicamente
aumentos) en los tiempos. Dicha función es de gran relevancia cuando se trata del cálculo de tiempos totales,
pues siempre se están produciendo corrimientos en los plazos estimados, debido a que los procesos no tienen un
cambio de etapa instantáneo o bien, existen otros factores que retrasan el inicio de alguna etapa particular. Para
reflejar mejor esta situación, a cada etapa se le ha agregado un porcentaje de tiempo muerto, incorporado al
tiempo total del proceso correspondiente.
El método propuesto para el cruzamiento no permite generar soluciones no factibles y nace como
resultado de la disposición de los cromosomas (productos), pudiendo identificar claramente los procesos de un
mismo tipo que compiten por el uso de recursos de un tipo determinado.
El sistema desarrollado abre las puertas a la tecnología y a los sistemas automatizados dentro de la
empresa en estudio. En la actualidad, la mayoría de las empresas de mediano y pequeño porte, al menos a nivel
de la región, no utiliza sistemas computacionales para apoyar procesos productivos, por lo que se espera un
efecto multiplicador de la experiencia a mediano plazo.
De todas formas, la experiencia global de reducir los tiempos de ejecución de un conjunto de órdenes
de trabajo, en alrededor de un 35%, es un resultado de alto impacto desde el punto de vista del usuario y un
incentivo para profundizar en el uso de técnicas apoyadas por computadores para mejorar los procesos
productivos. Uno de los puntos apreciados por el usuario es el disponer de una herramienta computarizada que,
con un bajo consumo de recursos computacionales (de hecho, no ha habido adquisición de nuevo equipamiento
computacional en la empresa), facilita la planificación de la producción al presentar un abanico de posibilidades
desde las cuales el usuario elige aquella que más se ajuste a sus necesidades.
El sistema desarrollado es naturalmente perfectible. Algunas sugerencias para el trabajo futuro
incluyen la habilitación de nuevos criterios, como por ejemplo priorizar una orden de trabajo particular o
priorizar un cliente. El sistema actualmente considera un máximo de 150 productos involucrados en una
planificación, lo que hasta el momento satisface con holgura las necesidades de la empresa; no obstante al
imaginar la portabilidad del software a otra realidad, posiblemente sería aconsejable levantar la restricción antes
mencionada.
Bibliografía
[Back96]
Back, Thomas. Evolutionary Algorithms in Theory and Practice: Evolution Strategies,
Evolutionary Programming, Genetic Algorithms. Oxford University Press, 1996
[Beat92]
Beaty, Steven J. Genetic Algorithms for Instruction Sequencing and Scheduling. Workshop on
Computer Architecture Technology and Formalism for Computer Science Research and
Applications, Naples, Italy, 1992
[Bell96]
Belew, R. and Mitchell, M. (Eds). Adaptive Individuals in Evolving Populations. Addison Wesley,
1996
[Coel02]
Coello Coello, Carlos; Van Veldhuizen, David; Lamont, Gary. Evolutionary Algorithms for
Solving Multi-Objective Problems (Genetic Algorithms and Evolutionary Computation). Kluwer
Academic Publishers, 2002
[Eibe99]
Eiben E. Ágoston; Hinterding, Robert; Michalewicz, Zbigniew.
Parameter Control in
Evolutionary Algorithms. IEEE Transactions on Evolutionary Computation, Vol. 3, No.2, pp. 124141, 1999
[Forr93]
Forrest, S.; Mitchell, M. What makes a problem hard for a genetic algorithm? Some anomalous
results and their explanation. Machine Learning, 13, pp.285-319, 1993
[Gold89]
Goldberg, David, E. Genetic Algorithms in Search, Optimization and Machine Learning. Addison
Wesley, 1989
[Gref88]
Grefenstett, John. Proceedings of the First International Conference on Genetic Algorithms and
Their Applications. Lea, 1988
[Grut02]
Gruttner, E.; Pinninghoff, M. A. Algoritmos Genéticos en Recorridos Óptimos de Líneas de
Transporte Público. XI Congreso Latino Iberoamericano de Investigación de Operaciones,
Concepción, Chile, 2002
[Hint97]
Hinterding, R.; Michalewicz, Z.; Eiben, A. Adaptation in Evolutionary Computation: A Survey.
Proceedings of the 4th IEEE International Conference on Evolutionary Computation, Indianapolis,
pp. 65-69, 1997
[Holl95]
Holland, John. Adaptation in Natural and Artificial Systems. MIT Press edition, Fourth Printing,
1995
[Pine95]
Pinedo, Michael. Scheduling. Theory, Algorithms and Systems. Prentice Hall, 1995
[Mich96]
Michalewicz, Zbigniew. Genetic Algorithms + Data Structures = Evolution Programs. Springer
Verlag, 1996
[Mich00]
Michalewicz, Zbigniew. How to Solve It: Modern Heuristics. Springer Verlag, 2000
[Mitc96]
Mitchell, Melanie. An Introduction to Genetic Algorithms, Cambridge, MA: MIT Press, 1996
[Verg02]
Vergara, F.E., Khouja, M.; Michalewicz, Z. An Evolutionary Algorithm for Optimizing Material
Flow in Supply Chains. Computer & Industrial Engineering, Vol.43, pp. 407-421, 2002
[Vose99]
Vose, Michael D. The Simple Genetic Algorithm: Foundations and Theory (Complex Adaptive
Systems). Bradford Books, 1999
Descargar