There will be a new command in svarog-0.0.4 (that has not been published yet). The command syntax is:
cout << precalculate(<depth>,<granularity>) << eol;
cout << precalculate(4,2) << eol;
This command generates (and prints to the standard output) a Svarog specification with a precalculated knowledge about the optimal actions for the given depth of planning and granularity.
The depth is the same parameter as the one passed to the loop command - it is the depth (or height) of the game tree. It should be a small integer.
The granularity should be a small integer value, preferably 2. Svarog will discretize the space of beliefs, which is a hypercube of n dimensions, with n being the amount of possible states for a given visible state. Then when planning it will be able to use the precalculated knowledge so that it searches for the closest node in the hypercube to the actual belief.
WARNING: For a reasonable specification running this command can take a couple days.
It should significantly improve the performance when planning.
In some cases the amount of possible states is still too large to build this discrete hypercube, even for a small granularity (2). For example when the amount of possible states equals 32 then the amount of nodes in the discrete hypercube is 4.29497e+09. In this case (whenever the amount is greater than 1024) Svarog will denote the visible state as "too complex". When encountered these visible states the planning should be done normally, although for the "future beliefs" we still may benefit of the precalculated cache knowledge.
The idea is that the computer analyses the given Svarog specification and performs planning for hypothetical visible states and some beliefs. Then it will have a list of "rules" of the form:
<visible state> x <belief> -> <optimal action>
It will clearly not cover all possible beliefs, but we will be able to find the closest rule to the actual belief in terms of the cartesian distance.