paper

Anuncio
Especificación PDDL de un Dominio de Ensamblaje*
1
2
2
A. Márquez , C. Del Valle , R. M. Gasca , M. Toro
2
1
Depto. Ingeniería Electrónica, Sistemas Informáticos y Automática,
Universidad de Huelva, [email protected]
2
Depto. Lenguajes y Sistemas Informáticos, Universidad de Sevilla,
{carmelo,gasca,mtoro}@lsi.us.es
Resumen. En este trabajo se presenta la especificación en PDDL 2.2 de un dominio de ensamblaje, que incluye la selección y secuenciamiento óptimo de tareas de montaje en un sistema con varias máquinas. El objetivo del plan es la
minimización del tiempo total del ensamblaje, para lo cual el modelo considera,
además de las duraciones y los recursos utilizados por las tareas, los tiempos
necesarios para el cambio de configuración en las máquinas de ensamblaje, y
los retardos asociados al transporte de submontajes intermedios entre distintas
máquinas. En este trabajo se propone una especificación en PDDL de este dominio, así como una crítica sobre algunos inconvenientes y carencias que este
lenguaje presenta a la hora de describir las posibles condiciones iniciales.
1
Introducción
Este trabajo presenta la utilización del lenguaje PDDL2.2 [1], una extensión de PDDL
(Planning Domain Description Language) [2][3], para la especificación del dominio
asociado al problema de la selección y secuenciamiento de tareas de ensamblaje, un
problema de planificación más complejo que otros que han sido estudiados ampliamente en la literatura, como el problema de Job Shop Scheduling [4], ya que, aparte
de requerir la búsqueda de una ordenación óptima de las tareas de montaje, como sucede en los otros, es necesario seleccionar las propias tareas de entre un conjunto de
planes alternativos, y de acuerdo a una serie de restricciones para componer un plan
de ensamblaje factible.
El problema se centra en la selección de tareas y su ordenación óptima, teniendo en
cuenta su ejecución en un sistema simplificado e ideal en cuanto a movimiento, de
múltiples máquinas. El objetivo es la minimización del tiempo total del ensamblaje
(makespan) [5][6][7] para lo cual han sido considerados todos los factores que pueden
tener influencia en este sistema simplificado: una estimación de la duración de las tareas, los recursos usados por éstas (máquina y configuración), así como una estimación del tiempo necesario para realizar operaciones auxiliares, como el transporte de
submontajes intermedios y el cambio de configuración en las máquinas, los cuales son
del mismo orden que el tiempo de ejecución de las tareas de ensamblaje, por lo que no
deben despreciarse.
*
Este trabajo ha sido parcialmente financiado por el MCyT con el proyecto TIC2001-4936-E
El resto del artículo se estructura de la siguiente manera: en la sección 2 se describe el problema de la selección de secuencias de ensamblaje. En la sección 3 se describe el dominio del problema y en la sección 4 se realiza la descripción de un problema
concreto usando PDDL y se comentan los problemas que conlleva. Finalmente en la
sección 5 se exponen las conclusiones y en el anexo se muestra el listado completo
del dominio en PDDL, así como la descripción de un problema concreto.
2
Descripción y Representación del Problema
Una forma habitual de describir y representar el conjunto de todos los planes de ensamblaje factibles es mediante grafos And/Or [8] como el mostrado en la figura 1. En dicho grafo, cada plan de montaje tiene asociado un árbol de ensamblaje, que contiene
un conjunto de tareas suficientes para ensamblar el producto completo, y que recoge
las restricciones de precedencia entre las tareas. En tal representación, los nodos Or se
corresponden con submontajes, siendo el nodo raíz el que hace referencia al producto
completo, y los nodos hoja a las piezas individuales. Cada nodo And se corresponde
con la tarea de montaje que une los submontajes de sus nodos hijos (habitualmente
dos, que es lo que aquí se considerará) produciendo el submontaje de su nodo padre.
ABCDE
M2
C 4 T1
5
5
T2
M1
C2
ABCD
M2
M1
C 4 T3 3 C 1 T4 7
ACD
M2
M1
C 3 T5 1 C 2 T6 8
AB
AC
M1
M2
5 T7 C 9 T8 C
1
3
A
B
AD
CD
M1
M2
3 T9
C 2 2 T10 C 4
C
BE
M2
4 T11 C
3
D
E
Fig. 1. Grafo And/Or para el producto ABCDE.
En la figura 1, para cada posible tarea T (nodo And) de montaje se indica su duración
dur(T), máquina donde se ejecuta M(T) y configuración utilizada C(T).
El problema planteado es la selección de un plan de montaje, uno de los árboles
que componen el grafo And/Or, y el secuenciamiento de las tareas que lo componen,
sujetas a las relaciones de precedencia de tareas impuestas por el árbol y a la utilización de recursos compartidos de uso exclusivo. El objetivo es la minimización del
tiempo total del ensamblaje en un sistema con varias máquinas de ensamblaje, por lo
que se han considerado aquellos factores que pueden influir en tal medida. Para ello,
se parte de una estimación previa de los recursos necesarios (máquina y configuración) y duración aproximada de todas las tareas de montaje correspondientes a los nodos And. Además consideraremos el tiempo necesario para realizar otras operaciones
auxiliares, como el transporte de submontajes intermedios de una máquina a otra, así
como el tiempo necesario para realizar cambios de configuración en las máquinas, los
cuales son del mismo orden que el tiempo de ejecución de las tareas de ensamblaje,
por lo que no deben despreciarse.
Denotaremos por ∆cht(M, C, C') el tiempo necesario para cambiar la configuración
de la máquina M de C a C'. Denotaremos mediante ∆mov(SA, M, M') el retardo asociado
al transporte del submontaje SA desde la máquina M hacia la máquina M' (un submontaje intermedio podría ser ensamblado en una máquina y ser requerido a continuación en
otra distinta para formar otro submontaje).
3
Descripción del dominio
El lenguaje para modelar dominios PDDL2.2 [1] es una extensión de PDDL (Planning
Domain Description Language) [2][3], un estándar para la representación de dominios
de modelos de planificación. PDDL es un lenguaje centrado en acciones, pensado para expresar lo físico de un dominio, es decir, los predicados que hay, las acciones que
son posible realizar, la estructura de las acciones y los efectos que las acciones tienen.
Su sintaxis, inspirada en Lisp, expresa la familiar semántica de las acciones, usando
pre y post condiciones que describen la aplicabilidad y el efecto de las acciones.
Como comentamos en la sección anterior, el objetivo del problema planteado es la
selección y secuenciamiento de las tareas del plan de montaje que minimice el tiempo
total del ensamblaje, sujetas a las relaciones de precedencia de tareas impuestas por el
plan y a la utilización de recursos compartidos de uso exclusivo. Para modelar el problema, debemos tener en cuenta las siguientes restricciones:
-
-
Para poder realizar una tarea de montaje, cada máquina necesita tener una configuración determinada, así como tener en su entorno los submontajes con los
que formará el submontaje superior.
Cada tarea de montaje tiene una duración determinada, que depende de la máquina donde se ejecuta, de la configuración de dicha máquina, así como de los
submontajes que intervienen en el proceso de montaje.
Para cambiar de configuración, la máquina no debe estar ocupada. El tiempo
que tarda el cambio configuración depende de la máquina, de la configuración
original que tenía y de la nueva configuración.
Una vez que un submontaje ha sido montado, éste puede ser utilizado inmediatamente en la máquina en la que se ha creado. Si dicho montaje se requiere
en otra máquina diferente hay un retardo de tiempo asociado al traslado del
submontaje de la máquina origen a la máquina destino.
Una vez que un submontaje se ha realizado, la máquina puede inmediatamente, o bien comenzar una nueva tarea de montaje (si los submontajes están en su
entorno y la configuración a utilizar es la misma), o bien cambiar la configuración que tiene (para realizar otro tipo de montaje diferente).
Las entidades (clases) que intervienen en el problema incluyen máquinas (recursos
de uso exclusivo), configuraciones y submontajes. Cada entidad es descrita por un
identificador (ej. M1, C2, ABCDE) y uno o más predicados y/o funciones que son fijados bien en el estado inicial que es dado al planificador, bien por los efectos de las
acciones instanciadas del plan.
3.1
Predicados y funciones
Esta sección presenta una descripción de los predicados y funciones presentes en la
descripción PDDL del dominio del problema.
Los predicados son los siguientes:
Predicado
(is-built ?sub - subassembly)
(at ?sub - subassembly
?obj - location)
(has-config ?mach - resource
?conf - configuration)
(task ?sub1 ?sub2 ?result - subassembly
?mach - resource
?conf - configuration)
Descripción
El submontaje ha sido creado y aún no
forma parte de un submontaje mayor
El submontaje sub está en el entorno
de obj
La máquina mach tiene la configuración conf
Existe una tarea que se ejecuta en la
máquina mach con la configuración
conf y que une sub1 y sub2 para formar result
Las funciones son los siguientes:
Función
(cht ?M - resource
?C1 ?C2 - configuration)
(mov ?S - subassembly
?L1 ?L2 - location)
(length ?sub1 ?sub2 ?result - subassembly
?mach - resource
?conf - configuration)
3.2
Descripción
Tiempo que tarda en reconfigurarse (de
C1 a C2) la máquina M
Tiempo que se tarda en trasladar el
submontaje S de la máquina L1 a la L2
Duración de la tarea que se ejecuta en
la máquina mach con la configuración
conf, que forma result con sub1 y sub2
Descripción de las acciones del dominio
Una vez presentado el problema y descrito su dominio, así como las predicados y
funciones que usaremos en la descripción, pasaremos a comentar las acciones que
usaremos para describir el problema.
Como comentamos en la sección anterior, para poder realizar una tarea de montaje,
cada máquina necesita tener una configuración determinada y tener en su entorno los
submontajes con los que formará el submontaje superior. Además, cada tarea de
montaje tiene una duración que viene determinada por la máquina donde se ejecuta,
por su configuración, así como por los submontajes que se pretenden ensamblar. Por
otro lado, una vez que una tarea ha terminado, el submontaje formado puede ser utilizado inmediatamente en la misma máquina en la que se ha creado, o bien la máquina
pueda realizar inmediatamente otra actividad (ya sea un nuevo montaje o un cambio
de configuración para futuros montajes).
Para describir este comportamiento, en la figura 2 se define la acción que modela
la realización de una determinada tarea de montaje:
(:durative-action MAKE-SUBASSEMBLY
:parameters (?sub1 ?sub2 ?result - subassembly
?mach - resource ?conf - configuration)
:duration (= ?duration
(length ?sub1 ?sub2 ?result ?mach ?conf))
:condition
(and (at start (at ?sub1 ?mach))
(at start (at ?sub2 ?mach))
(over all (at ?sub1 ?mach))
(over all (at ?sub2 ?mach))
(at start (has-config ?mach ?conf))
(over all (has-config ?mach ?conf))
(at start
(task ?sub1 ?sub2 ?result ?mach ?conf)))
:effect
(and (at end (not (at ?sub1 ?mach)))
(at end (not (at ?sub2 ?mach)))
(at end (at ?result ?mach))))
Fig. 2. Descripción de la acción que modela la realización de una tarea de montaje
Nótese que en nuestra definición de MAKE-SUBASSEMBLY hemos impuesto
que para que la tarea de montaje se pueda realizar, la condición (at ?sub ?mach) debe
cumplirse al comienzo de la acción (el momento en el que la acción es aplicada) y debe mantenerse invariante durante toda la ejecución de la acción, a fin de impedir que
cualquier acción que se ejecute de forma concurrente pueda hacer uso de dichos submontajes durante el tiempo que dura el proceso de montaje. Por la misma razón la
condición (has-config ?mach ?conf) debe cumplirse al inicio, para que la acción pueda ser aplicada, y debe mantenerse invariante durante la ejecución de la acción, para
modelar el hecho de que durante la ejecución de una determinada tarea, la configuración de la máquina no puede ser modificada. El hecho de no imponer que esta condición se cumpla al final de la acción (at end) permite que la máquina pueda cambiar la
configuración que tiene simultáneamente a la terminación de la tarea de montaje.
Como es lógico, la consecuencia de realizar la tarea de montaje es que al terminar
dicha tarea (at end) el submontaje resultante está disponible de forma inmediata (bien
para comenzar una nueva tarea de montaje, bien para trasladarla a otra máquina) y los
submontajes que intervinieron en el proceso desaparecen.
Una vez que el submontaje se ha completado, puede que sea necesario trasladarlo a
otra máquina (un submontaje intermedio podría ser ensamblado en una máquina y ser
requerido a continuación en otra distinta para formar otro submontaje). El traslado no se
realiza de forma inmediata sino que hay un retardo ∆mov(SA, M, M') asociado al transporte del submontaje SA desde la máquina M hacia la máquina M'.
La modelización de esta acción viene dada en la siguiente figura:
(:durative-action MOVE-SUBASSEMBLY
:parameters (?sub - subassembly ?M1 ?M2 - location)
:duration (= ?duration (mov ?sub ?M1 ?M2))
:condition (at start (at ?sub ?M1))
:effect (and (at start (not (at ?sub ?M1)))
(at end (at ?sub ?M2))))
Fig. 3. Acción que modela el traslado de un submontaje de una máquina a otra
Como podemos comprobar para que la acción pueda ser realizada, al inicio el submontaje debe estar en la máquina origen. Una vez que la acción empieza a ejecutarse
el efecto inmediato es que el submontaje deja de estar en la máquina origen. Con ello
evitamos que otra acción que se ejecute de forma concurrente haga uso de ese submontaje durante el tiempo que dura el traslado. Es decir, una vez que un submontaje
empieza a trasladarse, ninguna acción puede actuar sobre él. La duración del traslado
depende del submontaje a mover, así como de las máquinas origen y destino. La función (mov ?sub ?M1 ?M2) devuelve cuál es dicha duración. Como es lógico, al final
de la acción el submontaje se encontrará en la máquina destino.
Para que una máquina pueda realizar un determinado montaje puede ser necesario
realizar un cambio en la configuración de ésta. Para ello, la máquina debe estar libre
(no debe estar realizando ninguna tarea de montaje) y debe permanecer así durante
todo el tiempo que dura dicho cambio de configuración. ∆cht(M, C, C') denota el tiempo necesario para cambiar la configuración de la máquina M de C a C'.
La acción que modela dicho comportamiento viene dado en la figura 4:
(:durative-action CHANGE-CONFIGURATION
:parameters (?mach - resource ?C1 ?C2 - configuration)
:duration (= ?duration (cht ?mach ?C1 ?C2))
:condition (at start (has-config ?mach ?C1))
:effect (and (at start (not (has-config ?mach ?C1)))
(at end (has-config ?mach ?C2))))
Fig. 4. Acción que modela el cambio de configuración en una máquina
El esquema es muy parecido al de la acción anterior, extrapolado a la configuración: para que la acción pueda ejecutarse la máquina debe tener la configuración inicial. Una vez que comienza el cambio de configuración, la máquina de forma inmediata deja de tener la configuración inicial y al final de la acción pasa a tener la nueva
configuración. La duración de la acción depende de la máquina y de la configuración
inicial y final. La función (cht ?mach ?C1 ?C2) devuelve dicha duración.
De esta forma evitamos que, durante el tiempo que dura el cambio de configuración, otra acción que se ejecuta de forma concurrente pueda ser realizada (si recordamos, la otra acción que actúa sobre la máquina es la de crear un submontaje, la cual
tiene impuesta como condición invariante que durante la ejecución de la tarea de
montaje la configuración no puede variar).
4
Descripción de un problema concreto usando PDDL
En PDDL hay una clara separación entre la descripción de las acciones parametrizadas que caracterizan el comportamiento del dominio (domain) y la descripción de los
objetos específicos, condiciones iniciales y objetivos que caracterizan un problema
concreto (problem). Así un problema de planificación es creado emparejando la descripción del dominio con la descripción del problema. La misma descripción del dominio puede ser emparejada con diferentes descripciones del problema obteniéndose
así diferentes problemas de planificación sobre el mismo dominio.
Una vez que hemos definido el dominio del problema y su comportamiento, vamos
a describir un problema de planificación concreto. Para ello nos basaremos en el problema representado en el grafo And/Or de la figura 1. Como podemos observar en dicho grafo aparecen 2 máquinas de ensamblaje (M1 y M2), 4 posibles configuraciones
para ellas (C1, C2, C3 y C4), y un total de 13 submontajes (siendo A, B, C, D, E las piezas individuales y ABCDE el producto completo).
Una de las carencias que presenta PDDL es que no admite disyunciones en la descripción del estado inicial asociado a un problema concreto, para permitir que éste no
sea único, sino múltiple. Debido a esto y teniendo en cuenta que nuestro objetivo es
obtener la secuencia de montaje que minimize el makespan, así como el estado inicial
que nos lleva a ese óptimo, nos vemos obligados para subsanar esa carencia a introducir en el problema una serie de objetos y entidades ficticias: una configuración ficticia
C0 que modela el hecho que la máquina se encuentra en cualquiera de las configuraciones posibles y un objeto NOTHING para modelar el hecho que un submontaje se
puede encontrar en cualquiera de las máquinas posibles que existen en el problema.
(define (problem probAssembly) (:domain assembly)
(:objects
M1 M2 - resource
C0 C1 C2 C3 C4 - configuration
A B C D E AB AC AD CD BE ACD ABCD ABCDE
- subassembly
NOTHING - warehouse ; indica que no esta asociado
)
; a ninguna maquina concreta
Fig. 5. Definición de los objetos del problema representado en el grafo And/Or de la figura 1
Inicialmente, las piezas individuales (que queremos modelar que pueden estar en
cualquiera de las máquinas de montajes) estarán en NOTHING, y las máquinas (que
queremos que puedan tener cualquiera de las posibles configuraciones) tendrán la
configuración C0.
; las piezas no estan en ninguna maquina concreta
(at A NOTHING) (at B NOTHING) (at C NOTHING)
(at D NOTHING) (at E NOTHING)
(has-config M1 C0) ; las maquinas M1 y M2 tienen
(has-config M2 C0) ; cualquier configuracion
Fig. 6. Ubicación de los submontajes y configuración inicial de las máquinas
Finalmente, indicamos que la duración del cambio de configuración en las máquinas es 0 cuando la configuración actual es la C0 y que el retardo asociado al traslado
de submontajes es igualmente 0 cuando se realiza desde NOTHING.
(=
(=
(=
(=
(=
(=
(cht
(cht
(mov
(mov
(mov
(mov
M1 C0 C1)
M2 C0 C1)
A NOTHING
B NOTHING
C NOTHING
D NOTHING
0) (= (cht M1 C0
0) (= (cht M2 C0
M2) 0) (= (mov A
M2) 0) (= (mov C
M2) 0) (= (mov D
M2) 0) (= (mov E
C2) 0)
C2) 0)
NOTHING
NOTHING
NOTHING
NOTHING
M1)
M1)
M1)
M2)
0)
0)
0)
0)
Fig. 7. El cambio de configuración y traslado de submontajes tarda 0 para los objetos ficticios
De esta forma el planificador puede pasar a cualquiera de los posibles estados iniciales sin que haya transcurrido tiempo.
Otra de las carencias que presenta el PDDL en la descripción del estado inicial, es
que, aparte de no permitir disyunciones en la especificación del estado inicial, obliga
a la enumeración de todos los predicados y funciones que se instancian en el problema, lo cual resulta muy tedioso y poco práctico. Sería aconsejable que se permitiera el
uso de (for all) y (when) para poder hacer referencia a instancias de predicados y funciones de forma más genérica evitando tener que hacer una enumeración exhaustiva.
5
Conclusiones
En el presente trabajo se presenta la especificación en PDDL 2.2 de un dominio de
ensamblaje, que incluye la selección y secuenciamiento óptimo de tareas de montaje
teniendo en cuenta su ejecución en un sistema simplificado e ideal en cuanto a movimiento, de múltiples máquinas y cuyo objetivo es la minimización del tiempo total del
ensamblaje.
Como hemos podido comprobar, en PDDL hay una clara separación entre la descripción de las acciones parametrizadas que caracterizan el comportamiento del dominio (domain) y la descripción de los objetos específicos, condiciones iniciales y
objetivos que caracterizan un problema concreto (problem).
Si bien en cuanto a la descripción del dominio creemos que PDDL es lo suficientemente robusto para modelar el comportamiento, pensamos que el lenguaje presenta
ciertas carencias a la hora de poder expresar el estado inicial y los objetivos a alcanzar
en ciertos tipos de problemas, como son la imposibilidad de indicar un estado inicial
múltiple que permita no sólo minimizar la función objetivo, sino calcular cuál es el
estado inicial que nos permite alcanzar dicha función objetivo.
Por otro lado el lenguaje es poco flexible a la hora de instanciar los predicados y
funciones que describen el estado inicial de un problema, lo cual resulta tedioso y poco práctico, por lo que creemos que sería aconsejable que se permitiera el uso de (for
all) y (when) para poder hacer referencia a instancias de predicado de forma más genérica evitando tener que hacer una enumeración exahustiva.
Aunque actualmente se ha resuelto el problema descrito por este modelo utilizando
un planificador específico [6][7], en un futuro se pretende generalizar para otros problemas conjuntos de planificación y scheduling.
Referencias
1. S. Edelkamp and J. Hoffmann. PDDL2.2: The Language for the Classical Part of the 4th
International Planning Competition, draft for the use of the IPC-2004 participants.
http://www.informatik.uni-freiburg.de/~hoffmann/ipc-4/DOCS/pddl2.2.ps.gz.
2. McDermott, D., et al.. The PDDL Planning Domain Definition Language. The AIPS-98
Planning Competition Comitee, 1998.
3. M. Fox and D. Long. PDDL 2.1. An extension to PDDL for expressing temporal planning
rd
domains. JAIR, 2003. Special issue on the 3 International Planning Competition, to appear.
4. Y. Caseau and F. Laburthe. Improving Branch and Bound for Jobshop Scheduling with
Constraint Propagation. Proc. 8th Franco-Japanese 4th Franco-Chinese Confrence CCS’95.
5. C. Del Valle and E.F. Camacho. Automatic Assembly Task Assignment for a Multirobot
Environment. Control Engineering Practice, Vol. 4, No. 7, pp. 915-921, 1996.
6. C. Del Valle, M. Toro, E.F. Camacho and R.M. Gasca. A Scheduling Approach to Assembly Sequence Planning. Proceedings of the 2003 IEEE International Symposium on Assembly and Task Planning, pp. 103-108, Besançon, France, July, 2003.
7. C. Del Valle. A. Márquez, R. M. Gasca, M. Toro. On Selecting and Scheduling Assembly
Plans Using Constraint Programming. Knowledge-Based Intelligent Information and Engineering Systems, Lecture Notes in Artificial Intelligence No. 2774, pp. 1329-1336, 2003.
8. L.S. Homem de Mello and A.C. Sanderson. And/Or Graph Representation of Assembly
Plans. IEEE Transactions on Robotics and Automation. Vol. 6, No. 2, pp. 188-199, 1990.
6
Apéndice: Descripción completa del problema en PDDL
6.1
Definición del dominio
(define (domain assembly)
(:requirements
:strips :typing :existential-preconditions
:fluents :durative-actions :derived-predicates)
(:types subassembly location configuration - object
resource warehouse - location)
(:predicates
(is-built ?sub - subassembly)
(at ?sub - subassembly ?obj - location)
(has-config ?mach - resource ?conf - configuration)
(task ?sub1 ?sub2 ?result - subassembly
?mach - resource ?conf - configuration))
(:functions
(cht ?M - resource ?C1 ?C2 - configuration)
(mov ?S - subassembly ?M1 ?M2 - location)
(length ?sub1 ?sub2 ?result - subassembly
?mach -resource ?conf - configuration))
(:derived (is-built ?sub - subassembly)
(exists (?obj - location) (at ?sub ?obj)))
(:durative-action MAKE-SUBASSEMBLY) ; Ver figura 2
(:durative-action CHANGE-CONFIGURATION) ; Ver figura 3
(:durative-action MOVE-SUBASSEMBLY)) ; Ver figura 4
6.2
Definición de un problema (grafo And/Or de la figura 1)
(define (problem probAssembly)
(:domain assembly)
(:objects
M1 M2 - resource C0 C1 C2 C3 C4 - configuration
A B C D E AB AC AD CD BE ACD ABCD ABCDE - subassembly
NOTHING - warehouse )
(:init
; las piezas pueden estar en cualquier maquina
(at A NOTHING) (at B NOTHING) (at C NOTHING)
(at D NOTHING) (at E NOTHING)
; al inicio las maquinas tienen cualquier configuracion
(has-config M1 C0) (has-config M2 C0)
; indicamos todas las tareas de montaje posibles
(task A B AB M2 C3)
(task A C AC M1 C1)
(task A D AD M1 C2)
(task C D CD M2 C4)
(task B E BE M2 C3)
(task AC D ACD M2 C3)
(task C AD ACD M1 C2)
(task AB CD ABCD M2 C4)
(task B ACD ABCD M1 C1) (task ABCD E ABCDE M2 C4)
(task ACD BE ABCDE M1 C2)
; indicamos la duracion de los cambios de configuracion
(= (cht M1 C1 C2) 4)
(= (cht M1 C2 C1) 4)
(= (cht M2 C3 C4) 5)
(= (cht M2 C4 C3) 3)
; el cambio de configuracion desde C0 a Cn es 0
(= (cht M1 C0 C1) 0)
(= (cht M1 C0 C2) 0)
(= (cht M2 C0 C1) 0)
(= (cht M2 C0 C2) 0)
; indicamos la duracion de los traslados de submontajes
(= (mov AC M1 M2) 1)
(= (mov BE M2 M1) 1)
(= (mov ACD M2 M1) 1)
(= (mov ABCD M1 M2) 1)
; los traslados desde NOTHING a Mn son 0
(= (mov A NOTHING M2) 0) (= (mov A NOTHING M1) 0)
(= (mov B NOTHING M2) 0) (= (mov E NOTHING M2) 0)
(= (mov C NOTHING M1) 0) (= (mov C NOTHING M2) 0)
(= (mov D NOTHING M1) 0) (= (mov D NOTHING M2) 0)
; indicamos la duracion de las tareas de montaje
(=(length A B AB M2 C3) 5)(=(length A C AC M1 C1) 9)
(=(length A D AD M1 C2) 3)(=(length C D CD M2 C4) 2)
(=(length B E BE M2 C3) 4)(=(length AC D ACD M2 C3)1)
(=(length C AD ACD M1 C2) 8)
(=(length AB CD ABCD M2 C4) 3)
(=(length B ACD ABCD M1 C1) 7)
(=(length ABCD E ABCDE M2 C4) 5)
(=(length ACD BE ABCDE M1 C2) 5))
; el objetivo es que el producto completo sea creado
(:goal (is-built ABCDE))
; de forma que se minimize el makespan
(:metric minimize (total-time)))
Descargar