Skip to content

Spanri/find-table

Repository files navigation

ВЫБОР СТОЛА, проект по нечеткой логике

Вводится высота стола, ширина, материал и количество места для протягивания ног. Выводится, стоит ли сидеть за таким столом.

Где что? (структура проекта)

src/config

Здесь входные данные и немного логики работы программы. В файле index.js ссылки на все остальные файлы в папке, то есть он нужен для объединения файлов. Файл variables.js - входные и выходные переменные. Файл rules.js - правила в виде массива из [x0, x1, x2, x3, y], где иксы - входные переменные, а игрек - выходная. Также там логика парсинга этого массива для преобразования его в формат данных, нужный для других функций. Файл fuzzyAreas.js определяет логику работы фаззификации в случае, если нечеткое высказывание является треугольной ФП или трапециевидной. Агрегирование происходит далее в src/components/Home.vue при нажатии кнопки ПОСЧИТАТЬ.

src/components

Здесь 2 файла. Task.vue содержит код, который нужен для отображения страницы задания. В логике работы программы не учавствует. В файле Home.vue можно увидеть код для отображения основной страницы с вводом, выводом и логикой вывода.

Логика работы программы

Когда вводится значение в поле ввода входной переменной, автоматически происходит подсчет степеней истинности для каждого нечеткого высказывания (то есть фаззификация) и их отображение справа от поля ввода.

При нажатии на кнопку ПОСЧИТАТЬ начинает действовать функция getResult, определенная в файле Home.vue. Ее цель - получить выходную переменную (точнее ее объект с определенными там переменными результата, названия нечеткого высказывания, диапазона и так далее). Функция берет все правила, определенные в файле src/config/rules.js и для каждого правила проводит агрегирование. Агрегирование происходит с помощью функции checkValue. После агрегации среди всех "результатов" правил находится максимальный результат, который и становится итоговым результатом работы программы. Результат содержит массив из всех входных переменных и, конечно, выходной переменной.

Фаззификация

Функция checkValue берет правило, находит там все диапазоны нечетких высказываний, для каждого запускает функцию fuzzyValue и собирает результат работы этой функции в один массив. Функция fuzzyValue высчитывает степень истинности для переданного в нее нечеткого высказывания в зависимости от того, какое оно по типу ФП - треугольное или трапециевидное. С помощью fuzzyValue также происходит подсчет массива значений, которые видны справа от поля ввода.

Агрегирование

После проделанных действий функция checkValue получает для каждого правила массив из степеней истинности для каждого нечеткого высказывания. После этого находится минимум (ибо все правила через AND) в массиве. В итоге, функция checkValue берет правило и возвращает число - минимальная степень истинности.

Активизация подзаключений

Этого этапа нет, потому что все весовые коэффициенты равны 1.

Аккумуляция заключений

Для нашей выходной переменной необходимо определить результирующую функцию принадлежности. Для этого нужно объединить все функции принадлежности этой выходной переменной. В коде это напрямую не описано.

Дефаззификация

Последний этап, на котором находится итоговая количественная переменная с помощью некоторого метода дефаззификации. В данной программе используется метод последнего максимума. В коде это происходит в функции getResult файла Home.vue.

Если подходящего правила нет, то результатом является среднее значение выходной функции, в данном случае "Для подростка".

Как запустить проект у себя на машине

Важно: если хотите запустить проект у себя на машине, то необходимо иметь на машине node.js (и npm, но он внутри node.js и так есть).

Установить зависимости

npm i

Запустить для дева (или чтобы посмотреть в действии на localhost:8080)

npm run serve

Собрать для прода (например, чтобы запушить на github pages, тем, кто просто смотрит проект, это не надо)

npm run build

Запустить линтер (тем, кто просто смотрит проект, это не надо)

npm run lint

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors