Upload
lyminh
View
217
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD AUTONOMA NETROPOLITANA-IZTAPALAPA
128272 PROYECTO DE INVESTIGACION II
CONPILADOR PARA UN LENGUAJE DE SIMILACION
REPORTE FINAL /
A.1 umnos : / Ortega Bonequi Mauricio
Sáinz Bravo ñubén Alfonso
Asesor:
Pedro Luis Flores
Octubre de 1991. / -
J PRESENTACI6N DEL PROYECTO 1 2 8 2 7 2 Debido a la gran importancia que han adquirido las
,computadoras tipo PC en nuestros tiempos, surge también la
necesidad de crear aplicaciones para una gran variedad de temas,
tal es el caso de la dinámica de sistemas.
Para real izar aplicaciones de dinámica de sistemas contamos
con un compilador llamado dynamo cuya principal desventaja radica
en que está diseñado para computadores grandes, además de contar
con un medio ambiente no muy agradable para el usuario.
El presente reporte corresponde a la realización de un
compilador para dinámica de sistemas diseñado para usuarios de PC,
cuenta con las funciones principales que se realizan en un modelo
de simulación, además de tener la facilidad de trabajar en su
propio editor de textos y mediante un medio ambiente a base de
menus. De esta manera se puede elegir entre varias opciones:
Cargar archivo
Guardar archivo
Editar archivo
Desplegar directorio
Cambiar directorio
Renombrar archivo
Compilar
Ejecutar
Llamar al S.O.
Terminar
Al ejecutar un modelo se obtiene una salida gráfica-tabular,
ésta se depliega a pantalla en ventanas separadas correspondiendo
cada variable graficada a una variable tabulada, de tal forma que
para cada gráfica se puede obtener sus correspondientes puntos.
Dentro de la ventana en salida tabular se tiene la facilidad
de desplazarse páginas arriba y abajo de tal manera que se logra
ver todos los puntos asociados 8 una gráfica.
DINMICA DE SISTEMAS
La dinámica de sistemas no es sino una metodología para
construcción de modelos de sistemas sociales, considerando en ésta
clase a sistemas socioeconómicos, sociológicos y psicológicos,
pudiendo aplicar también sus técnicas a sistemas ecológicos. Su
desarrollo se inserta en el intento de establecer técnicas que
permitan expresar en un lenguaje formalizado -el de las
matemáticas- los modelos verbales (mentales) de los sistemas
sociales. La dinámica de sistemas se basa en la teoría de los
servomecanismos que son ingenios cuya caracteristica fundamental
es la existencia en los mismos de una realimentación de
información. Se entiende por realimentación el proceso en virtud
del cual, cuando se actúa sobre un determinado sistema, se
obtiene (realimenta) continuamente información sobre los
resultados de las decisiones tomadas, información que servirá para
tomar las decisiones sucesivas. La teoría de los servomecanismos
tiene dos caracteristicas particularmente interesantes: el estudio
sistemático del concepto de realimentación y un amplio desarrollo
del estudio del comportamiento dinámico de los sistemas, en el
cual se encuentra el gérmen de la noción de sistema dinámico.
Las ideas desarrolladas inicialmente para el estudio de los
servomecanismos se aplicaron inmediatamente a otro tipo de
problemas como por ejemplo la regulación de los procesos químicos.
Posteriormente la fecundidad de las ideas de realimentación y de
sistemas dinámicos indujo a intentar su generalización al estudio
de procesos socioecon6micos ya que todas las organizaciones
Y
- 4 -
sociales o económicas, muestran un comportamiento dinámico y una
fuerte interacción entre sus partes.
Debemos tener en cuenta que la teoría de sistemas tal como se
encuentra desarrollada en la actualidad suministra un útil
analítico suficientemente elaborado para el estudio de los
sistemas lineales. Sin embargo, en el estudio de los sistemas
socioeconómicos debe tenerse especialmente en cuenta la presencia
de no linealidades que determinan, en gran medida, las formas de
comportamiento observadas en la realidad. La consideración de éstas
no linealidades impide, normalmente, una resolución analítica del
modelo, es entonces cuando surge la necesidad de recurrir a un
computador.
El especialista en ciencias sociales rara vez será capaz de
descomponer su sistema en partes ni de experimentar con los
componentes independientemente, pero éste especialista puede, por
otra parte, emplear un procedimiento que, aunque de aparente
categoría inferior, constituye una alternativa posible; consiste
en disponer de una lista de interacciones hipotéticas entre las
variables del sistema e intentar dar validez a éstas relaciones
con ayuda de datos tomados del sistema real. Basandose en éstas
relaciones se construyen modelos que reciben la denominación de
modelos de simulación.
El disponer de un modelo de un sistema social permite
realizar experiencias sobre el mismo. La posibilidad de éstas
experiencias sobre el modelo da lugar a un trabajo similar al
trabajo de laboratorio. Así, por ejemplo se puede estudiar el
- 5 -
comportamiento del sistema bajo circunstancias que raramente se
den en la practica. Con ello se tienen respuestas rápidas y
baratas a cuestiones que, de ser experimentadas en la vida real,
requerirían un enorme costo de dinero y de tiempo.
En lugar de emplearse en las experiencias la realidad misma,
se emplea un modelo de ella. Se observa el comportamiento del
modelo y se realizan experimentos mediante los que se responde a
cuestiones específicas acerca del sistema real que se ha
representado por el modelo. El proceso mediante el cual se
realizan experiencias sobre el modelo, y no sobre la realidad,
recibe la denominación genérica de simulación.
Se puede considerar que' hay dos puntos de vista radicalmente
opuestos en relación al problema del establecimiento de modelos
matemáticos de sistemas sociales. El primero está sustentado por
especialistas que pretenden construir el modelo de un sistema
social partir, fundamentalmente, del procesamiento de datos
"históricos" de evolución del mismo. Es un punto de vista que, en
cierta manera, se puede considerar conductista, porque no trata de
establecer la estructura interna del sistema, sino únicamente
ajustar un modelo a los datos reales que se conocen. A éste
enfoque pertenece la econometría.
Otro punto de vista es aquél según el cual se trata de
construir un modelo tras un análisis cuidadoso y detenido de los
distintos elementos que intervienen en el sistema observado. De
éste análisis cuidadoso se extrae la lógica interna del modelo, y
a partir de la estructura así construida se intenta un ajuste con
- 6 -
los datos históricos.
La dinámica de sistemas pertenece a ésta segunda escuela, a
la que, en cierta forma, cabe considerar estructuralista.
La dinámica de sistemas es una versión especializada, ligada
a Jay U. Forrester. La técnica de Forrester establece una
estructura para el modelo de fácil caracterización gráfica. Para
obtener los valores mas probables tomados por un suceso futuro
normalmente se emplean métodos estadisticos, pero para comprender
la respuesta del sistema a un conjunto de condiciones futuras es
preferible el empleo de la dinámica de sistemas. Asimismo, los
métodos estadísticos son Útiles en estudios a corto plazo,
mientras que los modelos que suministra la dinámica de sistemas
tienen interés para la previsión de las tendencias a largo plazo.
La caracteristica esencial de los sistemas sociales, reside
en la consideración de que en el interior de los mismos se generan
las fuerzas que determinan su evolución en el tiempo, es decir, en
el interior de un sistema se realizan una serie de interacciones
entre sus elementos constituyentes que generan el comportamiento
dinámico del mismo. El estudio, análisis e integración de todas
estas interacciones elementales para explicar en conjunto el
comportamiento global del sistema, constituye uno de los objetivos
básicos de la dinámica de sistemas.
la caracteristica fundamental en el estudio de un sistema es
su evolución en el tiempo y, en concreto, como las interacciones
entre las partes determinan esta evolución.
El modelo del comportamiento dinámico de un sistema se
- 7 -
I
denomina sistema dinámico y se puede decir que éste en
cuanto a modelo de una cierta parcela de la realidad, constituye un
resumen abstracto de los datos observados en la misma.
La? variaciones que se producen en los sistemas son
consecuencia, fundamentalmente, de las propias interacc iones. Estas
interacciones constituyen la estructura del sistema, de ahí que se
diga que bajo el punto de vista de la dinámica de sistemas, el
comportamiento dinámico de un sistema está determinado por su
estructura.
- 8 -
NETODOLOGIA DE PROGRANACION EN D I N M I C A DE S I S E N A S
DIAGRANAS CAUSALES.
Entre los elementos que constituyen el sistema se
establece un bosquejo esquemático de aquellos que están
relacionados entre sí , lo cual se hace por medio de un diagrama en
el cual los nombres de los distintos elementos están unidos entre
s í por flechas. El diagrama que así se obtiene recibe las
denominaciones de diqgrama causal.
El diagrama causal permite conocer la estructura de un
sistema dinámico.Esta estructura viene dada por la especificación
de las variables que aparecen en el mismo, y por el
establecimiento de la existencia, o no existencia, de una relación
entre cada par de variables.
El diagrama causal no contiene información cuantitativa sobre
la naturaleza de las relaciones que ligan a los distintos
elementos, sino que solo suministra un bosquejo esquemático de las
relaciones de influencia causal.
En un diagrama causal complejo se pueden distinguir bucles
realimentados. Un bucle realimentado es una cadena cerrada de 1
relaciones causales, estos pueden ser bucles de realimentación
positiva (son aquellos en los que la variación de un elemento se
propaga a lo largo del bucle de manera que se refuerza la
variación inicial) o bucles de realimentación negativa (son
aquellos en los que una variación en un elemento se transmite a lo
largo del bucle de manera que determine una variación de signo
contrario en el mismo elemento).
- 9 -
En todo diagrama causal coexisten normalmente bucles de
realimentación positiva con bucles de realimentación negativa. Las
interacciones entre ambos tipos de bucles determinan el
comportamiento global del sistema.
- Y O -
í
El diagrama causal anterior indica que a mayor población,
menor comida per cápita y a menor comida per cápita menor tasa de
nacimientos y a menor tasa de nacimientos menos nacimientos por
aiio y a menos nacimientos por año menos población y a menos
población mayor comida per cápita (siempre tendiendo al
equilibrio). Entonces sucederá que en los estados iniciales del
desarrollo de una población el bucle que limita su crecimiento por
agotamiento del territorio disponible, y por lo tanto por
disminución de la comida per cápita, tendrá un efecto
practicamente nulo debido a que no se ha llegado a niveles de
saturación. En consecuencia, en ésta primera etapa será el bucle
de crecimiento de población el que dominará y se registrará un
crecimiento de la misma tal como el indicado en la respectiva
grafica del diagrama causal. Sin embargo, según se vaya aumentando
la población, se producirán problemas de agotamiento de recursos,
por lo que el bucle negativo empezará a dominar sobre el bucle
positivo, dando como resultado una tendencia al estancamiento en
el crecimiento, tal como se aprecia en la misma gráfica.
Observese que es la existencia de bucles de realimentación lo
que determina un comportamiento peculiar para cada sistema
di námi co .
- 11 -
DIAGRAMAS DE FORRESTER
Los distintos elementos que constituyen el diagrama
causal se representan por medio de variables, las cuales se
clasifican de acuerdo con los tres grupos siguientes: variables de
nivel, varibles de flujo y variables auxiliares.
Para ayudar a comprender el significado de estas clases de
variables se puede concebir un símil hidrodinámico tal como el
representado en la figura siguiente. En ésta se representan
tres depósitos con los que se acumulan tres niveles Ni ,N2 y N3.
Las variaciones de los niveles vienen determinadas por las
actuaciones sobre unas ciertas \rálvulas que regulan los caudales
que alimentan a cada uno de los depósitos.
La decisión sobre la apertura de éstas válvulas se toma
teniendo como única información los valores alcanzados por los
niveles en cada uno de los depósitos en el instante de tiempo
considerado. En la figura ésto se representa con ayuda de un
observador que teniendo como única información el conocimiento de
los niveles en el resto de los dep6sitos determina la apertura de
la válvula correspondiente. Aunque en la figura solo aparece el
observador para una de las válvulas, debe considerarse que
existiría uno por cada una de ellas. Se observa como el valor
tomado por la variable de fl.ujo en cada instante depende,
exclusivamente, de los valores alcanzados por los niveles en dicho
instante; de forma análoga, los valores alcanzados por los niveles
dependen de los valores tomados por las variables de flujo que
alimentan a dichos niveles.
- 1.2 -
/
I I
1
I I
\
J i
/
/
/ /
Es inmediato ver que no se hace sino representar de forma
analógica, un sistema de ecuaciones diferenciales tal como:
dNi/dt Fi - F2 dNz/dt = F4
dN~/dt F2 - F3
s i endo
Fi fi(Ni,N2,N3) para i=1,2,3,4
Estas funciones fi pueden ser lineales o no lineales. La
determinación del valor tomado por una variable de flujo, por
ejemplo Fi , a partir de los niveles Ni, N2 y N3 puede que sea
conveniente hacerla en distintas etapas, requiriendose para ello
el establecimiento de unas variables auxiliares; por ejemplo, la
función fi puede descomponerse en tres etapas, empleando dos
variables auxiliares VAi y VA2 teniendose:
VAi = (pi(Ni,Nz)
VA2 = p(VAi, N3)
Fi = (pp3(VAz)
Observese que
Fi = (pa((ppz(VAi,Ns) 1
= (p:~((pz((pi(Ni,Nz),N3))
= fi.(Ni,Nz,N3)
Las variables auxiliares representan etapas intermedias en la
determinación de los flujos a partir de los niveles y, en último
extremo pueden ser eliminadas.
El símil hidrodinámico de la figura se puede completar con la
- 13 -
inclusión de variables exógenas, éstas suministran infomación
adicional y exterior, que debe considerarse para decidir el valor
que toman las variables de flujo Fi.
Llamando E a una variable exógena.
Fi = fi(Ni,Nz,N3,E)
El interés del simil hidrodinámico reside en mostrar que
constituye una analogía de un sistema de ecuaciones diferenciales
de primer orden y que, alternativamente, todo sistema de
ecuaciones diferenciales de primer orden puede representarse con
ayuda de un símil de ésta naturaleza.
Empleando ésta analogía, en dinámica de sistemas, las
variables que aparecen en un modelo se clasifican en variables de
nivel, variables de flujo y variables auxiliares.
Los NIVELES representan magnitudes que acumulan los
resultados de acciones tomadas en el pasado. Es decir, el estado
de un sistema se representa por medio de las variables de nivel.
En los diagramas de Forrester los niveles se representan por
medio de rectangulos. La variación de un nivel tiene lugar por
medio de variables de flujo.
A cada nivel N se le puede asociar un flujo de entrada FE y
un flujo de salida FS; la ecuación que representa la evolución del
nivel es la siguiente,
N(t) = N(O) + [(FE-FSldt
que es lo mismo
dN/dt = FE - FS
- 14 -
Esta ecuación se puede escribir, de forma aproximada,
empleando el método de EüLER de Integración numérica,
N(t+ht) = N(td) + ht[FE(t)-FS(t)l
Esta última forma de escribir la ecuación de un nivel es la
que se emplea comunmente en dinámica de sistemas.
- 15 -
sInBoLos QUE APARECEN EN LOS DIAGRAXAS DE FORRESTER
Nube: Representa una fuente; puede interpretarse como
un nivel que no tiene interés y es practicamente
i nag0 t ab 1 e.
Nivel: Representa la acumulación de un flujo; la
variable de estado.
Flujo: Variación de un nivel; representa un cambio en
el estado del sistema.
Canal de material: canal de transmisión de una
magnitud fisica, que se conserva.
Canal de información: Canal de transmisibn de una
cierta información, que no es necesario que se
conserve,
Variable auxiliar: Una cantidad con un cierto
significado físico en el mundo real y con un tiempo de
respuesta instantáneo.
Constante: Un elemento del modelo que no cambia de
valor.
Retraso: Un elemento que simula retrasos en la
transmisión de información o de material.
Variable Exógena: Variable cuya evolución es
independiente de las del resto del sistema. Representa
una acción del medio sobre el sistema.
Las variables de FLUJO determinan las variaciones en los
niveles del sistema. Las variables de flujo caracterizan las
- 16 -
acciones que se toman en el sistema, las cuales quedan acumuladas
en los correspondientes niveles. Las variables de flujo determinan
como se convierte la información disponible en una acción o
act uac i ón.
A las variables de flujo se asocian ecuaciones que definen el
comportamiento del sistema. El bloque representativo de un flujo
admite, como señal de entrada, la información proveniente de los
niveles, o de variables auxiliares, del sistema y suministra como
salida el flujo que alimenta a un nivel.
Por ejemplo, a un flujo se le puede asociar una ecuación de la forma:
Siendo A(t) y B(t) dos variables de nivel o auxiliares. Las
ecuaciones asociadas a una variable de flujo reciben el nombre de
ecuaciones de flujo.
La ecuación de flujo representa la función desarrollada
por el observador del símil hidrodinámico. Es decir, con ayuda de
la ecuación de flujo el observador calcula en cada instante la
abertura de la válvula, o sea el flujo.
Las variaciones de flujo tienen como entradas exclusivamente
a niveles y a variables auxiliares. Es decir, dos variables de
flujo no pueden conectarse entre s í .
Las variables AUXILIARES representan pasos o etapas en
que se descompone el cálculo de una variable de flujo a partir de
los valores tomados por los niveles.
- 17 -
Normalmente, cuando se va a simular un modelo matemático no
tiene interés la forma analítica., pues lo que entoces interesa es
la escritura del modelo en una forma facilmente programable sobre
un computador. A partir de las ecuaciones que rigen el
comportamiento de las distintas variables que intervienen en un
modelo se obtiene la evolución del sistema.
Las ecuaciones del modelo se escriben de acuerdo con un
método de integración numérica que, normalmente, es el método de
Eul er.
La programación de las ecuaciones de un sistema dinámico
puede hacerse en cualquier lenguaje de alto nivel como FORTRAN,
BASIC, etc. No obstante se ha desarrollado un lenguaje de
programación específico con ayuda del cual se pretende que la
escritura de las ecuaciones asoc:iadas a un diagrama de Forrester
sea lo mas sencilla posible. Este lenguaje es el DYNAMO.
En las ecuaciones escritas en dynamo se hace At = DT. Las
letras J, K y L que siguen a los símbolos de las variables son los
indicadores de tiempo. K indica el instante que se está
considerando, J el precedente y L el siguiente. Para las
ecuaciones de flujo, JK denota el flujo calculado en el intervalo
precedente, y KL el flujo que se calcula para el intervalo
siguiente.
La figura muestra esquemáticamente la secuencia de cálculo
implícita en las ecuaciones. En la secuencia de calculo se
sobreentiende que la evolución del sistema ha alcanzado el
instante K, pero que las ecuaciones aún no se han resuelto para
- 18 -
"I F LUJ
1 I
A t
los niveles en el instante K ni para los flujos sobre el intervalo
KL.
El cálculo de los niveles en el instante K, está basado en el
conocimiento de los niveles en el instante anterior, J, y de los
flujos (supuestos constantes) en el intervalo JK. Una vez
calculados los niveles en el instante K, y después de haber
calculado los flujos Correspondientes al intervalo KL, los índices
se adelantan un tiempo dt para iniciar el siguiente ciclo de
cálculo.
Los flujos calculados para el intervalo KL se convertirán en
los flujos correspondientes al intervalo JK después del cambio de
índices; los índices K de los niveles se transforman en J; se
inicia el siguiente ciclo de cálcxlo, y así sucesivamente.
Las no linealidades que se consideran en los modelos de
dinámica de sistemas son no linealidades sin memoria; es decir,
funciones de una variable que solo responden al valor de la señal
de entrada en el instante considerado. Empleando el dynamo, la no
linealidad se introduce por puntos, tal como se indica en la
gráfica; por ello las no linealidades se denominan también
tablas.
El cuadro muestra la forma que toman en dynamo las
sentencias de los tipos de ecuaciones mas usuales en dinámica de
sistemas.
- 19 -
La no linealidad A=F(B) se escribe por medio de dos
sentencias. En la primera de ellas, en el segundo miembro, aparece
en primer lugar, entre parentesis, el simbolo AT que hace
referencia a la segunda de las sentencias y que se describirá mas
abajo. En segundo lugar aparece B.K, que indica cual es la
variable con la que se alimenta la no linealidad, es decir B.
Aparecen a continuación Bi y Bs, que constituyen los dos valores
que representan el intervalo para el que se define la no
linealidad; es decir, se consideran solo valores de B comprendidos
entre Bi y B5. Por último, el valor de A indica la separación
entre dos valores sucesivos de Bi.
La segunda de las sentencias indica los valores tomados por
A para los valores de B indicados en la primera de las sentencias.
Es decir, los valores Ai=f(Bi), para i=1,2,3,4 y 5.
Con los datos suministrados por éstas dos sentencias se
tienen definidos una serie de puntos de la no linealidad. El
compilador está concebido para realizar una interpolación para
valores de B comprendidos entre los definidos en las sentencias.
- 20 -
EJEMPLO DE APLICACION DE LA DINMICA DE SISTEMAS.
Problema de las ballenas.
Se trata de estudiar la conservación de una determinada
población, por ejemplo la de ballenas, sometida a una extinción
importante por acción de la pesca o de la caza. La evolución de la
población de ballenas depende de los nacimientos, las muertes
naturales y las muertes por pesca. Con estas relaciones iniciales
se puede construir un diagrama causal como el que se muestra.
1 2 8 2 7 2
1 I
! I
Las gráficas muestran la relacih no lineal que existe
entre la población y los nacimientos o las muertes naturales. Si
la población se encuentra por debajo de un valor Pi, se tiene una
situación de <csubpoblación>>: las tasas de nacimiento son muy
bajas debido a que por la baja densidad de población, es difícil
que se encuentren parejas, por problemas de "soledad", falta de
producción para las crías, etc. Si la población se encuentra por
encima de P2 se tiene una <<superpoblación>> que determina
problemas de densidad relativamente elevada, por lo que las tasas
de nacimiento tienden a estabilizarse, mientras que las tasas de
mortalidad tienden a aumentar.
Por otra parte y simplificando mucho el modelo, se supone que
la mortalidad debida a la pesca es proporcional a la población
total, es decir.
M p = K * P
en donde Mp representa la mortalidad debida a la pesca, P es la
población de ballenas y K es una constante de proporcionalidad.
Existe un límite superior para ésta mortalidad fijado por la
capacidad de procesamiento y almacenaje de los productos
balleneros por parte de la flota pesquera, por lo tanto se tiene
que :
MP = Min (K * P, BMAX)
que significa que la mortalidad anual de ballenas, por efecto de
la pesca, será el mínimo de los valores tomados por K * P,
fracción de la población que puede ser pescada, y BMAX, número
máximo de cetáceos que pueden ser- procesados por la flota.
- 22 -
Las hipótesis realizadas son efiarmemente simplificadoras.
Por ejemplo, se ha supuesto que todas las ballenas son igualmente
apreciadas. Sin embargo, en un primer ejemplo introductorio se
consideran aceptables.
En la figura siguiente se considera el diagrama de Forrester
correspondiente al diagrama causal del modelo de evolución de la
población de ballenas.
- 23 -
TOTAL
+- /
/ /'
I
I
Se observa cómo para la caracterización del sistema se
requiere un solo nivel. Escrita en forma de ecuaciones
diferenciales, la ecuación del modelo sería
dP/dt = N - Mn - Mp
En donde P es la población de ballenas, N es el número de
nacimientos, Mn el número de muertes naturales y Mp el número de
muertes por pesca.
Las no linealidades de la figura pueden representarse o
bién analíticamente o bien por puntos. En el primer caso, se tiene
para la relación entre el numero de nacimientos y la población la
siguiente expresión:
N = Ai[exp(-aF')] + Az[exp(-bP)l + C
siendo los valores de las constantes
Ai = -8000 A2 = 4000
a = 0.69 b = 1.38
C = 4000
Por lo que respecta a la relación entre la tasa de mortalidad
y la población se puede ajustar por medio de un polinomio de
segundo orden tal como
M = Ai' x P 4- A2' x PZ
siendo los valores numéricos de las constantes
Ai' = 0.875
A2' = 1.70 IO-'
El modelo así obtenido puede ser simulado sobre un computador
y se requiere el empleo de un lenguaje tal como el dynamo, si es
así, las no linealidades deben tabularse. Teniendo en cuenta ésta
- 24 -
tabulación, el modelo en dynamo se escribe así:
POB. K=POB. J+(DT) (NAC. JK-MNA. JK-MPES. JK)
NAC . KL=TABLE ( NACT. POB. K, O, 50000,5000 1
NACT =0/340/993/1662/2240/2701/3054/3317/3509/3649/3750
MNA. KL=TABLE(MNAT, POB. K, O, 50000,5000)
MNAT =0/86/257/514/855/1281/1792/2388/3070/3836/4687
MPES. KL=MIN [ (FP) (POB. K), BMAX I
Si se emplea cualquier lenguaje de alto nivel, la
programación de las no linealidades puede conservar su forma
analítica, por lo que aparentemente la programación del modelo es
mas simple que la programación en dynamo. Sin embargo, aunque para
un caso sencillo como el que se está tratando sea así, para
problemas de mayor complejidad es patente la superioridad del
dynamo sobre otros lenguajes en modelos de dinámica de sistemas,
debido a que se trata de un lenguaje especialmente diseñado para
este tipo de modelos.
- 25 -
Se deben tomar las siguientes consideraciones acerca de
dynamo:
Al evaluar, el compilador ordena las ecuaciones de la
siguiente manera: nivel, auxiliar y flujo.
Existen además de las ecuaciones anteriores:
Constantes: Donde únicamente se asigna un valor numérico
al nombre simbólico que representa a dicha constante.
Ecuaciones iniciales: A todas las ecuaciones de nivel
deben ser dados valores iniciales al empezar la simulación, estos
son provistos por éste tipo de ecuaciones.
Para el proceso de inicialización se conservan las mismas
reglas que para el cálculo de ecuaciones. Los niveles, que son
calculados de niveles y auxiliares del intervalo de tiempo
anterior y de flujos, también correspondientes al tiempo anterior.
Las auxiliares son calculadas de niveles y otras auxiliares,
calculadas durante esa misma etapa de tiempo. Los flujos son
calculados de niveles y auxiliares de ésta misma etapa de tiempo.
Por consiguiente la etapa de inicialización consiste en
evaluar primero las ecuaciones iniciales, siguiendo con las
auxiliares y posteriormente las de flujo (ésto es únicamente para
el primer intervalo de tiempo, TIME = O 1, para las siguientes
etapas de tiempo se continúa de manera normal: nivel, auxiliar y
flujo.
Al evaluar las ecuaciones iniciales puede surgir el problema
de que la variable del lado derecho de la asignación corresponda a
una ecuación auxiliar o de flu.jo, entonces dynamo evalúa éstas
- 26 -
ecuaciones como si fueran también iniciales, a su vez, éstas
pueden tener el mismo problema, dynamo continúa evaluando como si
fueran iniciales hasta inicializar todas las ecuaciones necesarias
para obtener un valor numérico en la primera expresión.
- i!7 -
Convenciones en dynamo.
Forrnatos de declaraciones.
Las declaraciones en dynamo empiezan con un
identificador en la primera columna de la línea.
L
A
R
S
N
c o CP
T o TP
SPEC
NOTE
PLOT
SAVE
OPT
NOISE
RUN
QUIT
Ecuación de nivel
Ecuación auxi 1 iar
Ecuación de flujo
Ecuación suplementaria
Ecuación de valor inicial
Constante
Tablas
Especificación de la simulación
Nota o comentario
Declaración plot
Declaración print
Calcular valores de variables de salida sin
graficar.
Declaración opt
Numeros aleatorios
Declaración run
Declaración quit
El identificador es seguido por uno o mas espacios y a
continuación la ecuación o declaración de control.
- 28 -
Operaciones aritméticas en dynamo
Suma +
Resta - Multiplicación * Di vis ión /
La declaración SPEC es usada para especificar el valor del DT
(intervalo de integración), el valor de LENGTH (etapa de tiempo en
que la simulación se detiene) y otros dos parámetros que
especifican la separación entre puntos para la salida.
La declaración NOTE es para indicar que a continuación sigue
un comentario.
La declaración RUN marca el fin del modelo.
La declaración QUIT es usada únicamente al hacer un re-run y
es tratada como RUN al encontrarse en el modelo.
Declaraciones de salida.
Dynamo produce salida tabular y gráfica.
PRINT La salida tabular es especificada por ésta
dec 1 arac i ón.
PLOT La salida gráfica es especificada por ésta
declaración.
La declaración SAVE sirve para indicar que a tiempo de
compilación se almacenan los valores correspondientes a las
variables aquí especificadas aunque no estén como salidas, ya
que serán utilizadas en los posteriores re-run.
La declaración NOISE es una función generadora de números
- 29 -
aleatorios.
La declaración OPT sirve para especificar nuevas opciones al
hacer un re-run.
- 30 -
Funciones en dynamo
Retrasos y extrapolacionec. 1 2 8 2 7 2 Al construir el diagrama causal de un sistema debe
considerarse que la relación causal que liga a dos variables puede
indicar una transmisión (de material o de información) para la
que se requiera el transcurso de un cierto tiempo. Es entonces
cuando empleamos las funciones de retraso.
Delayl- Es un retraso material de primer orden (contiene un
nivel) y tiene la forma:
Delayl ( IN, DEL)
Donde
IN
DEL Es el promedio de tiempo de retraso
Es un parámetro de entrada
Delayl es equivalente a las ecuaciones:
A Delayl. K = LV. WDEL
L LV.K = LV. J+(BT) (IN. JK-DELAY. J)
N LV = DEL * IN
Delay3- Es un retraso material de tercer orden, con la
forma:
Delay3 (IN, DEL)
donde
IN
DEL Es el promedio de tiempo de retraso
Es un parámetro de entrada
Delay3 es equivalente a las ecuaciones dynamo:
- 31 -
A
L
N
R
L
N
R
L
N
A
D1 inf3-
forma:
DELAY3. K = LV3. WDL. K
LV3. K
LV3 = DL*IN
RT2.KL = LV2.KlDL.K
LV2. K
LV2 = LV3
RT1. KL = LV1. WDL. K
LV1. K
LV1 = LV3
DL. K = DELI3
= LV3. J+ (DT) (RT2. JK-DELAY3. J
= LV2. J*(DT)(RTl. JK-RT2. JK)
= LV1. J+(DT)(IN. JK-RT1. JK)
Es un retraso de información de tercer orden, con la
D1 inf3( IN, DEL)
donde
IN Es un parámetro de entrada
tiempo de retraso DEL Es el promedio de
equivale a
L DLINF3.K = DLINF3
N DLINF3 = IN
L LV2.K = LV2. J+
N LV2 = IN
J+(DT/DL. J) (LV2. J-DLINF3. J)
DT/DL. J) (LV1. J-LV2. J)
L LV1.K = LV1. J+(DT/DL. J)(IN. J-LV1. J)
N LV1 = IN
A .DL.K = DELI3
Smooth- Es un retraso de información de primer orden con
la forma:
- 3% -
.
Smooth( IN, DEL)
donde
IN Es un parámetro de entrada
DEL Es el promedio de tiempo de retraso
equivale a:
L SMOOTH. K = SMOOTH. J+(DT/DEL) (IN. J-SMOOTH. J)
N SMOOTH = IN
Funciones de especificación.
Las funciones en &Sta clase son generalmente usadas
para especificar relaciones entre dos variables en un modelo.
Exp(A) Calcula el exponencial de A
Logn(A1 Calcula el logaritmo natural de A
Sqrt(A1 Calcula la ra.iz cuadrada de A
Funciones lógicas.
CliP(P1 q> r, 8) la función regresa el valor de p si
r > = s o q s i r c s .
Regresa el valor máximo.
Regresa el valor mínimo.
Regresa el valor de p si r=O o q si
r <:> O.
b ( P , Q )
Miníp, ql
Switch(p,q,r)
Otras funciones.
Cos ( A)
Sin(A) Regresan el valor del coseno y el seno
- 33: -
respectivamente.
Ramp(slp.strt1
SIP Es la inclinación del ramp.
strt Es el inicio del TIME
La salida es:
Ramp = O si time < strt
Ramp = Sum desde strt a TIME de (slp * DT)
si TIME > strt
STEP Produce un salto de cero a un valor
especificado, la forma de la función es:
Step (hght,sttm)
donde el valor del step es cero si TIME < sttm, o
hght si TIME >= sttm.
NOTA: Se han puesto la mayoría de las funciones en dynamo y no se
ha profundizado al explicar cada una de ellas ya que lo que nos
interesa es tener un conocimiento general del lenguaje para
ampliar nuestro criterio en el tema y poder realizar una mejor
critica del trabajo realizado en éste proyecto de investigación.
- 34 -
CONPILADOR DE UN LENGUAJE DE SIWLACIdN
Editor
Se utilizó un editor de pantalla para aumentar la
interacción usuario-máquina, teniendose la facilidad de poder
regresar al texto editado sin tener necesidad de abandonar el
mismo, después de haber realizado una compilación y/o ejecución
del programa dynamo.
Una de las caracteristicas importantes es que al momento de
compilar un programa dynamo con errores de sintáxis, se tiene la
posibilidad de desplegar la página donde se encuentra la
información incorrecta, con el cursor indicando la posición del
error. Por tanto tan pronto como el usuario corrija el error podrá
seguir con el proceso de compilación.
El editor de pantalla se elaboró usando una estructura
doblemente ligada. Cada registro contiene un campo para
información (renglón de texto), un apuntador de este mismo tipo al
siguiente nodo y otro más que apuntará a un posible renglón
anterior.
El uso de listas doblemente ligadas permite recorrer el texto
bidireccionalmente sin tener que guardar apuntadores a posiciones
anteriores y siguientes como sucedería por ejemplo con una lista
lineal con ligas simples. El editor dynamo es capaz de realizar
las siguientes funciones:
-Flecha Abajo: Al presionar flecha abajo se recorre el
apuntador al siguiente nodo.
-Flecha Arriba
- 35 -
-Flecha Derecha
-Página Abajo
-página Arriba
-Borra Caracter
-Inicio Linea: Al presionar HOME el cursor se coloca en
la columna igual al tamaño del renglón mas uno del mismo.
-MarcaInicioBloque: Después de presionar F9 se guarda un
apuntador en el renglón actual donde está el cursor, indicando que
en ésta posición iniciará un bloque a copiar, borrar,
intercambiar . -MarcaFinBloque: Si después de presionar F9 se digita
F10 se determinará el extremo final del bloque pudiendo ser
diferenciado en la pantalla por un cambio de color del texto
marcado o delimitado.
-Primera Página: Esta primera página de texto se
despliega después de presionar C'TRL-PGüP . -Página Abajo: En forma análoga al teclear CTRL-PGDN se
obtendrá en la pantalla la iíltima página del texto.
-Copiar Bloque: Una vez que se marc6 un bloque, la
operación de copiado se puede realizar si se presiona CTRL-C B. El
bloque de texto delimitado será duplicado a partir de la nueva
posición del cursor.
-1ntercambia Bloque: Al igual que en el caso anterior al
presionar CTFL-I B el bloque de texto será removido al lugar
actual del cursor.
-Elimina Bloque: De manera análoga CTRL-E B efectúa un
- 36 -
borrado del texto delimitado o marcado, quedando éste fuera de
vista en la pantalla y anulado en la lista ligada.
-Borra Linea: Se elimina una línea de texto al presionar
CTRL-B.
-Espacio Atrás: Se retrocedeuna posición al digitar
BACKSPACE, además de borrarse el caracter que se hubiese encontrado
una posición antes del cursor.
-Borra Palabra: Ce elimina una palabra de texto después
de presionar CTRL-P. La palabra a borrar será a partir de la
posición del cursor hasta enconti-ar un carater distinto de letra.
-Avanzar Cadena: Con CTRL-A el cursor se recorre al
inicio de una palabra o cadena que pudiese existir.
-Reduce Pantalla: Si se digita F5 se definirán nuevos
límites de la pantalla de edicihn, es decir, el número de líneas
será uno menos cada vez que se presione F5, ésto hasta llegar a
dos renglones de texto.
-Aumenta Pantalla: De manera contraria a la anterior, F6
incrementa el número de líneas en edición hasta llegar a un límite
de 19 líneas o renglones por página.
-Cargar Archivo: Sin tener que pasar por el menú uno
puede cargar un archivo directamente presionando F3.
-Salvar Archivo: Análogo al punto anterior. Presionar F2.
-Ventana de menú principal: Después de presionar F1 se
desplegará en pantalla una ventana con las posibles opciones de
dynamo.
-Ayuda: Al momento de teclear F4 se desplegará en
- 37 -
pantalla la ayuda necesaria para manejar el editor de textos.
-Buscar una palabra: Al presionar CTRL-Q E se despliega
en pantalla un mensaje de captura para la cadena a encontrar. Al
presionar RETURN, aparecerá otro mensaje de captura para las
opcioned de búsqueda. Estas pueden ser:
-BE Buscar desde la posición actual del cursor
hacia abajo estrictamente como se captura la cadena a encontrar.
-AE Buscar desde! la posición actual del cursor
hacia arriba la cadena que se capturó.
-TE Buscar en todo el texto a partir del primer
reng 16n.
-BM Se compara la cadena capturada en letras
mi nuscul as.
-AM Hacia arriba comparando la cadena en
mi núsc u 1 as.
TM En todo el texto con letras minúsculas.
Bc Hacia abajo en letras mayúsculas.
AC Hacia arriba y en letras mayúsculas.
TC En todo el texto en letras miniísculas.
-Reemplazar una palabra : Al presionear CTRL-Q R se
despliegan consecutivamente tres mensajes de captura, los cuales
son : Cadena a Reemplazar :, Por :, Opciones : .
En la captura de opciones, además de tener las posibilidades
que existen al buscar una palabra, se agregan dos caracteres mas :
P ( Cambiar las cadenas preguntando una por una 1, N ( Cambiar
- :38 -
todas las ocurrencias sin preguntar I . Por tanto en opciones se
puede tener :
-BPE -BEP
-AEP -AEN
-TEP -TEN
-BMP -BMN
-AMP -A”
-TMP -TMN
-BCP -BCN
-ACP -ACN
-TCP -TCN
-Seguir Buscando Reemplazando : Después de teclear
CTRL-S, se continuará buscando o reemplazando cadenas dependiendo
si antes ya se buscó o reemplazo alguna.
Una manera eficiente de desplegar una pantalla es utilizando
la memoria de video, la cual comienza en la dirección base $B800
para un monitor a color, y en la dirección $BOO0 para un monitor
monocramático. Por lo tanto an un monitor 80x25 se puede
representar gráficamente de la siguiente manera :
\
- 39 -
t
2 3
4
-
3
F odl I - 1 I I 1 I I I 1 I I I I I I I I 1
I 7- l- l- 4-
I
)9 80
Del esquema anterior de observa que un caracter representa un
byte para el mismo y otro para su atributo. Los tres primeros bits
representan el color, si se enciende el cuarto bit indicará que el
color elegido será brillante, en otro caso será normal; del cuarto
al sexto bit se utilizan para representar el caracter con un color
de video inverso, el Utimo bit ( 7' 1 indica el parpadeo del
texto desplegado.
Por consiguiente la matriz de video constará de 4000 bytes,
la posición i indicará el caracter y la i + 1 su atributo,
Comenzando desde i = O Hasta i = 3999.
De esta manera no se notará un barrido del cursor a través de
la pantalla por cada linea de información que se despliegue, sino
que esta información parecerá que es "salpicada".
- 40 -
Cornpilador : 1 2 8 2 7 2 Un compilador es un programa que traduce código fuente (
en este caso en Dynamo 1 a código objeto o en su defecto a un
código intermedio el cual pueda ser interpretado.
Las fases de un compilador son las siguientes :
Analizador Lexicográfico : En esta parte se analizan los
símbolos o tokens que conforman ima estructura gramatical.
Analizador Sintáctico : Un analizador sintáctico verifica que
la estructura de una frase corresponda a una gramática definida.
Analizador Semántico : En esta parte el compilador verifica
que la frase u oración analizada tenga sentido.
El compilador diseñado es recursivo descendente, de manera
que al encontrar un error éste detiene su proceso de análisis
dejando paso a una rutina que verifica errores de compilación para
mostrar al usuario programador la página donde se encuentra dicho
error además de mandar un mensaje, indicandole el porqué de éste.
Los posibles mensajes de error son los siguientes:
Esperaba la palabra Programa
Esperaba M identificador
Tipo no declarado
Esperaba punto y coma
Esperaba la palabra 'Fin' de program
Esperaba signo igual
- 41 -
Esperaba número entero
Esperaba parentesis izquierdo
Esperaba parentesis derecho
Espereba punto
Esperaba coma
Esperaba palabra reservada ’SOBRE’
Esperaba una constante entera o real
Esperaba identificador o número
Esperaba signo igual
Esperaba ’:’ dos puntos
Esperaba punto final de programa
Identificador no definido o error sintáctico
Esperaba llave izquierda ’ { ’
Esperaba llave derecha ’ I ’
Identificador doblemente definido <identificador>
Esperaba fin de comentario ’a/ ’
Esperaba palabra reservada ’comienza’
Esperaba palabra reservada ’termina’ o ’;’
Esperaba identificador de nivel
Esperaba tipo de ecuación a analizar
Esperaba identificador de ’nivel’ o ’auxiliar’
Esperaba sufijo de identificador
Esperaba sufijo ’ACT’
Esperaba sufijo ’ANT’
Esperaba operador suma ’+’
Esperaba identificador especial ’DT’
- 42 -
Esperaba operador ’*’ o ’I’ Esperaba sufijo ’IAN’
El identificador no deberá llevar sufijo
Esperaba identificador de flujo
Esperaba sufijo ’IAC’
Error en el número de parentesis
No se permite variable suplementaria en una ecuación de
’nivel’, ’flujo’, ’auxiliar’ o ’inicial’.
Esperaba identificador de variable ’suplementaria’
No se permiten variables en ecuaciones constantes
Rango incorrecto
Esperaba número positivo
Se excede en datos para la tabla
Faltan datos para la tabla
Esperaba identificador tipo ’inicial’
Esperaba identificador tipo ’auxiliar’
Esperaba identificador de la constante
Esperaba corchete izquierdo
Esperaba corchete derecho
Inesperado fin de archivo
Expresión de nivel incorrecta
’DT’ es una variable especial
Incorrecto uso de identificador especial ’DT’
No podrá aparecer una variable de tipo ’tabla’
Esperaba palabra reservada ’LENGTH’
Especificaciones ya definidas
- 43 -
La representacitb
caracter
ser dada por un solo
Esperaba un dato mayor al anterior
Pila vacía
Pila llena
Esperaba identificador '<identificador>.ant'
Palabra reservada
Esperaba valor n-rico
En el compilador se emplea la siguiente estructura de datos:
- 44 -
En la cuál en cada nodo se almacenan los identificadores. La
posición que le corresponde en el arreglo a cada uno de ellos está
determinado por la función que se localiza en la parte inferior.
Donde Ord(Cad) proporciona el código ascii del caracter de
ésta cadena.
Las palabras reservadas de que consta el programa son :
Auxi 1 iar,
Constante,
Inicial,
Flujo,
Suplementaria,
Tabla,
Sobre,
Comienza,
Termina,
Programa,
Nivel,
Fin,
Spec.
Nota,
Length,
DT,
Time.
Existen dos tipos de comentarios : /* para abrir inicio de
comentario y */ para cerrarlo o Nota que indica que el renglón será empleado como un comentario.
- 45 -
La gramática que reco:noce el compilador, empleando la
representación conocida como forma de Bacus Naur Form ( BNF 1,
es la siguiente :
. . .= . Significa "Se define como"
I Significa "0"
[ I Encierra un conjunto el cual puede ser repetido cero *
o más veces.
- 46 -
Cabe hacer notar que el compilador diseñado reconoce el mismo
tipo de ecuaciones y funciones empleadas en dynamo (y que hemos
mencionado en el presente reporte) ya que está basado en éste, sin
embargo contamos con un medio ambiente mejorado, además se le
han realizado cambios de tal manera de hacerlo agradable al
usuario.
- .47 -
Ejecución
Al encontrar una tabla definida en las declaraciones, el
compilador genera una estructura como la mostrada en la siguiente
hoja.
- 48 -
.I..
1
2
i
En ésta se guarda la variable de tipo tabla, la variable
independiente sobre la cual actúa, así como su valor mínimo, máximo
e incremento, además un apuntador a una lista ligada donde se
encuentran los valores correspondientes a los puntos de la no
1 ineal idad.
Respecto a las ecuaciones, 1.a misma gramática definida para el
lenguaje va dejando un codigo intermedio en notación polaca
(posfija) generando una lista ligada para éste. El DT y el LENGTH
son depositados al inicio de ésta 1ista.También a tiempo de
compilación se guardan en la tabla de hash los valores
correspondientes a las constantes.
Al llegar a la parte de salidas, por cada PRINT o PLOT
encontrado se genera una estructura, la cual se puede apreciar
también en la siguiente hoja.
Donde, en el arreglo de registros se guardan las variables a
ser graficadas y tabuladas.
Estas son las estructuras de datos que se requieren a tiempo
de ejecución, entonces se recorre la lista ligada de las
expresiones en posfija y para cada una se llama a un procedimiento
que las evalúa con ayuda de un stack, al terminar de evaluar cada
expresión se actualiza la tabla de hash depositando el resultado
obtenido en el lugar correspondiente a la variable que obtuvo
dicho valor, de tal manera que al evaluar en la siguiente etapa de
tiempo se pueda extraer de aquí los valores tomados anteriormente
por las variables.
Si un identificador tiene un tipo tabla, se realiza una
- 49 -
interpolación con ayuda de la estructura correspondiente a esa
tabla con el valor actual de la variable independiente.
Si por otro lado corresponde a una función (de retraso), se
genera un nodo (la primera vez) donde se guardan los distintos
valores tomados por las variables de esa función, ya que las
funciones contienen ecuaciones de nivel y éstas dependen del
intervalo de tiempo anterior, éstos valores servirán para calcular
la misma función en el intervalo de tiempo siguiente . Si el
identificador corresponde a otro tipo de función se calcula de
manera normal ya que no requieren de valores anteriores para su
cálculo.
La manera de inicializar los niveles es
como sigue:
Si es la primera etapa de tiempo y la expresión
corresponde a una inicial, entonces se evalúa, pero si a su vez
depende para ser calculada de una auxiliar o de flujo, ésta última
se evalúa como si fuera inicial, ésto se repite hasta poder
obtener un valor inicial para la ecuación de nivel. En la primera
etapa de tiempo se evalúan la.s iniciales, posteriormente las
auxiliares y por último las de flujo; en las siguientes etapas de
tiempo, como los niveles ya cuentan con un valor inicial se
evaluan niveles, auxiliares y flujos en este orden.
Al terminar cada ciclo SE! crean nodos correspondientes a
los valores obtenidos en ésta etapa de tiempo para cada variable
de salida y se van adicionando eri la estructura correspondiente.
Al compilar nuevamente un modelo se eliminan las
- 50 -
estructuras. Por el contrario si se ejecuta otra vez, sin compilar
de nuevo, se eliminan únicamente los valores obtenidos para las
variables de salida (sin eliminar las estructuras generadas a
tiempo de compilación), se elimina también la estructura para
almacenar los valores de las funciones y se inicializa la tabla de
hash dejando los valores de las constantes.
El despliegue de las variables de salida es en forma grafica y
tabular en ventanas individuales, en la forma tabular se tiene la
opción de mover páginas arriba y abajo para poder apreciar todos
los puntos, si éstos sobrepasan una página. Como se grafican cada 4
variables más el TIEMPO, se obtiene una escala adecuada, ésta se
indica en el margen izquierdo de las gráficas y en la parte
superior dentro de la ventana de salida tabular.
- 51 -
12822% Conclusiones :
Consideramos que este producto puede ser de mucha
utilidad en áreas como las ciencias sociales para la enseñanza de
modelos de simulación que nos representen un determinado
comportamiento, por ejemplo en :la economía podría ser llevado a
cabo un estudio de mercado para determinado producto, o en
psicología estudiando los síntomas de una perturbación.
- 52 -
I
Bibliografía :
- Aracil Santoja Javier.
Introducción a la dinámica de sistemas.
Alianza Editorial.
- Jay W. Forrester. Dinámica Industrial.
- Jay W. Forrester
Principles of systems.
- MiniDynamo User’s Guide.
- Dynamo üser’s Guide.
- 53 -