
Debido a la publicidad ubicua sobre Chernobyl a principios del verano (al menos en la industria de la energía nuclear), así como a las palabras zumbantes de digitalización y gamificación, en
IBRAE RAS decidimos crear algún tipo de aplicación de búsqueda en la que el funcionamiento de una unidad de energía nuclear se modela y lleva a cabo conceptualmente su prueba en el parque Bitsevsky.
Introductorio
El objetivo inicial de crear una aplicación de este tipo es, por supuesto, el interés en cómo puede simular simple y fácilmente el proceso de gestión de un objeto tan complejo, no solo desde el lado técnico, sino también desde el lado psicológico (debido a la relación de tres partes diferentes: operadores de estaciones, gobierno y saboteadores). Otro objetivo es hacer que las personas se sientan como una de las partes del proceso y ver cómo se comportan en su lugar en la vida real. No estoy hablando de educación y programa educativo, en principio, todos los participantes en nuestra búsqueda están más o menos familiarizados con esta área de la actividad humana, pero, sin embargo, siempre puedes aprender algo nuevo. Y, por supuesto, queríamos divertirnos en los últimos días cálidos de este 2019.
La esencia de la búsqueda es esta: los participantes se dividen en tres equipos (operadores de estación, gobierno y saboteadores), luego cada uno de ellos se envía a realizar tareas de geolocalización. Paralelamente a correr y resolver acertijos, cada uno de los equipos actúa en el reactor a través de una aplicación que se ejecuta en un sitio web. Al mismo tiempo, los equipos pueden influir en el reactor de forma limitada, es decir, gastando los puntos de acción que reciben al completar con éxito las tareas (en forma de códigos promocionales para la aplicación).
Al final de la búsqueda, el tiempo dedicado a completar la búsqueda se ajusta según el éxito con el que los equipos se pusieron en contacto con el reactor. Debo decir de inmediato que, como resultado de la primera y única prueba en este momento, todos dejaron de prestarle atención al tiempo y simplemente caminaron por los hermosos lugares del bosque Bitsevsky, en particular, la montaña calva y el antiguo templo eslavo, realizaron tareas y disfrutaron del sol de septiembre tan suavemente calentándose con miel ...
App
La aplicación está escrita en Python. Frontend (esta es la entrada / salida de datos del reproductor) se creó usando vuejs, jquery y frasco. El backend (lógica del reactor y procesamiento de eventos) se escribió en python puro. La comunicación entre el frontend y el backend se realizó mediante una base de datos (SQLite). La base de datos estaba envuelta con sqlachemy. Para implementar la aplicación usamos Yandex Cloud.
Esto no es un anuncio publicitario.Pero gracias a los 4000 rublos de bonificación que Yandex ofrece para probar la nube, esta bonificación fue muy útil;)

Frontend
La parte del servidor está escrita en Python (matraz). La parte del cliente (interfaz para el reproductor) se creó usando vuejs, jquery y un pequeño render de plantillas de página en el servidor.
Cuando va al sitio web, se le pide al participante que ingrese un código único para cada equipo, luego de lo cual ingresa al menú principal.
El menú principal consta de 5 elementos:
- Gráficos con parámetros del reactor
- Ingrese el código promocional
- Panel de control
- Mapa
- Salir
En la ventana de visualización del gráfico, el jugador puede rastrear el estado actual y varios estados anteriores del reactor. También mire la tasa de cambio de poder, la posibilidad de un accidente, su número, y también vea los contadores de puntos de victoria.
En la ventana para ingresar códigos de promoción. Un participante puede activar un código promocional recibido de una forma u otra, como regla, después de que un equipo pasa alguna prueba.
El estado del reactor también está disponible en el panel de control, similar al panel de vista gráfica. Luego, se muestra una pila de eventos actuales con una indicación del nombre, equipo, contador hasta el final del evento, así como la posibilidad de cancelarlo (solo el suyo).
Y, por supuesto, las acciones mismas. Son únicos para cada equipo. Por ejemplo, hay una amplia gama de acciones disponibles para que los operadores controlen el reactor (barras de control, velocidad de flujo del fluido de trabajo, adición de boro, etc.). Para el gobierno, se trata de todo tipo de requisitos y restricciones sobre el funcionamiento de la unidad (aumentar la carga, ejercer presión sobre el personal de la estación). Para los saboteadores, esta es la falla de las bombas, sobornos de operadores, etc.
Para cada equipo, hay acciones disponibles que cancelan las acciones de otros, como una operación antiterrorista, la introducción de un espía en el gobierno o el soborno de funcionarios (por supuesto, no existe tal cosa en la vida real, pero para equilibrar el juego, tuvimos que inventar cosas).
Todas las acciones de las partes se describen en la tabla:
En la pestaña del mapa, hay un mapa disponible desde la aplicación Yandex Maps creada con el diseñador del mapa (para obtener más detalles, consulte
Preparación para el juego ).
Backend
Todo el backend está escrito en Python puro. De hecho, el código completo consta de un objeto Reactor (reactor, unidad de potencia, estación) con un parámetro de potencia o estado. Cada paso de tiempo (establecido manualmente, establecemos 1 segundo), el estado cambia según los eventos que ocurrieron en este paso. La pila de eventos actuales se actualiza a cada paso accediendo a la base de datos, que a su vez es completada por los participantes del juego desde la interfaz de la aplicación web.
Por conveniencia, todos los eventos se recopilan en una fábrica de eventos y reciben el objeto del reactor y su identificador único (número de línea en la base de datos) como entrada. Como el objeto de clase reactor sabe todo lo que sucede en la aplicación, los eventos lo saben todo, lo que hace que el proceso de creación sea muy flexible.
Para las pruebas, también se crearon bots que actuaron de acuerdo con alguna estrategia. Para describir estas lógicas, también se ha creado una fábrica de estrategias.
También se creó una fábrica para contar puntos, con el fin de variar la lógica de contar de un juego a otro. La lógica básica creó un punto de victoria en cada paso de tiempo y se lo dio a uno de los equipos dependiendo del nivel de poder en ese paso (50-75 - operadores, 75-100 - gobierno, 0 y más de 100 - saboteadores, en otros casos a nadie).
Quest
Preparación
La preparación principal consistió en encontrar lugares para la búsqueda, así como pruebas preliminares de la aplicación en el laboratorio.
Para preparar los lugares, una semana antes del evento, el organizador fue abandonado en el bosque de Bitsevsky. Caminó por el territorio y encontró lugares interesantes y llamativos, en cada lugar realizó tres operaciones:
- Grabé la geolocalización (usando la aplicación Yandex Maps yandex.ru/maps );
- Calidad de red medida (utilizando la aplicación Speedtest www.speedtest.net );
- Tomó una ubicación de foto o video.
Como resultado, se recolectaron 30 ubicaciones (10 para cada equipo).
Yandex Maps hizo posible simplificar enormemente la creación de un mapa, debido al
generador de mapas
yandex.ru/map-constructor . Le permite agregar su ubicación, zonas y todo tipo de marcas al mapa. Luego, intégrelo en su aplicación en forma de código JavaScript o iframe o colóquelo como un enlace, y en el peor de los casos, simplemente imprímalo. Se pueden agregar ubicaciones importándolas de un archivo XLSX, CSV, KML, GPX o GeoJSON. El único inconveniente fue la imposibilidad de importar ubicaciones desde mapas Yandex ordinarios directamente al constructor (al menos no lo encontramos), tuve que interrumpirlos en una tabla xlsx e importarlo ya. Las zonas con mala calidad de red se resaltaron en el diseñador del mapa como un área roja.
El día antes del juego (bueno, como siempre) probamos el juego con 3 personas (1 de cada equipo). En general, no hubo comentarios especiales, solo ajustamos ligeramente la estimación preliminar del costo de las acciones de los equipos. Noto de inmediato que el juego en sí reveló algunos problemas (en conclusión), y la conclusión es que difícilmente podríamos descubrirlos en condiciones de invernadero.
El juego
En la mañana del 14 de septiembre de 2019, reunimos a los participantes en el bosque de Bitsa. Al principio, nuestro atleta, miembro de Komsomol y solo un buen científico, realizó ejercicios incendiarios por la mañana.
Luego, los participantes se dividieron en equipos, les dieron un código promocional inicial y anunciaron el inicio del juego.
Los equipos se dispersaron lentamente a ubicaciones (ahora lo entiendo, probablemente porque trataron de descubrir la aplicación en el camino). En los primeros 10-15 minutos, los jugadores tuvieron dificultades, pero luego se acostumbraron y su atención se centró en ganar códigos promocionales.
Para mayor emoción, destacamos un personaje especial en un tocado que era visible desde lejos, que visitó equipos y formuló preguntas para obtener códigos promocionales (al mismo tiempo, corrigió las jambas en la búsqueda).
Debo decir que, al centrarnos por completo en la aplicación, abandonamos por completo la preparación para la búsqueda, como resultado, completamos parte de los accesorios ya por la noche antes de la búsqueda, y olvidamos comprar parte. Por ejemplo, debido al hecho de que olvidamos comprar una cantidad suficiente de cubos, tuvimos que competir mentalmente con el vertido de agua, ya que nuestros jugadores tenían una imaginación bien desarrollada.
En general, los equipos comenzaron a realizar tareas no para pasar todos los puntos más rápido, sino para obtener más que códigos promocionales de
oro . Llegó a una mendicidad descarada, que por supuesto fue severamente reprimida. En algún momento, los códigos promocionales de bonificación se agotaron, pero los equipos no desean obtenerlos. Entonces, la conclusión es preparar más códigos promocionales y preguntas / tareas para recibirlos.
Quizás el momento más memorable para mí fue la llamada de un participante del equipo del gobierno al equipo del operador con indignación por la calidad de su trabajo y los requisitos:
- Aumente la potencia más rápido (en algún momento, el equipo del operador, que tenía un gran margen de puntos de victoria, no era rentable para aumentarlo y mantuvieron la unidad con poca carga),
- Es mejor regular la potencia a altas cargas (ya que fue con ellos que los saboteadores comenzaron a hacer todo tipo de trucos sucios, y los operadores no siempre tuvieron tiempo de responder a ellos).
A lo que los operadores respondieron razonablemente que no tenían suficientes puntos de acción (léase: financiamiento) para cumplir sus deseos y se alegrarían si el equipo del gobierno compartiera un poco. Desafortunadamente, la transferencia de puntos no se implementó, pero en el futuro, dado este precedente, ciertamente la implementaremos. También en el futuro, sería bueno agregar chat a la aplicación para la correspondencia entre los equipos con el fin de alentar a los equipos a interactuar más activamente entre sí.
En general, esta foto caracteriza bien el proceso de trabajo en lugares: alguien resuelve la tarea, alguien controla el reactor, alguien disfruta de la vida y en algún lugar del fondo se esconde un perro.
Al final
Algo pasó, algo no. Los principales problemas no fueron parámetros de reactor muy bien elegidos, lo que afectó negativamente el juego:
- tasa de crecimiento de accidentes;
- inercia del reactor.
El primero colapsó casi inmediatamente el reactor a 0 después de alcanzar valores críticos de potencia (más de 100) y los operadores simplemente no tuvieron tiempo de reaccionar, ya que solo tuvieron unos segundos para hacerlo (aunque hay ejemplos de cómo lograron hacerlo, por ejemplo, agregando boro a núcleo del reactor).
El segundo hizo los eventos lo suficientemente rápido y nuevamente no permitió a los participantes evaluar la situación y tomar una decisión informada. En realidad, por supuesto, esto es probablemente lo que sucede, pero no olvide que los equipos todavía estaban corriendo por los lugares y realizando diversas tareas, lo que los distrajo del bloque. Era necesario, como mínimo, poner en el programa la capacidad de controlar los parámetros en tiempo real, lo cual no hicimos.
Como parte de la búsqueda, fallamos específicamente en la pregunta con los accesorios, como resultado de lo cual tuvimos que idear una tarea en tiempo real con materiales improvisados. Bueno, el significado mismo de la búsqueda se transformó de moverse rápidamente por las ubicaciones para ser el primero en recibir códigos promocionales para generar puntos de bonificación (oh, esta sed de ganancias ...). Pero lo más importante, al final, obtuvimos un estado de ánimo alegre, muchos momentos memorables, así como la satisfacción de nuestra propia curiosidad.
Las estadísticas del juego se pueden encontrar en
reactor-quest.imtqy.com , un cronograma interactivo (en computadoras personales), en la parte inferior puede seleccionar el rango de tiempo de interés para una vista más detallada del mismo.
El código de la aplicación está publicado en GitHub
github.com/reactor-quest/reactor-quest , puede usarlo libremente.
Todo bien y pacífico átomo, un equipo de jóvenes científicos IBRAE RAS!
