Atomic quest in Bitsevsky park





Due to the ubiquitous hype about Chernobyl in early summer (at least in the nuclear power industry), as well as the buzzing words of digitalization and gamification, we at IBRAE RAS decided to create some kind of quest application in which the operation of a nuclear power unit is conceptually modeled and carried out its testing in Bitsevsky park.



Introductory



The initial goal of creating such an application is of course interest in how you can simply and easily simulate the process of managing such a complex object, not only from the technical, but also from the psychological side (due to the relationship of three different parties: station operators, government and saboteurs). Another goal is to make people feel like one of the parties to the process, and see how they behave in their place in real life. Iโ€™m not talking about education and educational program, in principle, all participants in our quest are more or less familiar with this area of โ€‹โ€‹human activity, but nevertheless, you can always learn something new. And of course, we wanted to have fun on the last warm days of this 2019.



The essence of the quest is as follows: the participants are divided into three teams (station operators, government and saboteurs), then each of them is sent to perform tasks on geolocations. Parallel to running around and solving puzzles, each of the teams acts on the reactor through an application running on a website. At the same time, teams can influence the reactor to a limited extent, namely by spending action points that they receive when they successfully complete tasks (in the form of promotional codes for the application).



At the end of the quest, the time spent on completing the quest is adjusted depending on how successfully the teams contacted the reactor. I must say right away that as a result of the first and only testing at the moment, everyone stopped paying attention to time, and just walked around the beautiful places of the Bitsevsky forest, in particular, the bald mountain and the old Slavic temple, performed tasks and enjoyed the September sun so softly warming with honey ...



Old Slavic temple




Honey sun




application



The application is written in Python. Frontend (this is the input / output of data from the player) was created using vuejs, jquery and flask. Backend (reactor logic and event processing) was written in pure python. Communication between frontend and backend was carried out using a database (SQLite). The database was wrapped with sqlachemy. To deploy the application used Yandex Cloud.



This is not an advertisement.
But thanks to the 4000 bonus rubles that Yandex gives for testing the cloud, this bonus was very handy;)







Frontend



The server side is written in Python (flask). The client part (interface for the player) was created using vuejs, jquery and a little render of page templates on the server.

When you go to the website, the participant is asked to enter a code unique to each team, after which it enters the main menu.



Login




The main menu consists of 5 elements:



  1. Charts with reactor parameters
  2. Enter promotional code
  3. Control Panel
  4. Map
  5. Log off


In the graph viewing window, the player can track the current and several previous states of the reactor. Also look at the rate of change of power, the chance of an accident, their number, as well as see victory point counters.



Graphs






In the window for entering promo codes. A participant can activate a promotional code received in one way or another, as a rule, after a team passes some test.



Promotional Codes






The reactor status is also available in the control panel, similar to the graph view panel. Then a stack of current events is displayed with an indication of the name, team, counter until the end of the event, as well as the possibility of canceling it (only your own).



Control Panel






And of course the actions themselves. They are unique to each team. For example, a wide range of actions is available for operators to control the reactor (control rods, flow rate of the working fluid, adding boron, etc.). For the government, these are all sorts of requirements and restrictions on the operation of the unit (increase the load, put pressure on the station staff). For saboteurs, this is the failure of pumps, bribing operators, etc.



For each team, actions are available that cancel the actions of others, such as an anti-terrorist operation, introducing a spy into the government or bribing officials (of course, there isnโ€™t such a thing in real life, but to balance the game, we had to invent things).



All actions of the parties are described in the table:



Table
Title Access Power change Time of action Cost Comment
crash reactor to 0 instantly It works automatically with the probability of the parameter chance of an accident. Every step is checked.
iodine pit reactor -0.1 / step instantly It works automatically at a load of less than 50%
discharge admins power, speed, all counters to 0, cancellation of all current actions instantly
raise the rods operators +5 for the entire duration of the action 5 steps 10
lower the rods operators -5 for the entire duration of the action 5 steps 10
increase flow operators +5 for the entire duration of the action 10 steps 5
reduce consumption operators -5 for the entire duration of the action 10 steps 5
boron operators -5 for the entire duration of the action 2 steps 25
AZ-5 operators power up to 0 instantly one hundred
blow up the pump saboteurs +25 all time 1 step 250
break the pump saboteurs +25 all time 10 step fifty
fire saboteurs to 0 instantly 300
push on operators government +5 for the entire duration of the action 5 steps 10
virus saboteurs from -15 to 15 by chance 15 steps 150
bribe the chief engineer saboteurs -20 for all time 20 steps 10
bribe the chief engineer saboteurs +20 all time 20 steps 10
keep silent about the accident government -1 to the accident counter instantly 75
save on rods government +10 for the entire duration of the action 60 steps 25
harass operators saboteurs 50% cancellation of operators 12 steps 150
introduce a spy into the government saboteurs 50% cancellation of government 12 steps 150
anti-terrorist operation government 50% cancellation of saboteurs 12 steps 150
intimidate staff government 50% cancellation of operators 12 steps 150
conduct an inspection at the station operators 50% cancellation of saboteurs 12 steps 150
bribe officials operators 50% cancellation of government 12 steps 150




In the map tab, a map is available from the Yandex Maps application created using the map designer (for more details, see Preparing for the game ).



Map




Backend



The entire backend is written in pure Python. In fact, the entire code consists of one Reactor object (reactor, power unit, station) with a power or state parameter. Each step time step (set manually, we set 1 second), the state changes depending on the events that occurred at this step. The stack of current events is updated every step by accessing the database, which in turn is filled in by the game participants from the web application interface.



For convenience, all events are collected in an event factory and receive the reactor object and its unique identifier (line number in the database) as an input. Since the reactor class object knows everything that happens in the application, events accordingly know everything from it, which makes the process of creating them very flexible.



For testing, bots were also created that acted according to some strategy. To describe these logics, a strategy factory has also been created.



A factory was also created for scoring so that the logic of scoring could be varied from game to game. The basic logic created one victory point at each time step and gave it to one of the teams depending on the power level at that step (50-75 - operators, 75-100 - government, 0 and more than 100 - saboteurs, in other cases to no one).



Quest



Training





The main preparation consisted of finding locations for the quest, as well as preliminary testing of the application in the laboratory.



To prepare the locations, a week before the event, the organizer was abandoned in Bitsevsky Forest. He walked around the territory and found interesting and eye-catching places, in each place he performed three operations:



  1. I recorded geolocation (using the Yandex Maps application yandex.ru/maps );
  2. Measured network quality (using the Speedtest application www.speedtest.net );
  3. Took a photo or video location.


As a result, 30 locations were collected (10 for each team).



Yandex Maps made it possible to greatly simplify the creation of a map, due to the yandex.ru/map-constructor map builder. It allows you to add your location, zones and all kinds of marks to the map. Then integrate it into your application in the form of JavaScript or iframe code or place it as a link, and at worst, just print it. Locations can be added by importing them from an XLSX, CSV, KML, GPX, or GeoJSON file. The only inconvenience was the impossibility of importing locations from ordinary Yandex maps directly into the constructor (at least we did not find it), I had to interrupt them into an xlsx table and import it already. Zones with poor network quality were highlighted in the map designer as a red area.



Map




The day before the game (well, as usual) we tested the game with 3 people (1 from each team). In general, there were no special comments, we only slightly adjusted the preliminary estimate of the cost of the teams. I note right away that the game itself revealed some problems (in conclusion), and the conclusion is that we could hardly find out about them in greenhouse room conditions.



A game



On the morning of September 14, 2019, we gathered participants in the Bitsa Forest. In the beginning, our athlete, Komsomol member and just a good scientist carried out incendiary morning exercises.



Then the participants were divided into teams, gave them a starting promotional code and announced the start of the game.



Teams slowly dispersed to locations (now I understand, probably because they tried to figure out the application along the way). In the first 10-15 minutes, the players had difficulties, but then they kind of got used to it and their attention turned to earning promotional codes.



For greater excitement, we highlighted a special character in a headdress that was visible from afar, who visited teams and asked questions for promotional codes (at the same time, he corrected the jambs in the quest).



Special character




I must say that having fully focused on the application, we completely abandoned the preparation for the quest, as a result, we completed part of the props already at night before the quest, and forgot to buy part. For example, due to the fact that we forgot to buy a sufficient number of buckets, we had to mentally compete with water pouring, since our players had a well-developed imagination.



In general, the teams began to do tasks not in order to pass all the points faster, but to get more than gold promotional codes. It came to impudent begging, which of course was severely suppressed. At some point, the bonus promotional codes we ran out, but the teams have no desire to get them. So the conclusion is to prepare more promotional codes and questions / tasks for receiving them.



Perhaps the most memorable moment for me was the call of a participant from the government team to the operator team with outrage at the quality of their work, and the requirements:



  1. Increase power faster (at some point, the operatorโ€™s team, having a large margin of victory points, was unprofitable to increase it and they kept the unit at low loads),
  2. It is better to regulate power at high loads (since it was with them that the saboteurs began to do all sorts of dirty tricks, and the operators did not always have time to respond to them).


To which the operators reasonably replied that they did not have enough action points (read: financing) to fulfill their wishes and would be glad if the government team shared a bit of their own. Unfortunately, the transfer of points was not implemented, but in the future, given this precedent, we will certainly implement it. Also in the future, it would be nice to add chat to the application for correspondence between teams in order to encourage teams to more actively interact with each other.



In general, this photo characterizes the work process in locations well: someone solves the task, someone controls the reactor, someone enjoys life, and somewhere in the background a dog is hiding.



Process




There she is!




Eventually



Something happened, something not. The main problems were not very well-chosen reactor parameters, which negatively affected the gameplay:



  1. accident growth rate;
  2. inertia of the reactor.


The first one almost immediately collapsed the reactor to 0 after reaching critical power values โ€‹โ€‹(more than 100) and the operators simply did not have time to react, since they only had a few seconds to do this (although there are examples when they managed to do this, for example, adding boron to reactor core).



Reactor rescue






The second made the events quick enough and again did not allow the participants to assess the situation and make an informed decision. In reality, of course, this is probably what happens, but do not forget that the teams still ran around locations and performed various tasks, which distracted them from the block. It was necessary, at a minimum, to lay in the program the ability to control parameters in real time, which we did not do.



As part of the quest, we specifically failed the question with props, as a result of which we had to come up with a task in real time with improvised materials. Well, the very meaning of the quest was transformed from quickly moving around locations in order to be the first to receive promotional codes for generating bonus points (oh, this thirst for profit ...). But most importantly, in the end we got a cheerful mood, many memorable moments, as well as the satisfaction of our own curiosity.



The statistics of the game can be found in reactor-quest.github.io , an interactive schedule (on personal computers), at the bottom you can select the time range of interest for a more detailed view of it.



The application code is posted on GitHub github.com/reactor-quest/reactor-quest you can freely use it.



All good and peaceful atom, a team of young scientists IBRAE RAS!










All Articles