Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет лаба 1 Роменчева

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
463.27 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №1

по дисциплине «Системы искусственного интеллекта».

Вариант 16

Тема: «Разработка нечеткой модели прогнозирования.»

Выполнила студентка группы ИС3-1

Магальник Екатерина Борисовна

Руководитель: Романчева Нина Ивановна

МОСКВА – 2024

Дано:

В комнате находятся обезьяна, ящик и связка бананов, которая подвешена к потолку настолько высоко, что обезьяна может до нее дотянуться, только встав на ящик.

Нужно:

Найти последовательность действий, которая позволит обезьяне достать бананы

Предполагается:

  • обезьяна может ходить по комнате

  • двигать по полу ящик

  • взбираться на него

  • хватать бананы

Описание состояния этой задачи должно включать следующие

сведения:

  • местоположение обезьяны в комнате - в горизонтальной плоскости пола и по вертикали (т.е. на полу она или на ящике),

  • местоположение ящика на полу

  • наличие у обезьяны бананов

Это можно представить в виде четырехэлементного списка (ПолОб, ВертОб, ПолЯщ, Цель), где:

  • ПолЯщ - положение обезьяны и ящика на полу;

  • ПолОб - положение обезьяны на полу (это может быть двухэлементный вектор координат);

  • ВертОб - это константа П или Я в зависимости от того, где находится безьяна, на полу или на ящике;

  • Цель - это константа О или 1 в зависимости от того, достала ли обезьяна бананы или нет

Зафиксируем как константы три следующие точки в плоскости пола:

  • То - точка первоначального местоположения обезьяны;

  • Тя - точка первоначального расположения ящика;

  • Тб - точка пола, расположенная непосредственно под связкой бананов

Тогда начальное состояние задачи описывается списком (То, П, Тя, 0), а целевое состояние задается как любой список, последний элемент которого - 1.

Естественно определить операторы в этой задаче в соответствии с возможными действиями обезьяны:

  • Перейти (W) - переход обезьяны к точке W горизонтальной плоскости пола;

  • Передвинуть (V) - передвижение обезьяной ящика в точку V пола;

  • Взобраться - обезьяна взбирается на ящик;

  • Схватить - обезьяна хватает связку бананов

Условия применимости и действие этих операторов легко определить в виде правил продукций вида:

аргумент оператора -> результат оператора,

Причем X, Y, Z, W, V обозначают переменные:

  • Перейти (W): (X, П, Y, Z ) -> (W, П, Y, Z)

  • Передвинуть (V): (X, П, X, Z) -> (V, П, V, Z)

  • Взобраться: (X, П, X, Z) -> (X, Я, X, Z)

  • Схватить: (Т6, Я, Тб, 0) -> (Т6, Я, Тб, 1)

Будем считать, что для решения задачи значимы лишь вышеупомянутые точки пола То, Тя, Тб , получим пространство состояний задачи (рис). Это пространство содержит только 13 состояний, дуги графа-пространства промаркированы порядковым номером применяемого оператора Пространство содержит 4 цикла хождения обезьяны между 3 значимыми точками (с ящиком или без него).

В пространстве есть также 2 тупиковые ветви - когда обезьяна залезает на ящик, но не под связкой бананов.

Жирными дугами (стрелками) показан решающий путь, состоящий из четырех операторов:

  • Перейти (Тя);

  • Передвинуть(Тб);

  • Взобраться;

  • Схватить.

Листинг программы:

import numpy as np import matplotlib.pyplot as plt import networkx as nx class Obezjana: def __init__(self, polozenie): self.polozenie = polozenie self.banany = False def Perejti(self, novoe_polozenie): self.polozenie = novoe_polozenie def Peredvinut(self, novoe_polozenie): self.polozenie = novoe_polozenie def Vzobratsja(self): self.polozenie = (self.polozenie[0], 'Ja', self.polozenie[2]) def Shvatit(self): self.banany = True class Jascik: def __init__(self, polozenie): self.polozenie = polozenie def Peredvinut(self, novoe_polozenie): self.polozenie = novoe_polozenie class Prostranstvo: def __init__(self, To, Tja, Tb): self.To = To self.Tja = Tja self.Tb = Tb self.obezjana = Obezjana((self.To, 'P', self.Tja)) self.jascik = Jascik(self.Tja) def reshenie_zadachi(self): # Перейти к ящику self.obezjana.Perejti(self.Tja) # Передвинуть ящик к точке под связкой бананов self.jascik.Peredvinut(self.Tb) # Взобраться на ящик self.obezjana.Vzobratsja() # Схватить бананы self.obezjana.Shvatit() print(f"Обезьяна достала бананы: {self.obezjana.banany}") # Создание пространства и решение задачи To = np.array([0, 0, 0]) for i in range(0,2): for j in range(0,2): for k in range(0,2): Tja = np.array([i, j, k]) for q in range(0, 2): for w in range(0, 2): for e in range(0, 2): Tb = np.array([q, w, e]) print('Точка обезьяны:', To, 'Точка ящика:', Tja, 'Точка банана:', Tb) prostranstvo = Prostranstvo(To, Tja, Tb) prostranstvo.reshenie_zadachi() # Определяем начальное и целевое состояния initial_state = (0, 'П', 1, 0) # (ПолОб, ВертОб, ПолЯщ, Цель) goal_state = (0, 'Я', 0, 1) # Граф для хранения состояний и переходов G = nx.DiGraph() # Определение операций def move_to_point(X, W): return (W[0], 'П', X[2], X[3]) def move_box(X, V): return (X[0], 'П', V[0], X[3]) def climb(X): return (X[0], 'Я', X[2], X[3]) def grab(X): return (X[0], 'Я', X[2], 1) # Создаем граф состояний G.add_node(initial_state) # Переходы step1 = move_to_point(initial_state, (1, 'П')) G.add_edge(initial_state, step1, label='Перейти (Тя)') step2 = move_box(step1, (0, 'П')) G.add_edge(step1, step2, label='Передвинуть (Тб)') step3 = climb(step2) G.add_edge(step2, step3, label='Взобраться') step4 = grab(step3) G.add_edge(step3, step4, label='Схватить') # Добавляем целевое состояние G.add_node(goal_state) # Создаем графики pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True, node_size=2000) edge_labels = nx.get_edge_attributes(G, 'label') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) plt.title("Граф состояний (обезьяна и бананы)") plt.show()

Результат работы программы:

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 0] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 0 1] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 0] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [0 1 1] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 0] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 0 1] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 0] Точка банана: [1 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [0 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [0 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [0 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [0 1 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [1 0 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [1 0 1]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [1 1 0]

Обезьяна достала бананы: True

Точка обезьяны: [0 0 0] Точка ящика: [1 1 1] Точка банана: [1 1 1]

Обезьяна достала бананы: True