You can download my Perkun slides from
I am very grateful to AIHelsinki, thank you!
The mathematics for the algorithm is not shown on the slides, but they are good in showing what this is all about. The examples are taken from the PerkunWars game (https://sourceforge.net/projects/perkunwars/). Maybe I will write again about the game a little:
You can be in one of three places: Wyzima, Novigrad, Shadizar. There are some NPCs (non-player characters). There is also a vampire. You can attack him but it is a good idea only when there are some NPCs around, because they are going to help you. One NPC is Dorban - a witcher who is constantly looking for the vampire. Two other NPCs (Pregor and Thragos) are avoiding the vampire.
All the NPCs are controlled by the Perkun interpreter. You can "chat" with them to see what their opinion is. If you take a look at the Pregor and Dorban specifications you will see that their payoff functions is different - Pregor "obtains" 100 points for not seeing the vampire and 0 points when he is seeing him. Dorban - on the contrary - "likes" to see the vampire (you can tell from his payoff function).
If you take a look at the source code of the PerkunWars you will see the class "npc" instantiated. This class is inheriting from the Perkun optimizer (perkun::optimizer_with_all_data). There is a separate process running for each NPC. These processes "talk" with the main process through pipes.