Arquitecto Sire Publicado 4 de Enero del 2021 Arquitecto Compartir Publicado 4 de Enero del 2021 Primer post de cosecha propia. Un mecanismo muy útil para conseguir que algo suceda dentro de un espacio de tiempo, pero sin saber exactamente cuando.Por ejemplo: queremos que un vuelo despegue entre el minuto 0 y el minuto 30, pero sin saber exactamente cuando. Funcionamiento general. Primero vamos a explicar como funciona. Imaginaos que en el mundo real tiramos un dado de 10 caras y hacemos despegar el vuelo con un click cuando el resultado sea un 1. Hay dos factores importantes: la probabilidad y el tiempo. Probabilidad: Dependerá de la suerte cuando salga un 1. Si en vez de un 1, lo que buscamos es un 1 o un 2, las probabilidades aumentan. Repeticiones (Intervalo): Puede ser a la primera vez o puede ser que tengamos que tirar 15 o 20 veces. En teoría puede que tires un millón de veces y nunca salga el valor que buscamos. Lo que está claro es que cada vez que tiramos incrementamos la posibilidades de obtener el éxito... sin que nunca estén garantizadas al 100%. El tiempo entre cada tirada se llama intervalo. Se puede calcular las posibilidades que hay para cada Probabilidad base y cómo aumentan según el número de Repeticiones. Si multiplicamos el número de repeticiones por su Intervalo tenemos el resultado de Tiempo y Probabilidad. He hecho una tabla:En esta tabla 100% significa muy próximo pero sin llegar al 100%. El primer chequeo es en tiempo 0s La forma más sencilla de explicarla es con un ejemplo. En nuestro caso queríamos que en 30 minutos el vuelo haya despegado seguro, sin saber exactamente cuando. Primero, no hay una única solución y segundo seguro es nunca en probabilidad porque hemos visto que nunca llegamos al 100%. Pero podemos aproximarnos mucho. Empecemos por el intervalo, el tiempo entre comprobaciones (tirada del dado). Si cojo un intervalo de 30 min, una sola tirada, no voy a tener oportunidades para ir aproximándome al 100. ¿Qué hago? ¿Un chequeo al minuto 0 y otro al 30? Tal vez sea suficiente. Pero tal vez necesites más granularidad: más oportunidades intermedias para generar incertidumbre sobre el momento exacto, si eso es importante. En ese caso tienes que buscar el intervalo más pequeño posible, sin saturar la CPU con un montón de cálculos. Mi propuesta básica es elegir entre intervalos de 1, 2, 5, 10 y 30 minutos, que te servirá para la mayoría de las veces. Elige el intervalo más pequeño, dentro del tiempo máximo que quieres que ocurra con una probabilidad muy elevada (pongamos mayor que el 95%). Así el intervalo que buscamos para el ejemplo es de 5 minutos y la probabilidad es del 20%. Logica_Probabilidad_Intervalo Ahora hace falta el mecanismo, que es el siguiente y que al final incluyo como plantilla: grupo Logica_Probabilidad_Intervalo, prerellenado como Logica_20_5min (la del ejemplo). Editable según necesidad, evidentemente. "Programación": Utilizando la tabla de arriba (o vuestros propios cálculos) introducir Intervalo: poner el tiempo entre cada chequeo. Probabilidad: poner la probabilidad de cada chequeo. Tmax: Tiempo máximo. Funcionamiento: Primeramente fíjate en el recuadro amarillo de izquierda a derecha: Hay un conector IN para que le llegue una señal de inicio desde el resto de la lógica de tu misión. Por ejemplo, podría ser un Mission Begin si es desde el inicio de tu misión. Al final hay un conector OUT para sacar la señal de nuevo a la lógica de tu misión. Una vez iniciado el mecanismo comienzan las repeticiones (bucle): La señal pasa desde IN a Intervalo y pasado ese tiempo hace el primer chequeo pasando por Probabilidad (lanza el dado), si es Éxito pasa la señal a OUT para activar lo que sea. De Intervalo la señal también pasa a un regenerado con una espera de 100ms para dar una nueva señal de inicio (otro ciclo). Pero si fue Éxito de Probabilidad ésta va a lanzar una señal de desactivar el regenerador y terminará el bucle. Refinamientos: Hace falta refinar el mecanismo para cubrir dos casos: el chequeo en tiempo 0 y asegurar 100% que sucede una vez el tiempo cumplido, y así tenemos que añadir: Chequeo_en_T0: un línea por la cual el primer chequeo se hace sin esperar al intervalo y en caso de éxito activa la salida y mata el bucle. Asegurador: otra línea por la cual, en el tiempo máximo (introducido, por defecto 1h) activa la salida y mata el bucle. Descarga Ya está, aquí tenéis el grupo prerellenado para 20% cada 5 min un tiempo máximo de 30 min.Y no olvidéis nunca agradecer y compartir, porque todo lo que sabéis lo habéis aprendido de alguien.https://mega.nz/file/z9o3yICJ#phU2cytySbNS2ydruKqZ5Y2HeEISOFhZ2_26LZd4PWc 6 Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Publicaciones recomendadas
Unirse a la conversación
Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, conecta ahora para publicar con tu cuenta.