Нужна помощь в написании программы LISP с ACL2 с использованием ProofPad - PullRequest
0 голосов
/ 11 ноября 2019

;;;TODO-1 Определяет функцию list-Average, которая вычисляет среднее значение списка.

;;;Примечание: если список пуст, эта функция должна вернуть -1000

;;;Для этой функции необходимо выполнить не менее 5 модульных тестов (deflabel todo-1)

(среднее значение по списку (l)

0; заменить эту строку на правильное определение

)

(ожидание чека (среднее по списку (список 4 6 5)) 5)

(ожидание чека (среднее по списку (список 12 17 16)) 15)

;;;TODO-2 Определяет функцию кластер-центров, которая вычисляет центры по

;;;список элементов кластера

;;;Убедитесь, что у вас есть как минимум 5 модульных тестов для этой функции

(deflabel todo-2)

(defun cluster-центров (кластеров)

ноль; замените эту строку направильное определение

)

(проверка-ожидание (кластер-центры (список (список 4 6 5) (список 12 17 16) (список 23 27))) (список 5 15 25))

;;;TODO-3 Определить ближайший кластер, который находит центр кластера,

;;;ближе всего к конкретной точке. Если два центра одинаково близки, выберите

;;;тот, который находится раньше в списке.

;;;Обязательно проведите не менее 5 юнит-тестов для этой функции

;;;Подсказка;Взгляните на определение и определение уравнений для "min"

;;;функция, заданная в классе.

(deflabel todo-3)

(определение ближайшего кластера (центры точек)

0; замените эту строку на правильное определение

)

(ожидаемый чек (ближайший кластер 6 (список 5 15 25)) 5)

(ожидающий чек (ближайший кластер 14 (список 5 15 25)) 15)

;;;TODO-4 Определите функцию add-to-cluster, которая добавляет точку к

;;;кластер это принадлежит. Можно предположить, что центры кластеров и

;;;элементы кластера - это списки одинаковой длины (как описано выше)

;;;Обязательно проведите как минимум 5 модульных тестов для этой функции

;;;Подсказка: обратите внимание, что в этой функции нет оснований ожидать, что центры

;;;на самом деле центры кластеров в кластерах!

(deflabel todo-4)

(defun add-to-cluster (точки кластеров центров с ближайшими центрами)

ноль; замените эту строку на правильное определение

)

(ожидаемый чек (add-to-cluster 6 5 (список 5 15 25)) (список (список 4 6 5) (список 12 17)16) (список 23 27)))

          (list (list 6 4 6 5) (list 12 17 16) (list 23 27)))

(проверка-ожидание (добавление в кластер 14 15 (список 5 15 25)) (список (список 4 6 5) (список 12 17 16)(список 23 27)))

          (list (list 4 6 5) (list 14 12 17 16) (list 23 27)))

;;; TODO-5 Определите функцию add-all-points-to-cluster, которая добавляет все точки

;;; всписок к соответствующему кластеру. Обязательно добавьте точки так, чтобы

;;; точки в возвращенном кластере были в том же порядке, что и в

;;; список ввода

;;; Обязательно проведите не менее 5 юнит-тестов для этой функции

;;; Совет: обратите внимание, что в этой функции нет оснований ожидать, что центры

;;; на самом деле центры кластеров в кластерах!

(deflabel todo-5)

(defun add-all-points-to-cluster (кластеры центров точек)

ноль;замените эту строку на правильное определение

)

(ожидание проверки (добавление всех точек в кластер (список 6))

                                     (list 5 15 25)

                                     (list nil nil nil))

          (list (list 6) nil nil))

(ожидание проверки(добавить все точки в кластер (список 6 24)

                                     (list 5 15 25) 

                                     (list (list 4 6 5) (list 12 17 16) (list 23 27)))

          (list (list 6 4 6 5) (list 12 17 16) (list 24 23 27)))

;;; TODO-6 Определить функцию под названием step-k-means, которая делает один шаг в k-средних

;;; алгоритм. То есть, учитывая список элементов кластера, он возвращает

;;; новый список элементов кластера (после выяснения, что центр кластера действительно

;;; ближайший к каждому из элементов кластера)

;;; Обязательно проведите не менее 5 модульных тестов для этой функции

(deflabel todo-6)

(defun step-k-means (кластеры)

ноль;заменить эту строку на правильное определение

)

(проверка-ожидание (step-k-means (список (список 4 15 5) (список 12 26 16) (список 23 7)))

          (list (list 4 5 7) (list 26 23) (list 15 12 16)))

;;; TODO-7 Определить функцию run-k-средних, которая выполняет "n" шагов

;;; алгоритм k-средних

;;; Убедитесь, что у вас есть как минимум 5 модульных тестов для этой функции

(deflabel todo-7)

(defun run-k-means (n ​​кластеров)

ноль; заменить эту строку на правильное определение

)

(проверка-ожидание (run-k-means 2 (список (список 4 15 5) (список 12 26 16) (список 23 7))))

          (list (list 4 5 7) (list 26 23) (list 15 12 16)))

;;; TODO-8 Определите начальные центры функции, которые находят "k", равномерно распределенные

;;; центры кластеров между двумя границами. Обратите внимание, чтобыть фиксированным

;;; количеством места между каждым центром кластера, и что должно быть половина

;;; это количество между нижним (верхним) пределом и первым (последним)центр

;;; Убедитесь, что у вас минимум 5 единиц тестаts для этой функции

(deflabel todo-8)

(defun начальные центры (k нижний верхний)

ноль;замените эту строку на правильное определение

)

(ожидаемая проверка (начальные центры 5 0 100)

          (list 10 30 50 70 90))

;;; TODO-9 Определите функцию k-means-clustering, которая объединяет перечисленные выше функции

;; для выполнения кластеризации k-средних по списку точек.

;;; параметры k и n задают количество кластерови

;;; число шагов, которые необходимо предпринять для алгоритма k-средних. Нижний и верхний

;;; - это диапазон, используемый для поиска кластеров

;;; Обязательно проведите не менее 5 модульных тестов для этой функции

(deflabel todo-9)

(defun k-средних-кластеризация (kn нижние верхние точки)

ноль; заменить эту строку на правильное определение

)

(проверка-ожидание (k-средних-кластеризация 3 10 0 40 (список 4 6 5 12 17 16 23 27))

          (list (list 4 6 5) (list 12 17 16) (list 23 27)))

;;; TODO-10 Один из способов измерить качество найденных кластеров -

;;; вычислить сумму расстояний от каждого элемента кластера. вход в его кластер

;;;центр. Напишите небольшую теорию, которая гласит, что это количество «ошибок» никогда

;;;уменьшается после запуска run-k-means, так что решение кластеризации получает

;;;все лучше и лучше (конечно, пока оно не достигнет оптимального значения).

;;;Подсказка используется (random-Между-списком 0 9) для создания списка случайных чисел

;;;от 0 до 9.

;;;ПРИМЕЧАНИЕ: напишите немного теории. ACL2 было бы очень трудно доказать

(deflabel todo-10)

(defproperty-program k-means-Улучшено на каждом шаге

nil nil;замените эту строку на правильное свойство

)

...