Как проверить ограничения между элементами в списке / это Программирование ограничений?

У меня есть много списков переменного размера, содержащих экземпляры одного и того же класса с атрибутом foo, и для каждого списка я должен применять такие правила, как :

  • если есть элемент foo = A, не может быть элементов с foo в [B, C, D]
  • если есть элемент foo = X, там должен быть хотя бы один с foo в [Y, Z]
  • может быть между MIN и MAX элементами foo = BAR

, объединение трех вышеуказанных правил, вероятно, будет достаточно, чтобы выразить любое подобное ограничение, которое мне когда-либо понадобится. Это что-то вроде проверки зависимостей в программных пакетах, но у меня их количество и нет версий :)

наивный подход был бы следующим:

R_CONFLICT={ A: [B,C,D] }
R_DEPENDS ={ X: [ [Y,Z], W, .. } # means: A depends on either Y or Z, and W
R_MIN     ={BAR: n, BAZ: m}
R_MAX     ={BAR: o, BAZ: p}
# now just loop over lists to check them..

Это проблема программирования ограничений ? На самом деле мне не нужно решать что-то, чтобы получить результат, мне нужно проверить свой список на соответствие некоторым ограничениям и проверить, удовлетворены они или нет. Как бы вы классифицировали эту проблему и как бы вы ее решили?

Как бы то ни было, я кодирую на Python, но я приветствую общий программный ответ :) Если окажется, что я должен углубиться в программирование с ограничениями, я вероятно, начнем с попытки ограничения python .

6
задан Luke404 8 September 2010 в 09:19
поделиться