## 3 Results
### Memory Complexity  
As we have already mentioned, the size of a system grows much faster than the number of task elements. The same is true for the memory complexity of matrix multiplication operations described in Section 2.4. We have tested how limiting the number of results of convolution operation affects memory usage of the tool [40]. All measurements were done using multi-threaded F# implementation on a PC with 64 bit Ubuntu 20.04 operating system installed and the previous example regarding non-functional requirements was used for testing. We carried out three different tests reducing the number of results to 500, 10,000, and leaving the number of results unlimited. In the first case, the peak memory usage was about 700 MB before walks of the length of 15 arcs were found. The second case resulted in memory consumption around 15 GB before similar walks were found. The last case did not succeed on a machine with 64 GB of RAM. To deal with the memory complexity, we propose three methods to reduce the number of results:  
Figure 14: Bigraph patterns to detect whether a collision between robots may occur during a scenario. The two patterns differ only in type of the relocated object. (**a**) The first pattern. (**b**) The second pattern. * _First N_--a result of the convolution operation performed during a matrix multiplication is limited to the first \(N\) results. This way of searching for behavior policies is suitable when the first results found satisfy non-functional requirements;
* _Best N_--a result of the convolution operation is constrained to the \(N\) best results evaluated using an evaluation function (discussed below). This method of searching for walks is useful when a desired walk should have a certain length;
* _All_--the result of a convolution operation is not constrained in any way. Useful only for small systems to verify model correctness. In the case of _best N_ method, there is a need is to define an evaluation function for partial solutions. We propose a SAT configuration evaluation function based on the involvement of task objects. The evaluation function returns a higher score the more objects are involved equally. The formula for calculating the evaluation function value can be expressed as below:  
\[E(i)=m=0,\forall_{(o_{i},t)\in i}m=m+\frac{t}{t_{max}}\qquad i\in I\]  
\(t_{max}----\) The largest engagement of any object. Table 21 shows the values of the proposed evaluation function for a few example SAT configurations. The prepared tool [40] for walk construction offers six strategies for finding solutions:  
* _All first found_--Returns all walks leading to the goal state with the shortest length;
* _First N best found_--returns all walks leading to the target state. The matrix multiplication operation is constrained by _best N_ method;
* _All up to a certain length_--returns all walks leading to the target state of a length no greater than a given value;
* _First N up to a certain length_--returns all walks leading to the target state with a length no greater than a given value. The matrix multiplication operation to find walks in a state space is constrained by _first N_ method which results in each set of walks of the same length being allowed to have a count of at most \(N\) elements;
* _Best N up to a certain length_--returns all walks leading to the target state with a length no greater than a given value. The matrix multiplication operation to find walks in a state space is constrained by _best N_ method which results in each set of walks of the same length being allowed to have a count of at most \(N\) elements. We summarized all of the above strategies in Table 22. \begin{table}
\begin{tabular}{c c c} \hline \hline \(i\) & \(t_{max}\) & \(E(i)\) \\ \hline \(((1,2),(2,2),(3,2))\) & 2 & 3 \\ \(((1,6),(2,0),(3,0))\) & 6 & 1 \\ \(((1,2),(2,4),(3,0))\) & 4 & 1.5 \\ \(((1,1),(2,1),(3,4))\) & 4 & 1.5 \\ \(((1,3),(2,2),(3,1))\) & 3 & 2 \\ \(((1,1),(2,1),(3,0))\) & 1 & 2 \\ \hline \hline \end{tabular}
\end{table}