У меня есть следующий решатель в pycsp3, который отлично работает:
Код: Выделить всё
from pycsp3 import *
def bibd(num_participants, block_size, lambd):
clear()
num_blocks = int(
(lambd * num_participants * (num_participants - 1))
/ (block_size * (block_size - 1))
)
num_replicas = int((lambd * (num_participants - 1)) / (block_size - 1))
x = VarArray(size=[num_participants, num_blocks], dom={0, 1})
satisfy(
# constraints on rows
[Sum(row) == num_replicas for row in x],
# constraints on columns
[Sum(col) == block_size for col in columns(x)],
# scalar constraints with respect to lambda
[row1 * row2 == lambd for row1, row2 in combinations(x, 2)],
# Increasingly ordering both rows and columns
LexIncreasing(x, matrix=True),
)
if solve() is SAT:
print(values(x))
Поэтому я думаю, поскольку это матричные операции, CUDA может значительно ускорит процесс, только я никогда не программировал решатель CUDA.
Буду признателен за любую помощь
Подробнее здесь: https://stackoverflow.com/questions/790 ... -with-cuda