Вводится высота стола, ширина, материал и количество места для протягивания ног. Выводится, стоит ли сидеть за таким столом.
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