Нам нужно решить сложную проблему, когда нам нужно проверить множество сложных правил из нескольких источников в системе, чтобы решить, удовлетворяет ли система этим правилам или как ее следует изменить, чтобы удовлетворить их.
Мы изначально начали использовать алгоритмы Constraint Satisfaction Problem (используя Choco ), чтобы попытаться решить его, но поскольку число правил и переменных будет меньше ожидаемого, мы собираемся составить список всех возможных конфигурации в базе данных и использование нескольких запросов на основе правил для фильтрации этого списка и поиска решений таким образом.
Есть ли ограничения или недостатки систематического поиска по сравнению с использованием алгоритмов решателя CSP для разумного количества правил и переменных? Это сильно повлияет на выступления? Это уменьшит ограничения, которые мы можем реализовать?
В качестве примеров :
Вы должны представить это с гораздо большим числом переменных, гораздо большими областями определения (но всегда дискретными) и большим количеством правил (а некоторые гораздо более сложными), но вместо того, чтобы описывать проблему как:
x in (1,6,9)
y in (2,7)
z in (1,6)
y = x + 1
z = x if x < 5 OR z = y if x > 5
И, отдавая его решателю, мы построим таблицу:
X | Y | Z
1 2 1
6 2 1
9 2 1
1 7 1
6 7 1
9 7 1
1 2 6
6 2 6
9 2 6
1 7 6
6 7 6
9 7 6
И использовать такие запросы, как (это просто пример, чтобы помочь понять, на самом деле мы бы использовали SPARQL для семантической базы данных):
SELECT X, Y, Z WHERE Y = X + 1
INTERSECT
SELECT X, Y, Z WHERE (Z = X AND X < 5) OR (Z = Y AND X > 5)