Я пытаюсь исследовать литературу по алгоритмам для решения конкретной проблемы, но не думаю, что знаю правильный поисковый запрос, чтобы описать то, что я ищу.
Цель состоит в том, чтобы иметь доступную для запросов базу данных правил, где каждое правило задано как условия кортежа - некоторые обязательные, некоторые необязательные. Запрос в систему состоит из кортежа фактов о мире и возвращает список всех правил, обязательные условия которых совпадают с фактами в запросе. Каждое правило оценивается по количеству × весу сопоставленных необязательных условий, и таким образом список сортируется.
Так, например, если бы я использовал это для написания службы сопоставления соседей по комнате, правила были бы примерно такими
alice : { mandatory : { nightowl = no, smoker = no, pets < 2 },
optional : { pets = 0 } }
bob : { mandatory : { nightowl = yes, pets = 0 },
optional : {smoker = no} }
charlie : { mandatory : { musician = no },
optional : {nightowl = yes, pets < 2 } }
и запрос будет
( nightowl = no, pets = 1, smoker = no, musician = no )
вернуть
( charlie : 1/1 mandatory matched, 1/2 optional matched,
alice : 3/3 mandatory matched, 0/1 optional matched )
Я знаю, что это проблема, которую уже много раз решали в информатике, но я не знаю, по каким ключевым словам искать. Это не функция расстояния , потому что некоторые условия являются дискретными отклонениями истинности / ложности, тогда как другие являются необязательными или имеют линейные оценки.Это не сопоставление с образцом или нечеткое сопоставление , потому что они, похоже, относятся в основном к строкам и графикам. Это не производственная система или механизм правил , как алгоритм Rete , потому что он не делает выводов IF-THEN из правил и не запоминает факты из один звонок к другому.
Как он называется?
Мне нужны только исследования или описания алгоритмов, а не фактические реализации. Наше приложение имеет такие серьезные ограничения реального времени и памяти, что нам в любом случае придется создать собственную реализацию, но я хотел бы знать, что еще было сделано в этом пространстве, прежде чем я начну изобретать код. Документ ACM, из которого я мог бы искать цитаты, тоже был бы отличным.