Скачиваний:
0
Добавлен:
26.10.2025
Размер:
1.13 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ

ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ

им. проф. М. А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Г.В. Верхова

П.А. Прокофьев

МЕТОДЫ И МОДЕЛИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА В УПРАВЛЕНИИ ТЕХНИЧЕСКИМИ СИСТЕМАМИ

Учебно-методическое пособие

по выполнению лабораторных работ

САНКТ-ПЕТЕРБУРГ

2023

Оглавление

ВВЕДЕНИЕ 4

Лабораторная работа № 1. «Разработка и экспериментальное исследование формальной логической модели» 5

Эксперимент 1 5

Задание на выполнение 5

Варианты заданий 6

Теоретические материалы 6

Эксперимент 2 10

Задание на выполнение 10

Варианты заданий 10

Теоретические материалы 13

Структура отчета по лабораторной работе 14

Рекомендуемые интернет-ресурсы 14

Лабораторная работа № 2. «Программная реализация структур генетического алгоритма» 16

Задание на выполнение лабораторной работы 16

Варианты заданий 16

Теоретические материалы 24

Структура отчета по лабораторной работе: 35

Рекомендуемые интернет ресурсы 35

Лабораторная работа № 3. «Программная реализация и экспериментальное исследование генетического алгоритма» 37

Задание на выполнение лабораторной работы 37

Варианты заданий 38

Теоретические материалы 40

Структура отчета по лабораторной работе: 41

Лабораторная работа № 4. «Программная реализация и экспериментальное исследование персептрона и алгоритма обучения» 43

Задание на выполнение лабораторной работы 43

Варианты заданий 43

Теоретические материалы 44

Структура отчета по лабораторной работе: 47

Рекомендуемые интернет ресурсы 47

Лабораторная работа № 5. «Программная реализация и экспериментальное исследование нейроэволюционного алгоритма» 49

Задание на выполнение лабораторной работы 49

Теоретические материалы 49

Структура отчета по лабораторной работе: 51

Рекомендуемые интернет ресурсы 52

ВВЕДЕНИЕ

Лабораторная работа № 1. «Разработка и экспериментальное исследование формальной логической модели»

Цель работы: приобретение навыков создания формальных логических моделей на языке логического программирования Prolog.

Трудоемкость: 6 академических часов.

Лабораторная работа выполняется в составе бригад по 2 человека. Номер варианта определяется по последней цифре студенческого билета (вариант №10 соответствует цифре 0) или задаётся преподавателем.

Эксперимент 1

Задание на выполнение

Разработать программу на языке Prolog, реализующую формальную логическую модель согласно заданному варианту. База знаний, определяющая генеалогическое древо, представленное на рис. 1.1, является общей для всех вариантов.

Рис. 1.1 Генеалогическое древо

Варианты заданий

Варианты заданий указаны в табл. 1.1.

Таблица 1.1.

Варианты заданий для лабораторной работы №1, эксперимент 1

Задание

Определить все пары «отец – ребенок».

Определить все пары «брат – сестра»

Определить число братьев и сестер у Игната.

Определить все пары «мать – дочь».

Определить все пары «брат – брат/сестра».

Определить двоюродных братьев и сестер Николая.

Определить все пары «отец – сын».

Определить все пары «брат – брат»

Определить племянников Петра.

Определить все пары «мать – сын».

Определить все пары «сестра – сестра».

Определить, сколько племянников у Петра.

Определить все пары «дед – внук»

Определить всех детей Ксении.

Определить, сколько детей у Ирины.

Определить все пары «двоюродный брат – двоюродная сестра»

Определить зятя Нестора.

Определить дочь Ирины.

Определить жену Нестора.

Определить все пары «дядя – племянник»

Определить, сколько всего в генеалогическом древе мужчин.

Определить всех мужчин.

Определить все пары «муж – жена».

Определить, сколько детей у Вячеслава.

Определить все супружеские пары.

Определить предка Юлии.

Определить всех предков Дмитрия.

Определит все пары «правнук – правнучка».

Определить всех потомков Нестора.

Определить, сколько потомков у Ивана.

Теоретические материалы

Пример кода на языке Prolog, реализующий обработку генеалогического древа представлен в листинге 1.1.

Листинг 1.1. Программа обработки генеалогического древа

% Copyright implement main     open core, console domains     gender = male; female.     name = symbol. class facts     person : (name, gender).     parent : (name, name). class predicates     father : (name, name) nondeterm anyflow.     brother : (name, name) nondeterm anyflow.     uncestor : (name, name) nondeterm anyflow. clauses     person("Astor", male()).     person("Devid", male()).     person("Martin", male()).     person("Bob", male()).     person("Grass", male()).     person("Nic", male()).     person("Yan", male()).     person("Ivan", male()).     person("Pit", male()).     person("Ann", female()).     person("Kat", female()).     parent("Astor", "Devid").     parent("Astor", "Martin").     parent("Matrtin", "Bob").     parent("Devid", "Grass").     parent("Bob", "Nic").     parent("Bob", "Yan").     parent("Bob", "Ann").     parent("Grass", "Ivan").     parent("Grass", "Kat").     parent("Grass", "Pit").     father(X, Y) :-         parent(X, Y),         person(X, male()).     brother(X, Y) :-         parent(Z, X),         parent(Z, Y),         person(X, male()),         not(X = Y).     uncestor(X, Y) :-         parent(X, Y).     uncestor(X, Y) :-         parent(X, Z),         uncestor(Z, Y).     run() :-         nl,         write("Males"),         nl,         person(X, male()),         write(X),         nl,         fail.     run() :-         nl,         write("Females"),         nl,         person(X, female()),         write(X),         nl,         fail.     run() :-         nl,         write("Faters"),         nl,         father(X, Y),         write(X, " is the father of ", Y),         nl,         fail.     run() :-         nl,         write("Brothers"),         nl,         brother(X, Y),         write(X, " is the brother of ", Y),         nl,         fail.     run() :-         nl,         write("Pit`s brothers"),         nl,         brother(X, "Pit"),         write(X, " is Pit`s brothers"),         nl,         fail.     run() :-         nl,         write("Bob`s children:"),         nl,         father("Bob", Y),         write(Y, " is Bob`s child"),         nl,         fail.     run() :-         nl,         write("Is Ann Bob`s child?"),         nl,         father("Bob", "Ann"),         write(" is Bob`s child"),         nl,         fail.     run() :-         nl,         write("Female count"),         Result = [ X || person(X, female()) ],         Count = list::length(Result),         write("Female count = ", Count),         nl,         fail.     run() :-         nl,         write("Male count"),         Result = [ X || person(X, male()) ],         Count = list::length(Result),         write("Male count = ", Count),         nl,         fail.     run() :-         nl,         write("Pit`uncestors"),         nl,         uncestor(X, "Pit"),         write(X, " is Pit`s uncestor"),         nl,         fail.     run() :-         nl,         write("Devid`uncestors"),         nl,         uncestor(X, "Devid"),         write(X, " is Devid`s uncestor"),         nl,         fail.     run() :-         stdio::write("\nEnd"). end implement main goal     console::runUtf8(main::run).