Main Content

Definir el comportamiento del gráfico utilizando acciones

Las acciones de estado y transición son instrucciones que se escriben dentro de un estado o junto a una transición para definir cómo se comporta un gráfico de Stateflow® durante la simulación. Para obtener más información, consulte Modelizar máquinas de estados finitos.

Ejemplo de acciones de estado y transición

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:

  • Los datos locales n se ajustan al valor de la entrada u.

  • Los datos locales n2 se ajustan al resto cuando n se divide entre dos.

  • Los datos de salida y se configuran como 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 hace un gráfico de Stateflow mientras un estado está activo. Los tipos más comunes de acciones de estado son las acciones de entry, during y exit.

Tipo de acción de estadoAbreviaturaDescripción
entryenLa acción se produce en una unidad de tiempo cuando el estado se convierte en activo.
duringduLa acción se produce en una unidad de tiempo en la que el estado ya está activo y el gráfico no cambia de estado.
exitexLa acción se produce en una unidad de tiempo en la que el gráfico cambia de estado.

Puede especificar el tipo de una acción de estado con su palabra clave completa (entry, during, exit) o con su 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.

Esta tabla muestra el resultado de cada acción de estado en el gráfico de granizo.

EstadoAcciónResultado
Init

entry:
 n2 = rem(n,2);
 y = false;

Cuando Init se activa al inicio de la simulación, determina la paridad de n y establece y como false.

exit:
 y = isequal(n,1);

Al salir de Init después de una unidad de tiempo, determina si n es igual a uno.
Even

entry,during:
 n = n/2;
 n2 = rem(n,2);

Calcula el siguiente número de la secuencia de granizo (n / 2) y actualiza su paridad en:

  • La unidad de tiempo en la que Even se convierte en activa por primera vez.

  • Cada unidad de tiempo subsiguiente en la que esté activo Even.

Odd

entry,during:
 n = 3*(n-y)+1;
 n2 = rem(n,2);

Calcula el siguiente número de la secuencia de granizo (3n+1) y actualiza su paridad en:

  • La unidad de tiempo en la que Odd se convierte en activa por primera vez.

  • Cada unidad de tiempo subsiguiente en la que esté activo Odd.

Durante la mayor parte de la simulación, y se evalúa como cero. En la última unidad de tiempo, cuando n = 1, y se evalúa como uno, por lo que esta acción no modifica n o n2 antes de que la simulación se detenga.

Tipos de acciones de transición

Las acciones de transición definen lo que hace un gráfico de Stateflow cuando una transición se aleja de un estado activo. Los tipos más comunes de acciones de transición son las condiciones y las acciones condicionales. Para especificar las acciones de transición, utilice una etiqueta con esta sintaxis:

[condition]{conditional_action}

condition es una expresión booleana que determina si se produce la transición. Si no se especifica una condición, se asume una implícita que se evalúa como verdadera.

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

Esta tabla muestra el resultado de cada acción de transición en el gráfico de granizo.

TransiciónAcciónTipo de acciónResultado
Transición predeterminada a Init

n = u

Acción condicionalAl inicio de la simulación, asigna el valor de entrada u a los datos locales n.
Transición de Init a Even

n2 == 0

CondiciónCuando n es par, se produce la transición. El número 1 en el origen de esta transición indica que se evalúa antes de la transición a Odd.
Transición de Init a Odd NingunaCuando n es par, se produce la transición. El número 2 en el origen de esta transición indica que se evalúa después de la transición a Even.
Transición de Odd a Even

n2 == 0

CondiciónCuando n es par, se produce la transición.
Transición de Even a Odd

n2 ~= 0

CondiciónCuando n es par, se produce la transición.

y = isequal(n,1)

Acción condicionalCuando se produce la transición, determina si n es igual a uno.

Examinar el comportamiento del gráfico

Suponga que desea calcular la secuencia de granizo que empieza con un valor de nueve.

  1. En el bloque Constant (Simulink), 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 inactiva.

      • El estado Odd se convierte en activo.

      • Las acciones entry de Odd establecen el valor de n en 28 y el de 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 inactiva.

      • El estado Even se convierte en activo.

      • Las acciones entry de Even establecen el valor de n en 14 y el de 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.

      • Las acciones during de Even establecen el valor de n en 7 y el de 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 el valor de y en false.

      • El estado Even se inactiva.

      • El estado Odd se activa.

      • 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.

      • Antes de que el estado Even se inactive, la acción de transición establece el valor de y en true.

      • El estado Odd se activa.

      • Las acciones entry de Odd no modifican n ni n2.

      • El bloque Stop Simulation (Simulink) 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.

Simulation Data Inspector showing the output of the chart.

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

Temas relacionados