Как проверить работоспособность клипов? - PullRequest
0 голосов
/ 16 июня 2019

У меня проблема с тестированием производительности Clips. Какую производительность нужно проверить с помощью Clips? Как проверить ее производительность? И как мне разработать типовые правила и данные для тестирования производительности Clips.

Я уже некоторое время изучаю программирование клипов. И я могу написать некоторые правила. Я использовал несколько правил, чтобы проверить время рассуждения Clips / 6.30, но я не думаю, что это убедительно

1 Ответ

0 голосов
/ 16 июня 2019

Тестирование производительности - очень широкая тема, но давайте разделим ее на две широкие категории: специфические и общие.

Если вы тестируете производительность конкретной программы, вы запускаете ее с набором репрезентативных примеров использования и смотрите, является ли производительность приемлемой.

Если вы тестируете общую производительностьвы пытаетесь создать примеры гипотетического использования, которые варьируются от наилучшего до наихудшего сценариев для алгоритмов обработки правил.Для этих случаев полезно иметь некоторое представление об используемых алгоритмах (в случае CLIPS - алгоритм повторных вычислений), но в целом большинство тестов правил тестируют производительность с большим количеством правил, большим количеством фактов или комбинациейдва.

Одним из улучшений, внесенных в CLIPS 6.3, является использование хеш-таблиц для хранения частичных совпадений.В CLIPS 6.24 вы видите следующую базовую производительность для простого правила, которое ищет тройки фактов, имеющих одинаковое значение, представленное переменной? X.

         CLIPS (V6.24 06/15/06)
CLIPS> 
(defrule match
   (a ?x)
   (b ?x)
   (c ?x)
   =>)
CLIPS> (timer (loop-for-count (?i 25) (assert (a ?i) (b ?i) (c ?i))))
0.000200986862182617
CLIPS> (reset)
CLIPS> (timer (loop-for-count (?i 10000) (assert (a ?i) (b ?i) (c ?i))))
19.6043310165405
CLIPS> 

Производительность в этом случае не масштабируется линейно, какчисло фактов увеличивается в 400 раз.

В CLIPS 6.3 вы видите линейное масштабирование для этого сценария:

         CLIPS (6.31 5/9/19)
CLIPS> 
(defrule match
   (a ?x)
   (b ?x)
   (c ?x)
   =>)
CLIPS> (timer (loop-for-count (?i 25) (assert (a ?i) (b ?i) (c ?i))))
0.000128
CLIPS> (reset)
CLIPS> (timer (loop-for-count (?i 10000) (assert (a ?i) (b ?i) (c ?i))))
0.049131
CLIPS>

Вы можете найти некоторые программы тестов для CLIPS на https://sourceforge.net/p/clipsrules/code/HEAD/tree/branches/63x/examples/. К ним относятся широко используемые тесты вальса и манер в дополнение к тесту sudoku и некоторые другие в каталоге тестов.

...