Simple CLI for validating SBIBD configurations and generating associated blocks.
This tool uses a combinatorial approach to generate possible configurations that will lead to a valid starting block. The first valid block encountered is used to generate the subsequent blocks, but even still this process is quite inefficient and will take an impossibly long time for large designs. Warnings are provided if the processing will take a long time.
Repeated values will be color coded as the same color for easy validation that the repetition number (r) is correct.
npm install -g sbibd
Options:
-V, --version output the version number
-v, --vVal <value> The value for param v
-r, --rVal <value> The value for param r
-l, --lVal <value> The value for param λ
-s, --skip <n> Skip the first n valid starting blocks
-d, --difference Output the difference set used to generate the starting block
-h, --help output usage information
If a skip value is given, the first n valid starting blocks discovered will be skipped
Basic usage:
sbibd -v 15 -r 7 -l 3
Sample run:
❯ sbibd -v 15 -r 7 -l 3 -d
[SUCCESS] Difference set modulo 15:
4 6 9 10 12 13 14
4 0 13 10 9 7 6 5
6 2 0 12 11 9 8 7
9 5 3 0 14 12 11 10
10 6 4 1 0 13 12 11
12 8 6 3 2 0 14 13
13 9 7 4 3 1 0 14
14 10 8 5 4 2 1 0
[SUCCESS] Symmetric BIBD:
0: { 0, 2, 5, 6, 8, 9, 10 }
1: { 1, 3, 6, 7, 9, 10, 11 }
2: { 2, 4, 7, 8, 10, 11, 12 }
3: { 3, 5, 8, 9, 11, 12, 13 }
4: { 4, 6, 9, 10, 12, 13, 14 }
5: { 5, 7, 10, 11, 13, 14, 0 }
6: { 6, 8, 11, 12, 14, 0, 1 }
7: { 7, 9, 12, 13, 0, 1, 2 }
8: { 8, 10, 13, 14, 1, 2, 3 }
9: { 9, 11, 14, 0, 2, 3, 4 }
10: { 10, 12, 0, 1, 3, 4, 5 }
11: { 11, 13, 1, 2, 4, 5, 6 }
12: { 12, 14, 2, 3, 5, 6, 7 }
13: { 13, 0, 3, 4, 6, 7, 8 }
14: { 14, 1, 4, 5, 7, 8, 9 }
Basic validation is performed to eliminate the need to wait for costly runs of the algorithm if the configuration is invalid.
While this program only works for symmetric balanced incomplete block designs, the necessary conditions for the existence a (v, b, r, k, λ)-BIBD are checked first:
λ(v - 1) = r(k - 1)
In semetric designs, v = b
and r = k
, so this becomes λ(v - 1) = r(r - 1)
Second validation is a partial check of the Bruck-Ryser-Chowla theorem, ensuring that the paramaters satisfy the following:
if there exists an SBIBD with parameters (v, k, λ), then if v is even, k - λ is a square