Main Content

Definir el comportamiento del gráfico usando acciones de estado y etiquetas de transición

Las acciones de estado y las acciones de transición son instrucciones que se escriben dentro de un estado o en una transición, respectivamente, para definir cómo se comporta un gráfico de Stateflow® durante la simulación. Por ejemplo, las acciones de este gráfico definen una máquina de estados que verifica de forma empírica una instancia de la conjetura de Collatz. En la entrada numérica $u$, el gráfico calcula la secuencia de granizo $n_0 = u,$ $n_1,$$n_2,$$n_3,$ ... iterando la siguiente regla:

  • Si $n_i$ es par, $n_{i+1} = n_i / 2$.

  • Si $n_i$ es impar, $n_{i+1} = 3n_i+1$.

La conjetura de Collatz establece que todos los enteros positivos tienen una secuencia de granizo que termina en 1.

El gráfico consta de tres estados. Al comienzo de la simulación, el estado Init inicializa los datos del gráfico estableciendo lo siguiente:

  • Los datos locales n en el valor de la entrada u.

  • Los datos locales n2 en el resto cuando n se divide entre dos.

  • Los datos de salida y en false.

Dependiendo de la paridad de la entrada, el gráfico cambia a estado Even o Odd. A medida que la actividad del estado cambia entre Even y Odd, el gráfico calcula los números de la secuencia de granizo. Cuando la secuencia alcanza un valor de uno, los datos de salida y se convierten en true y activan un bloque Stop Simulation (Simulink) en el modelo de Simulink®.

Tipos de acciones de estado

Las acciones de estado definen lo que un gráfico de Stateflow puede hacer mientras un estado está activo. Los tipos más comunes de acciones de estado son las acciones entry, during y exit:

  • Las acciones entry se producen cuando el estado se convierte en activo.

  • Las acciones during se producen en una unidad de tiempo en la que el estado ya está activo y el gráfico no cambia de estado.

  • Las acciones exit se producen cuando el gráfico sale del estado.

Puede especificar el tipo de una acción de estado con una palabra clave completa (entry, during, exit) o con una abreviatura (en, du, ex). También puede combinar los tipos de acciones de estado con comas. Por ejemplo, una acción con el tipo combinado entry, during se produce en la unidad de tiempo en la que el estado se convierte en activo y en cada unidad de tiempo posterior mientras el estado permanece activo.

El gráfico de granizo contiene acciones en estos estados:

  • Init: cuando este estado se convierte en activo al inicio de la simulación, la acción entry determina la paridad de n y establece y en false. Cuando el gráfico sale de Init después de una unidad de tiempo, la acción exit determina si n es igual a uno.

  • Even: cuando este estado se convierte en activo y en cada unidad de tiempo posterior en la que el estado está activo, la acción combinada entry, during calcula el valor y la paridad para el siguiente número de la secuencia de granizo, n/2.

  • Odd: cuando este estado se convierte en activo y en cada unidad de tiempo posterior en la que el estado está activo, la acción combinada entry, during comprueba si n es mayor que uno y, si lo es, calcula el valor y la paridad para el siguiente número de la secuencia de granizo, 3*n+1.

Tipos de etiquetas de transición

Las etiquetas de transición definen lo que un gráfico de Stateflow puede hacer cuando el estado activo cambia. Los tipos más comunes de etiquetas de transición son las condiciones y las acciones de condición.

  [Condition]{ConditionAction}

Condition es una expresión booleana que determina si se produce la transición. Si no se especifica una condición, la transición se produce una unidad de tiempo después de que el estado de origen se convierte en activo.

ConditionAction es una instrucción que se ejecuta cuando la condición que vigila la transición es verdadera. La acción de condición tiene lugar después de la condición, pero antes de cualquier acción de estado exit o entry.

El gráfico de granizo contiene acciones en estas transiciones:

  • Transición predeterminada a Init: al inicio de la simulación, la acción de condición n = u asigna el valor de entrada u a los datos locales n.

  • Transición de Init a Even: la condición n2 == 0 determina que la transición se produce cuando n es par. El número 1 en el origen de esta transición indica que esta transición se evalúa antes de la transición Init a Odd.

  • Transición de Odd a Even: la condición n2 == 0 determina que la transición se produce cuando n es par.

  • Transición de Even a Odd: la condición n2 ~= 0 determina que la transición se produce cuando n es impar. En este caso, la acción de condición y = isequal(n,1) determina si n es igual a uno.

Examinar el comportamiento del gráfico

Para calcular la secuencia de granizo que empieza con un valor de nueve:

1. En el bloque Constant, introduzca un valor de 9.

2. En la pestaña Simulation, haga clic en Run. El gráfico responde con estas acciones:

  • En la unidad de tiempo $t = 0$, se produce la transición predeterminada a Init. La acción de transición establece el valor de n en 9. El estado Init se convierte en activo. Las acciones entry de Init establecen el valor de n2 en 1 y el de y en false.

  • En la unidad de tiempo $t = 1$, la condición n2 == 0 es falsa, por lo que el gráfico prepara la transición a Odd. La acción exit de Init establece el valor de y en false. El estado Init se convierte en inactivo y el estado Odd se convierte en activo. La acción entry de Odd establece n en 28 y n2 en 0.

  • En la unidad de tiempo $t = 2$, la condición n2 == 0 es verdadera, por lo que el gráfico prepara la transición a Even. El estado Odd se convierte en inactivo y el estado Even se convierte en activo. La acción entry de Even establece n en 14 y n2 en 0.

  • En la unidad de tiempo $t = 3$, la condición n2 ~= 0 es falsa, por lo que el gráfico no realiza ninguna transición. El estado Even se mantiene activo. La acción during de Even establece n en 7 y n2 en 1.

  • En la unidad de tiempo $t = 4$, la condición n2 ~= 0 es verdadera, por lo que el gráfico prepara la transición a Odd. La acción de transición establece y en falso. El estado Even se convierte en inactivo y el estado Odd se convierte en activo. Las acciones entry de Odd establecen el valor de n en 22 y el de n2 en 0.

  • El gráfico continúa calculando la secuencia de granizo hasta llegar a un valor de n $= 1$ en la unidad de tiempo $t = 19$.

  • En la unidad de tiempo $t = 20$, el gráfico prepara la transición de Even a Odd. La acción de transición establece el valor de y en true. El estado Even se convierte en inactivo y el estado Odd se convierte en activo. Las acciones entry de Odd no modifican n ni n2. El bloque Stop Simulation que está conectado a la señal de salida y detiene la simulación.

3. En la pestaña Simulation, en Review Results, haga clic en Data Inspector.

4. Para ver los valores de la secuencia de granizo, en Simulation Data Inspector, seleccione la señal registrada n.

La secuencia de granizo alcanza el valor de uno después de 19 iteraciones.

Temas relacionados