Controladores PID de dos grados de libertad y algoritmos genéticos multiobjetivo (página 2)
Enviado por pablo santiago interian acosta
Después de mencionar cada una de las etapas principales de un algoritmo genético simple, conviene presentar de manera esquemática aquellos bloques que intervienen en el proceso genético, así como el orden de ejecución de los mismos. En la siguiente figura se muestra el Algoritmo Genético Simple. [33]
Introducción al Problema Multiobjetivo
Problemas con objetivos múltiples aparecen de forma natural en muchos problemas de optimización y constituyen un área que ha adquirido gran relevancia en el mundo de la Investigación Científica y en aplicaciones de Ingeniería (química, petrolera e industrial en general).
Los problemas donde se desea optimizar varios objetivos en conflicto entre sí, dentro de un espacio de búsqueda, no tienen una solución única. Esto es debido a que, dados dos puntos del espacio de búsqueda, cada uno de ellos puede mejorar al otro con respecto a objetivos diferentes.
La solución de este problema, según la optimización de Pareto, es el conjunto de los puntos del espacio de búsqueda no dominados, llamado conjunto de óptimos de Pareto. Un punto del espacio de búsqueda es no dominado si no existe otro punto en dicho espacio que optimice todos los objetivos deseados a la vez respecto del primero. Se llamara frente de Pareto a los objetivos asociados al conjunto de óptimos de Pareto. A continuación se presentan algunas definiciones, las cuales son necesarias para abordar el estudio de la optimización multiobjetivo.
Algoritmos Genéticos Multiobjetivo.
Los Algoritmos Genéticos Multi-Objetivo (AGMO) han sido utilizados de manera exitosa para resolver problemas de diseño de controladores. [26]
Uno de los primeros algoritmos conocido como" Multiple Objective Genetic Algorithm" (MOGA) fue propuesto por Fonseca [15] como contribución principal de su tesis doctoral. Dicho algoritmo, con algunas variantes, ha sido utilizado en numerosas aplicaciones en el área de control. Por ejemplo, Chaiyaratana & Zalzala [6] utilizaron MOGA para ajustar los parámetros de una estructura híbrida compuesta por una red neuronal RBF y un controlador PID.
Herreros, et al., propusieron el algoritmo" Multi-Objective Robust Control Design" [17] (MRCD) para el diseño de controladores PID multiobjetivo robustos. El MRCD incluye un mecanismo dinámico de adaptación del espacio de búsqueda, para resolver el problema de la determinación del espacio factible. En [41] publicaron una de las pocas monografías disponibles, dedicadas completamente al tema de los algoritmos evolutivos multiobjetivo y sus aplicaciones en las áreas de sistemas de control e investigación de operaciones.
El algoritmo genético trabaja con una población de soluciones potenciales de un problema de optimización. Cada individuo dentro de la población representa una solución particular del problema, generalmente codificada y conocida como cromosoma. La población evoluciona a través de las generaciones para producir mejores soluciones del problema. Cada individuo dentro de la población tiene asignado un valor de aptitud que expresa que tan bueno es éste en la solución del problema. Estos algoritmos utilizan un conjunto de operadores genéticos, los cuales operan estocásticamente sobre la población causando variedad en ella por medio de cruzamiento y mutación. [7-10].
A diferencia de los algoritmos genéticos simples que buscan una solución única, los algoritmos genéticos multiobjetivo tratan de encontrar tantos elementos del conjunto de Pareto como sea posible.
Para esto se deben satisfacer principalmente las siguientes metas:
Convergencia de las soluciones hacia el conjunto de óptimos de Pareto.
Mantener la diversidad en las soluciones dentro del conjunto de óptimos de Pareto.
Normalmente, las metodologías de optimización se concentran en adecuar un conjunto de elementos de manera que se mejore el resultado dado por una función objetivo. Sin embargo, los problemas reales involucran otra serie de objetivos que pueden ser de tanto interés como el que se optimizó, e incluso ser tan relevantes y conflictivos que harían inviable la solución obtenida. La optimización multiobjetivo basada en técnicas evolutivas es una metaheurística que surgió con el fin de resolver este tipo de problemas, caracterizada por ser capaz de obtener un conjunto de soluciones, con los mejores compromisos entre los objetivos optimizados (frente óptimo de Pareto).
Manejo de Restricciones
El espacio de búsqueda S consiste generalmente de dos subespacios: El subespacio factible Z y el subespacio no factible U. La figura 6.14 muestra un espacio posible de búsqueda.
Espacio de búsqueda factible Z
Espacio de búsqueda no factible U
Para los problemas de optimización sin restricciones, todos los individuos son considerados como factibles, pero para los problemas de optimización con restricciones, los individuos factibles y no factibles deben ser distinguidos. La meta es, por lo tanto, encontrar el óptimo global factible. No existe un método general para la manipulación de restricciones. Los métodos más usados son las funciones de penalización. [30]
Un problema de optimización con restricciones, se puede transformar en un problema de optimización sin restricciones por medio de la adición de una función de penalización, lo cual se considera una violación de las restricciones.
El problema de optimización puede ser descrito como:
Donde P(x) es una función de penalización. Si no ocurre ninguna violación de las restricciones, es decir, si todas las restricciones están satisfechas, entonces P(x) se fija a cero; sino; P(x) asume un valor positivo. Generalmente, la función de penalización se define como [10]:
Donde:
Ms es un parámetro de castigo positivo. g+j(x)= máx. (0, gj(x)), para 1=j=m
hi(x), de m+1=i=r
Estos parámetros admiten restricciones usando funciones de penalización, los cuales penalizan o castigan a los individuos no factibles por medio de una reducción de la función de aptitud. La función de aptitud depende de la función objetivo f(x) y de la función de penalización P(x). La función de penalización refleja la violación de las restricciones. La función de penalización como ya se mencionó, castiga a los individuos no factibles, para forzar la optimización en la dirección del subespacio factible.
Se define la función de aptitud f(x) como:
El valor de penalización es cero, si un individuo se encuentra en el espacio factible Z, esto es, si un individuo no viola ninguna restricción, si un individuo está en el espacio de búsqueda S, pero una o más restricciones no se satisfacen, entonces se suma la función de penalización P(x) a la función objetivo, resultando en un valor de aptitud penalizado. Si la función objetivo no es calculable, entonces se asigna el parámetro de penalización Mt, al valor de aptitud.
La Norma H8 Introducción
Antes de la década de 1960, predominaban los métodos de diseño de sistemas de control en el dominio de la frecuencia, como el arreglo de Nyquist (traza polar de Nyquist), las trazas de valores singulares (trazas de Bode) y el lugar geométrico característico (lugar geométrico de las raíces), desarrolladas principalmente por los profesores H. H. Rosembrock y A. G. J. McFarlane, como una extensión de las técnicas de control clásicas para sistemas multivariables.
A principios de la década de 1980, emergió una nueva técnica conocida como Teoría de Control H8, la cual combina ambos enfoques, en el dominio del tiempo y en el de la frecuencia con el fin de proveer una solución unificada. El crédito se le otorga a George Zames por su introducción en el artículo "Feedback and Optimal Sensivity: Model Reference Transformation, Multiple Seminorms, and Approximate Inverses". [43]
El enfoque de H8 tuvo un impacto significativo en el desarrollo de sistemas de control durante las décadas de 1980 y 1990, en la actualidad la técnica ha madurado y sus aplicaciones en problemas industriales son, cada vez mayor.
Notación y terminología
Se utiliza una notación corta para una mejor manipulación de las ecuaciones de diseño. El nombre H8 se refiere a un espacio de funciones de transferencia propias (el grado del polinomio del denominador es mayor o igual al grado del polinomio del numerador) y estables (con polos estrictamente en el semiplano izquierdo), es decir, en lugar de repetir estos requerimientos sólo se dirá que G(s) pertenece a H8. En control H8, el objeto básico de interés es una función de transferencia, de hecho se lleva a cabo un proceso de optimización sobre un espacio de funciones de transferencia, en el que se presupone una función objetivo o de costo por minimizar, por lo que es necesario comparar funciones de transferencia para elegir la mejor.
En el control H8 se comparan funciones de transferencia de acuerdo a su norma-8, la cual se define como:
Nótese que ?G(s)? es igual a la amplitud máxima de la magnitud del diagrama de Bode de G (ésta es finita cuando la función de transferencia es propia y no tiene polos sobre el eje imaginario).
En el control H8, el objetivo es minimizar la norma-8 de una función de transferencia, es decir, en realidad se minimiza el valor pico de la traza de Bode en magnitud (o el valor singular de la traza en el caso MIMO).
Los problemas de control prácticos requieren que se ponderen las entradas y las salidas. Los factores de ponderación constantes se usan en las entradas y las salidas incluso para conversión de unidades. La ponderación en funciones de transferencia se usa para dar forma a algunas medidas de desempeño en el dominio de la frecuencia. En el caso del control H8 las funciones de ponderación se utilizan para satisfacer las condiciones de rango. De hecho las funciones de ponderación son los únicos parámetros que debe especificar el diseñador.
Para problemas de seguimiento y de rechazo a perturbaciones es necesario que la sensibilidad de las funciones de transferencia sea pequeña en el intervalo de baja frecuencia.
De manera similar, se puede especificar que la función de sensibilidad complementaria se mantenga por debajo de un intervalo de alta frecuencia dada por la función de ponderación. [37].
El Algoritmo NSGA-II
El NSGA-II es una versión mejorada del algoritmo NSGA original propuesto por Srinivas N. & K. Deb [40]. Existen algunas referencias previas relacionadas con la aplicación de este algoritmo para el diseño de estructuras PID. Rubén Lagunas (2004) [23] utilizó el NSGA-II para sintonizar trece controladores robustos de estructura PID-ISA de dos grados de libertad. Dupuis, et al., (2004). [13] lo utilizó para diseñar un PID para un motor D.C.
Los objetivos (sobrepaso / tiempo de asentamiento / tiempo pico) se plantearon en función de la diferencia entre la dinámica obtenida durante la simulación y la dinámica deseada. Igualmente, Sánchez, G., Minaya, Villasana, Strefezza, V. (2008) [39] presentaron una comparación entre los resultados obtenidos por NSGA-II y MOGA con respecto al diseño de dos estrategias de control: PID y realimentación de estados.
El algoritmo NSGA-II se caracteriza por las siguientes propiedades:
Utiliza un mecanismo de elitismo.
Utiliza un mecanismo de preservación de la diversidad de la población, basado en privilegiar a los individuos que habiten en las regiones menos pobladas. Este mecanismo no requiere especificar ningún parámetro para su funcionamiento.
El mecanismo de ordenamiento es más rápido comparado con otros algoritmos (MOGA, por ejemplo).
Los padres de la nueva generación y los sobrevivientes son seleccionados mediante un torneo binario de tipo (µ + ?).
La Jerarquización de Pareto
La jerarquización de Pareto adoptada por el NSGA-II consiste en clasificar a los individuos en varias categorías. Dicha clasificación se lleva a cabo de la siguiente forma:
El mecanismo de selección consiste en asignar un rango a cada individuo de la población. En cada iteración i se determinan los individuos no-dominados y se les asigna el rango i a los mismos. A continuación se eliminan los individuos no- dominados de la población actual y se comienza una nueva iteración:
Preservación de la diversidad
Por otro lado, el mecanismo de preservación de diversidad se basa en calcular la suma de las distancias entre individuos adyacentes (crowding distance). Entre dos individuos se prefiere al que tenga menor rango. Si los rangos son iguales, entonces se escoge al que tenga el mayor valor de crowding distance:
Selección
La fortaleza de NSGA-II radica en la forma en que se realiza la selección: al comparar dos individuos se elige al que pertenezca a la jerarquía de Pareto más baja y en caso de que ambos individuos pertenezcan a la misma categoría, entonces se elige a aquel ubicado en una región con menor densidad de población. Dado que la selección se aplica a la unión de padres e hijos, esta es implícitamente elitista, ya que siempre se retendrán los individuos que resulten mejor clasificados, independientemente de la población a la que pertenezcan.
Ciclo completo del NSGA-II
Inicialmente y de manera aleatoria, se crea una población P0. Esta población es ordenada en base al principio de no-dominación. A cada solución se le asigna un valor de bondad (o jerarquía), igual al nivel de su dominación (el nivel 1 es el mejor, el 2 es el siguiente mejor y así sucesivamente). En el procedimiento anterior se aplica el principio de minimización del valor de aptitud. Al principio se aplica el tipo
de selección de torneo (tournament selection) en forma usual, así como los operadores de cruzamiento y mutación, para crear una población de descendientes Q0 de tamaño N. El concepto de elitismo se aplica al comparar a la población actual con la mejor población de individuos no-dominados encontrados previamente. El procedimiento difiere después de producir a la generación inicial, como se describe a continuación con la i-ésima generación.
Primero se obtiene una población formada por Rt = Pt ? Qt de tamaño 2N. Luego, la población Rt es ordenada por niveles de acuerdo a los principios de no-dominación.
Así la combinación de las poblaciones previa y actual en Rt asegura el proceso de elitismo. Después de que son ordenadas, las mejores soluciones pertenecen al conjunto F1 y éstas van a ocupar un papel preponderante durante el proceso. Los siguientes mejores individuos pertenecerán al conjunto F2 y así sucesivamente hasta formar el último frente Fl. Si el tamaño de F1 es menor a N, entonces se deben considerar todos sus elementos para formar una nueva población Pt+1. Los espacios pendientes en la nueva población serán llenados por los subsiguientes niveles no-dominados. Este procedimiento continúa hasta que ningún conjunto más puede ser acomodado. Seguramente que la suma de los conjuntos F1 a Fl es mayor que N. Para solucionar esta situación se ordena en forma descendente el último conjunto Fl usando el operador de crowded-comparison (?n) para seleccionar las mejores soluciones y llenar exactamente el espacio de la nueva población de tamaño N. El NSGA-II se describe gráficamente en la Figura. A la nueva población Pt+1 se le aplican los operadores de selección cruzamiento y mutación para formar una nueva población Qt+1 de tamaño N. Es importante decir que en la técnica de selección de torneo binario se aplica el operador crowded-comparison (?n). Este operador requiere que se conozca la jerarquía y la distancia de agrupamiento (crowded-distance), de cada solución en la población.
Estos últimos valores se calculan mientras se está formando la población Pt+1 como se muestra en el siguiente algoritmo:
Procedimiento completo del NSGA-II (Algoritmo)
Rt = Pt ? Qt; combina padres e hijos de la población
F =ordenamiento rápido no dominado (Rt); F = (F1, F2,…), todos los frentes no dominados de Rt
Pt+1 = Ø; i =1
until |Pt+1| + |Fi| = N; hasta que la población de padres sea llenada
Asignación de la distancia de agrupamiento (Fi); calcula la distancia de agrupamiento en Fi
Pt+1 = Pt+1 ? Fi; incluye el i -ésimo frente no-dominado en la población de padres
i = i +1; revisa el próximo frente para inclusión
sort (Fi, ?n); ordena en forma descendente usando ?n
Pt+1 = Pt+1 ? Fi [(1: (N – |Pt+1|)]; busca los primeros (N – |Pt+1|) elementos de Fi
Qt+1 =reproducción (Pt+1); uso de selección, cruzamiento y mutación para crear la nueva población. Qt+1
t = t +1; incremento del contador de generación.
En esta investigación también se ha mostrado que un algoritmo genético multiobjetivo es una alternativa importante y de gran alcance computacional cuando se trata de resolver problemas de optimización multiobjetivo y por lo tanto es una herramienta confiable en la solución de problemas de control automático.
El algoritmo NSGA-II fue seleccionado en esta tesis, ya que es una herramienta de dominio público y ha sido citado en varios informes relativos a la optimización multiobjetivo evolutiva. Se trata de un algoritmo robusto, de aplicación general y que se puede ejecutar en diferentes plataformas. Los componentes de la función objetivo, así como las restricciones que definen la región factible se formularon en términos de ciertas especificaciones antes mencionadas para obtener un rendimiento de control para el controlador PID de dos grados de libertad.
Se observó que los controladores PID con dos grados de libertad tienen un buen rendimiento en términos de punto de ajuste, mejor estabilidad y mejor respuesta a la perturbación de carga.
[1] Ackermann, J., Blue, P., Bunte, T., Äuvenc, L., Kaesbauer, D, Kordt, M. Muhler, Odenthal, Ä.: Robust Control: The Parameter Space Approach. Springer-Verlag, London (2002)
[2] Alfaro, V. M., Arrieta, O., Vilanova, R., (2009). Control de Dos Grados de Libertad (2-GdL) aplicados al "Benchmark" de Sistemas para Controladores PID. ISSN: 1697-7912. Num. 2, pp. 59.67
[3] Åström K. J., Panagopoulos H. and Hägglund T., (1998). "Design of PI Controllers based on Non-Convex Optimization". Automatica, vol. 34, No. 5, pp. 585-601.
[4] Åström, K. J., Hägglund,T.,(1995). PID Controllers: Theory, Design, and Tuning. Second Edition, Instrument Society of America, Research Triangle Park, NC.
[5] Campos, Delgado, D., and Zhou Kemin., (2003). Mixed £1/H2/H8 control design: Numerical Optimization Approaches. International Journal of Control, vol. 76, no. 7, pp. 687-697.
[6] Chaiyaratana, M., & Zalzala, A., (1999). "Hybridisation of neural networks and genetic algorithms for time-optimal control". Proceedings of the Congress on Evolutionary Computation (CEC).
[7] Coello, Coello, A., Landa Becerra, R., (2003). Evolutionary Multiobjective using a Cultural Algorithm. In 2003 IEEE Swarm Intelligence Symposium, IEEE Service Center, Indianapolis, Indiana, USA, pp. 6-13, April.
[8] Coello, Coello, A., (1999). An Update Survey of Evolutionary-Based Multiobjective Optimization Techniques: State of the Art and Future Trends. In 1999 Congress on Evolutionary Computation, Washington, D.C., IEEE Service Center, pp. 3-13.
[9] Coello, Coello, C., Van Veldhuizen, D., Lamont, G., (2007). Evolutionary Algorithms for Solving Multi-Objective Problems. Springer.
[10] Coello, Coello, C., Van Veldhuizen, D., Lamont, G., (2002). Evolutionary Algorithms for Solving Multi-Objective Problems. Kluwer Academic Publishers.
[11] Cohen, G. H., and Coon, G. A., (1953). Theoretical considerations of retarded control. ASME Transactions 75
[12] Doyle, J., Francis B. A. and Tannenbaum A. R., (1992). "Feedback Control Theory". Macmillan Publishing Company.
[13] Dupuis, et al., (2004). "Multi-Loop PI Tuning Using a Multiobjective Genetic Algorithm". IEEE International Conference on Industrial Technology pp. 1505—1 510.edition, 1992.
[14] Fonseca, C. M., and Fleming, P.J., (1998). "Multiobjective Optimization and Multiple Constraint Handling with Evolutionary Algorithms-Part I: A unified Formulation", IEEE Trans. Syst., Man, Cybern., vol.28, No. 1.pp. 26-37, Jan.
[15] Fonseca., (1995). Multiobjective Genetic Algorithms with Application to Control Engineering Problems, Ph.D. thesis, Departement of Automatic Control and Systems Engineering. University of Sheffield.
[16] Gómez, Ramírez, A. J., (2009). Evaluación de métodos de optimización dirigidos al diseño de controladores tipo Pid, Puerto la Cruz.
[17] Herreros, López, A., (2000). Diseño de controladores Robustos Multiobjetivo por medio de Algoritmos Genéticos. Tesis Doctoral, Departamento de Ingeniería de Sistemas y Automática, Universidad de Valladolid, España.
[18] Herreros,et al., (2001). "Design of PID-type controllers using multiobjective using genetic algorithms". ISA Transactions 4 1 pp. 457—472.
[19] Holland, J., (1992) Adaptation in Natural and Artificial Systems. MIT Press, Second edition.
[20] Horowitz, I. M., (1963). Shynthesis of Feedback Systems. Academic Press.
[21] Kalyanmoy, D., Pratap, A., Agarwal, S., Meyarivan, T., (2002). A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation, vol. 6, No. 2, pp. 182-19.
[22] Kasat, R., Kunzru, D., Saraf, N., Gupta, S., (2002). Multiobjective Optimization of Industrial FCC Units using Elitist Non-dominated Sorting Genetic Algorithms. Ind. Eng. Chem. Res. 41, pp. 4765-4776.
[23] Lagunas, Jiménez, R., (2004). Sintonización de controladores PID mediante un algoritmo genético multiobjetivo (NSGA-II), Tesis Doctoral, Centro de Investigación y de Estudios Avanzados del Instituto Politécnico Nacional, México D.F.
[24] Lagunas, Jiménez, R., Moo, Yam, V., y Ortiz, Moctezuma, B., (2013). Optimización Multiobjetivo mediante Algoritmos Genéticos: Aplicación a Controladores PID Robustos, Programación Matemática y Software Vol. 5. No. 1. ISSN: 2007-3283, pp 32-45.
[25] Lennartson, B. Kristiansson., (1997). Pass Band and High frequency Robustness for PID Control. Control. Conference on Decision & Control, San Diego California.
[26] Liu G.,et al., (2002). Multiobjective Optimisation andControl. Research Studies Press, Baldock, UK.
[27] López, A. M., J. A. Miller, C. L. Smith and P. W. Murrill., (1967). Tuning controllers with error-integral criteria. Instrumentation Technology 14, 57–62.
[28] Martin, J., C. L Smith and A. B. Corripio., (1975). Controller Tuning from Simple Process Models. Instrumentation Technology 22(12), 39–44.
[29] Ming-Tzo Ho and Chia-Yi Lin., (2002). "PID Controller Design for Robust Performance". Proceedings on Decision and Control, Las Vegas, Nevada USA.
[30] Mo Jamshidi L. dos Santos Coelho, R. A. Krohling and P. J. Fleming., (2003). Robust Control Systems with Genetic Algorithms. CRC Press LLC.
[31] Ogata, Katsuhiko., (2010) Ingeniería de Control Moderna 5ed. Pearson Educación, S.A Madrid.
[32] Panagopoulos H., K. J. Åström and T. Hägglund., (1999). "Design of PID Controllers based on Constrained Optimization". Proceedings of the American Control conference, San Diego California.
[33] Pitalúa, Díaz, N., Castro, Peñaloza, U., Ruz, Hernández, J. A., Lagunas, Jiménez, R., (2009). Introducción a los sistemas inteligentes, Mexicali, Baja California: Universidad Autónoma de Baja California; Sonora: Universidad de Sonora, 177 p.
[34] Ponce, P., (2010). Inteligencia Artificial con aplicaciones a la Ingeniería, Primera Edición, Alfaomega Grupo Editor, S.A de C.V, México.
[35] Qing-Guo, W., Chang-Chich, H., Qiang, B.,(1997) "Process Frequency Response Estimation from Relay Feedback". Elsevier Science Ltd, vol. 5, no. 9, pp 1293-1302 84
[36] Rivera, D. E., Morari , M., and Skogestad, S., (1986). Internal Model Control. 4. PID Controller Desing. Ind. Eng. Chem.Des. Dev. 25, 252–265.
[37] Rodríguez R. Francisco J., (2000). H8 ¿Qué es y para qué sirve?, Universidad Nacional Autónoma de México Facultad de Ingeniería, División de Ingeniería Eléctrica, Departamento de Ingeniería de Control.
[38] Rovira, A., Murrill, P. W., and Smith, C. L., (1969). Tuning controllers for setpoint changes. Instrumentation & Control Systems 42, 67–69.
[39] Sánchez, G., Minaya, Villasana, Strefezza, V., (2008).Solving Multi-Objective Linear Control Design Problems Using Genetic Algorithms. Proceedings of the 17th World Congress the International Federation of Automatic Control, Seoul, Korea, pp. 12324-12329.
[40] Srinivas N. & K. Deb., (1994). "Multiobjective Optimization Using Nondominated Sorting in Genetic Algorithms" .Evolutionary Computation. Vol 2. No 3 pp. 221-248.
[41] Tan, K,et al., (2005). Multiobjective Evolutionary Algo-rithms and Applications. Springer-Verlag.
[42] Tantanoid., (2000). Algoritmos Geneticos, IPN.
[43] Zames, G., (1981). "Feddback ando Optimal Sensitivity: Model Reference Transformation, Multiplicative Seminorms, and Approximate Inverses". IEEE Transactions on Automatic Control, AC-26, 301-320.
[44] Zhou K. and Doyle J. C., (1998). "Essentials of Robust Control". Prentice Hall.
[45] Ziegler, G., Nichols, N., (1942). Optimum Settings for Automatic Controllers. Trans.ASME, vol. 64, no. 11, pp 759-768.
Autor:
Pablo Santiago de Atocha Interian Acosta
MAESTRO: Dr. Guadalupe Cu Balan
MATERIA: Elaboración y presentación de textos
Grado y Grupo: 1 "A"
UNIVERSIDAD AUTÓNOMA DE CAMPECHE
FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA
Página anterior | Volver al principio del trabajo | Página siguiente |