Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Основные понятия Искусственного Интеллекта



Основные понятия Искусственного Интеллекта

 

ИИ – это область информатики, предметом которой является создание комплексных систем, с возможностями естественного интеллекта.

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

С самого начала исследования в области ИИ пошло по двум направлениям:

1) Попытки смоделировать с помощью искусственных систем, психофизиологическую деятельность человеческого мозга, с целью создания искусственного разума.

2) Создание программ, позволяющих с помощью компьютера воспроизводить не саму деятельность, а результат этой деятельности.

Данный подход является классическим для кибернетики с одним из ее базовых понятий черный ящик. Ч.Я.- устройство с информацией о внутренней структуре и, входные и выходные данные.

Для решения задач ИИ пришлось создавать собственные модели мышления.

В конце 50х появилась лабиринтная модель поиска. Согласно ей, решение задачи выполнялось путем перебора огромного количества вариантов. Которая представлялась в виде движения по лабиринту. Эта модель оказалась тупиковой.

Начало 60х. Эта эпоха эвристического программирования. ЭП – это разработка стратегий и действий на основе заранее заданных эвристик. Эвристика – это теоретически не обоснованное правило, не позволяющее сократить количество переборов в пространстве поиска.

В 70х к решению задач стали подключать методы мат логики, в основе которой лежала булева алгебра. Дальнейшее развитие эта алгебра получила в виде исчисления предикатов. На логике предикатов был разработан язык логического программирования PROLOG.

 

Добиться большей выразительности логическому подходу позволяет новое направление нечеткой логики. Основным ее отличием является то, что правдивость высказывания в ней, может принимать значения не только да/нет (1/0), но и промежуточное значение не знаю (0,5).

Существующий прорыв в практических приложениях ИИ произошел в середине 70х, когда на смену поискам универсального алгоритма мышления, пришла идея моделировать конкретные знания специалистов. В США появились 1е Экспертные системы (системы, основанные на знаниях). Система ИИ – это система, созданная на базе компьютеров, которые имитируют решения человеком сложных интеллектуальных задач. Разработка интеллектуальных программ отличается от обычного программирования и ведется построением системы ИИ.



Основным отличительным признаком системы ИИ, является работа со знаниями.

 

Основные направления исследований в области Искусственного Интеллекта

Выделяют 2 направления:

1) Технические системы ИИ

· Нейрокомпьютеры – это электро-модель человеческого мозга.

Первый нейрокомпьютером считают перцептрон разработанный Ромен Блаттом. Эта программа моделировала глаз человека и ее взаимодействие с мозгом. Она распознавала буквы, но была чувствительна к написанию этих букв.

· Интеллектуальные роботы. Они обладают способностью адаптации к внешней обстановке, самоорганизации и самообучению. ИИ включает в себя игровые интеллектуальные задачи: шахматы, шашки, также творческие программы.

2) Программные системы ИИ

· Игры. В играх разумно сочетаются критерии игры (в виде линейной комбинации с подбираемыми коэффициентами). Можно для оценки очередного хода машины, получить показатель эффективности очередных ходов. Выберет ход с наибольшим показателем. Это позволит машине продолжить игру, совершенствуя свою стратегию в процессе обучения на прошлом опыте. Обучение соответствует подстройке параметров на основе анализа проведенных ходов и игр с учетом их исхода.

· Компьютерная лингвистика. К этому направлению относится решение 2 проблем: перевод текста с одного языка на другой и диалог компьютера с человеком на естественном языке. Первые программы выделяли ключевые слова во фразах, строили вопросы и, создавалась иллюзия диалога. Интеллектуальные агенты – это программные объекты способные к взаимодействию друг с другом и анализу полученной информации. Интеллектуальные агенты имеют базу знаний в определенной сфере жизнедеятельности.

· Распознавание образов. Каждому объекту ставится в соответствие матрица признаков, на которой происходит ее распознавание. Любая такая программа работает в двух режимах: обучения и распознавания. При обучении машине предъявляются объекты и, о каждом из них сообщается, к какому понятию он принадлежит. По этим данным строятся правила с описанием понятий. В режиме распознавания, машине предъявляются новые объекты и она должна их классифицировать.

· Адаптивно – обучающая система. Позволяет для каждого обучаемого строить свой маршрут обучения, учитывая интеллектуальные и психологические особенности.

· Экспертная система. Основное направление ИИ, оно связано с разработкой моделей представления знаний, созданием баз данных.

Существуют системы, сочетающие в себе и те и другие свойства (в робототехнике).

Логическое программирование. Основные понятия языка Пролог (Предикаты, Факты, Правила, Простые и составные запросы).

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

На Прологе описываются объекты и факты, затем описываются правила, при которых эти факты являются истинными.

Факт – это предложение, которое истинное всегда.

Например, рассмотрим такой факт: like(kola, apple). Предикат like говорит о том, что Коля любит яблоки. Like – это аргумент / имя терма / функтор. (kola, apple) – это аргументы предиката.

Правила позволяют вывести один факт из других фактов. Другими словами, можно сказать, что правило — это заключение, для которого известно, что оно истинно, если одно или несколько других найденных заключений или фактов являются истинными. Тело правила – это ряд условий, которые должны быть истинными, чтобы Prolog мог доказать, что заголовок правила истинен. Тело правила состоит из термов, встроенных предикатов связанных «,/;».

Например: like(mike, X):-like(anna, X). Если Анна любит Х, то и Майк тоже это любит.

В Прологе можно задать вопрос (поставить цель). Она может быть внутренней и внешней. Внутренняя цель записывается в самой программе, в разделе Goal. Внешняя цель вызывается при запуске программы на выполнение. Она может содержать несколько подцелей.

Например, рассмотрим факты:

year(ivanov, 25).

year(grishko, 30).

 

Цель: year(ivanov, X). Сколько лет Иванову? Ответ: X = 25.

Цель: year(X,30). Кому 30 лет? Ответ: X= grishko.

Цель: year(ivanov, 20) Иванову 20 лет? Ответ: не.

 

Константы, переменные и составные термы. Сопоставление.

Переменные в прологе инициализируются при сопоставлении с константами фактов и правил, до инициализации переменная свободна, а после инициализации становится связанной (в пределах одного предложения). Переменные используются, как часть процесса поиска решения. Константы – это поименованные конкретные объекты или отношения. Переменные служат для обозначения объектов, значение которых меняется в ходе выполнения программы. Имена переменных могут начинаться с прописной буквы или с символа подчеркивания. Если значение переменной не интересует, то можно использовать анонимные переменные в виде символа подчеркивания.

· Составной терм. Составной терм состоит из функционального символа и упорядоченного множества термов, являющихся его аргументами. Идея состоит в том, что составной терм обозначает тот или иной индивидуальный объект, зависящий от других индивидуальных объектов, представленных его аргументами. Функциональный символ описывает характер зависимости. Например, можно было бы иметь функциональный символ, обозначающий «расстояние» и имеющий два аргумента. В этом случае составной терм обозначает расстояние между объектами, представленными его аргументами. Составной терм можно рассматривать как структуру языка Пролог, имеющую в качестве функтора функциональный символ. Составные термы будут записываться по правилам синтаксиса Пролога так, что, например, жена(генри) может обозначать жену Генри, расстояние(точка1, X) может обозначать расстояние между некоторой заданной точкой и каким-то другим объектом

Наиболее важной операцией над термами является сопоставление.

Сопоставление – это процесс, на вход которого подаются 2 терма, а он проверяет соответствуют ли термы друг другу. 2 терма сопоставимы, если они идентичны или переменные в обеих термах можно приписать в качестве значений объекты таким образом, чтобы после постановки этих объектов в термы, вместо переменных последние стали идентичны.

Например:

data (20, “may”, Y)

data (X,A,B)

сопоставимы если Х=20, А=may, В=Y.

 

Основные разделы Prolog. Встроенные предикаты

Программа на Прологе состоит из нескольких программных секций:

Constant

Объявление констант

 

Domains

Определение типов данных

раздел domains содержит определения доменов, которые описывают различные типы объектов, используемых в программе, если используются стандартные типы, то раздел может не использоваться;

Database

Объявление предикатов базы данных

Раздел Database содержит описание предикатов динамической

(внутренней) базы данных, которые являются предикатами базы данных и могут быть изменены в процессе работы программы без перекомпиляции, если программа такой базы данных не требует, то этот раздел может быть опущен;

Predicates

Объявление предикатов

раздел predicates служит для описания используемых программой

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

Clauses

Определение фактов или правил

в раздел clauses заносятся факты и правила статической базы данных, которая и является собственно программой, этот раздел является обязательным;

Goal

Цель

в разделе goal на языке Пролога формулируется цель(запрос) созданной программы. Составными частями при этом могут являться некие подцели, из

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

В пролог программе существуют встроенные предикаты, такие как:

1) арифметические и логические (+,-,*,/,mod, div,<,>,=), такие предикаты позволяют решать простейшие арифметические уравнения, автоматически производя соответствующие вычисления.

2) Предикаты ввода и вывода: readint (имя переменной) — для ввода целочисленной переменной; readreal (имя переменной); readchar (имя переменной); readln (имя переменной); write (список вывода) — только константы и пременные; nl – переводит курсор на новую строку; writef (список вывода) — форматный вывод.

3) Управляющие предикаты: Exit — выполняет немедленный выход из программы; Fail - вынуждает завершиться предикат ложно и, следовательно, возвратиться к предыдущей точке разветвления; True — значение предиката всегда истинно;! — Отсечение (прекращение перебора между головой дизъюнкта и данным знаком).

Арифметические вычисления и сравнения в прологе

Основные арифметические операции: +, -, *, /, mod, div;

Основные функции: abs, cos, sin, tan,arctan, exp, ln, log, sqrt, trunc, round.

В прологе имеется встроенный предикат = (операция соспоставления), которыйозначает сопоставление, если слева находится переменная, которая еще не получила значение.

Например A = 5, X = sin(A), Y = sqrt(A), write(X,” ”, Y)

В прологе используются операции сравнения: <,>,<=,>=.

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

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

2. если выражение содержит операции умножения (*) или деления (/, div или mod), эти операции выполняются слева направо;

3. если выражение содержит операции сложения (+) и вычитания (-), они выполняются также слева направо.

 

Встроенные предикаты ввода и вывода

Предикат readln считывает строку с текущего устройства ввода и связывает ее со своим единственным выходным параметром.

Предикат readint читает с текущего устройства целое число и связывает его со своим единственным выходным параметром.

Предикат readreal отличается от предиката readint тем, что он считывает не целое, а вещественное число.

Для чтения символа с текущего устройства ввода используется предикат readchar. Есть еще предикат inkey, который так же, как и readchar, читает символ со стандартного устройства ввода. Разница между ними в том, что предикат readchar приостанавливает работу программы до тех пор, пока не будет введен символ, а предикат inkey не прерывает выполнение программы. Если нужно просто проверить, нажата ли клавиша, можно воспользоваться предикатом keypressed, не имеющим аргументов.

Предикат readterm предназначен для чтения сложных термов. У него два параметра: первый входной указывает имя домена, второй параметр конкретизируется термом домена, записанного в первом параметре. Если считанная этим предикатом строка не соответствует домену, указанному в его первом параметре, предикат выдаст сообщение об ошибке.

Для записи данных в текущее устройство записи служит предикат write. Он может иметь произвольное количество параметров. Кроме того, в Турбо Прологе есть еще и предикат writef, который служит для форматного вывода данных.

Для осуществления перехода на следующую строку (возврат каретки и перевод строки) применяется предикат nl, не имеющий параметров.

 

Управление поиском решений. Встроенный механизм поиска с возвратом. Использование предиката fail и отсечение.

Основной операцией в Прологе при поиске решений, является операция сопоставления цели с имеющимися в программе фактами, для получения логического вывода об истине или лжи значений цели.

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

Например: В прологе содержатся имена городов, вывести все имена во внутренней цели.

Predicates

city(symbol)

show

Clauses

city(moskow).

city(kiev).

city(kazan).

show:- city(X), write(X), nl, fail.

Goal

show.

На экране увидим:

moskow

kiev

kazan

Замечание: Всегда ложный предикат fail, вызывает откат для поиска других утверждений, который может обеспечить выполнение цели, без fail, то для внутренней цели поиск был бы прекращен, после нахождения названия первого города. Применение этого метода, позволяет извлекать данные из каждого утверждения.

Для того чтобы иметь возможность выбирать данные удовлетворяющие некоторым условиям, необходимо иметь средство управления откатом. В прологе для этого используется предикат отсечения (!). Этот предикат, вычисление которого всегда успешно, заставляет внутри программы сопоставления забыть все указатели отката, установления во время попыток вычислить предыдущие подцели.

Рекурсия

Для организации повторений, в прологе используется рекурсия.

Рекурсия — это предикат, вызывающий сам себя, до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию.

Пример рекурсии: найти факториал n!.

Задача нахождения значения факториала n! очень хорошо решается с помощью рекурсии, поскольку может быть сведена к решению аналогичной подзадачи, которая, в свою очередь, сводится к решению аналогичной подзадачи и т.д.

Действительно, чтобы найти значение факториала n!, можно найти значение факториала (n-1)! и умножить найденное значения на n. Для нахождения значения факториала (n-1)! можно пойти по уже известному пути - найти значение факториала (n-2)! и умножить найденное значения на n-1. Так можно действовать до тех пор, пока не доберемся до нахождения значения факториала (n-n)! или другими словами, факториала 0!. Значение факториала 0! известно - это 1. Вот это и будет граничное условие, которое позволит остановить рекурсию. Все, что теперь остается - это умножить полученную единицу на (n-(n-1)), затем на (n-(n-2)) и т.д. столько раз, сколько было рекурсивных вызовов. Результат n! получен.

Вот как выглядит программа, которая проделывает вычисление n! (нужно заметить, что предложения Prolog - программы достаточно точно повторяют формулировку задачи на естественном языке).

PREDICATES

factorial (integer, integer)

 

CLAUSES

%факториал 0! равен 1

factorial (0, 1):-!.

%факториал n! равен факториалу (n-1)!, умноженному на n

factorial (N, Factorial_N):- M=N-1, factorial (M, Factorial_M),

Factorial_N=Factorial_M*N.

 

GOAL

write ("Для какого числа Вы хотите найти факториал? "), readint (Number),

factorial (Number, Result), write (Number, "!=", Result).

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

Обработка списков. Объявление и использование.

Списки — это упорядоченный набор объектов одного и того же типа следующие друг за другом. Объектами списка могут быть целые, действительные, символьные величины, строки, и сложные объекты. Совокупность элементов списка заключается в [, ]. Количество элементов списка — это длина. Список, не содержащий ни одного элемента, называется пустым. При описании списков, после указания типа или имени списка, ставится символ *.

Domains

list = integer*

name = symbol

listname = name*

Для обработки списка, его делят на голову и хвост. Голова — это первый элемент списка, а хвост — вся его остальная часть.

Операции деления списка на голову и хвост изображают в виде вертикальной черты [Head | Tail]. Данное определение позволяет организовать рекурсию списков, разделяя непустой список на голову и хвост. Хвост в свою очередь также является списком, который можно разделить на голову и хвост. И так до тех пор, пока список не окажется пустым, у которого нет головы.

Обработка строк. Предикаты для строк. Встроенные предикаты для преобразования типов. Использование строк.

Предикаты обработки строк используются для разделения строк либо на список отдельных символов, либо на список заданных групп символов.

frontchar(String,FrontChar,RestString)

Разделяет заданную строку String согласно поточному шаблону на две части: первый символ FrontChar и оставшаяся часть строки RestString.

fronttoken(String,Token,RestString)

Разделяет строку, заданную параметром String, на лексему Token и остаток RestString согласно поточному шаблону. (Лексема – это последовательность символов, имеющих смысл. Она определяется либо как имя в соответствии с синтаксисом Турбо-Пролога, либо как строчное представление числа, при этом знак возвращается отдельно, либо как отдельный символ.)

frontstr(Lenght,Inpstring,StartString,RestString)

Разделяет строку Inpstring на две части. StartString будет иметь длину Lenght первых символов исходной строки, RestString представляет собой остаток строки InpString.

concat(String1,String2,String3)

Слияние строк, согласно поточному шаблону, по формуле: String3 = String1 + String2.

str_len(String,Length)

Определяет длину Length строки String.

isname(StringParam)

Завершается успешно, если StringParam есть имя, удовлетворяющее синтаксису Пролога.

Стандартные предикаты для преобразования одного типа в другой.

char_int(Char,Code)

str_int(String,Integer)

str_char(String,Char)

str_real(String,real)

 

Файлы. Оисание. Стандартные предикаты. Операции над файлами.

Для описания файлового типа используется служебное слово file, описание:

file=символическое имя файла

Символические имена должны начинаться со строчной буквы. В прологе имеются стандартные файлы,которые не нужно описывать в разделе описания доменов

stdin — стандартное устройство ввода (по умолчанию является клавиатура)

stdout — стандартное устройство вывода. (монитор)

Для работы пользователя с файлом, его нужно открыть,а по завершению закрыть.

Стандарное устройство ввода и вывода открывать и закрывать не нужно.

Стандартные предикаты для работы с файлами
1)предикат для открытия файла

openread(f,N) — открывает файл для чтения, первый параметр — это внутреннее или символическое имя файла, второе — строка задающая внешнее имя файла. Если файл с указанным внешним именем не обнаружен,то предикат ложный, и выводится ошибка.

openwrite(f,N) — открывает файл для записи, записывает в новый файл, если уже сущетсвует файл с таким именем,то он будет стерт. Если файл не создан — ошибка.

openappend(f,N) — открывает файл для записи в конец файла. Если файл с указанным именем не найден,то выводится сообщение об ошибке.

openmodify(f,N) — открывает файл для чтения и записи. Если файла нет, то ошибка.

2)проверка на существование файла на диске

existfile(N) — истинен, если файл с указанным именем сущ-т, иначе ложен.

3)закрытие файла

closefile(f) — закрывает файл.

4) удаление и переименование файла

deletfile(N) — удаляет файл, но предварительно файл должен быть закрыт, если файл удалить не получится, то выводится об этом сообщение. closefile(f). deletfile(“d:\\a.txt'')

renamefile(N,New) — Переименовывает файл N в New. Файл должен быть закрыт. closefile(f), renamefile(“c:\\b.txt”,”c:\\c.txt”).

5)проверка конца файла: eof(f) — успешен, если достигнут конец файла.

6)переопределение текущего уст-ва ввода и вывода

readdevice(имя устр-ва) — опр-т уст-во для ввода информации: readdevice(f) readdevice(klybard)

writedevice(имя уст-ва) — опр-т уст-во для вывода информации: writedevice(screen)

7)для вывода иформации, используются встроенные предикаты: write, writef, nl

8)для ввода предикаты: readreal, readint, readln, readchar, readterm.

Работа с внутренними базами данных: добавление и удаление фактов из базы данных.

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

Внутренняя БД — это БД, которая обрабатывается исключительно в оперативной памяти компьютера, в отличии от внешней, которая может обрабатываться на диске.

Внутренняя БД обрабатывается быстрее, но ее объем ограничен объемом оперативной памяти. Для обработки больших массивов данных, используют внешние БД.

Внутренняя БД состоит из фактов, которые можно в процессе компиляции добавлять в БД, удалять из БД, сохранять в файле, загружать факты из файла БД. Эти факты могут использовать только предикаты описанные в разделе предикатов БД.

Database – имя БД имя предиката. (имя домена аргумент1, …. аргумент n).

Если раздел описания предикатов БД в программе только1, то БД может не иметь имени, в этом случае имя по-умолчанию; в случае наличия в программе нескольких БД, только 1 из них может быть без имени. Описание предикатов БД аналогично описанию предикатов раздела predicates. Однако, эти предикаты можно использовать в качестве аргументов встроенных предикатов. Кроме того, факты использующие эти предикаты можно добавлять и удалять во время компиляции.

В БД могут содержаться только факты. Встроенные предикаты для работы в БД, могут содержать один/два аргумента. Одноаргументный вариант использования, если внутренняя БД не имеет имени. Если же база именована, то используются два аргумента в предикате, причем второй аргумент — это имя БД.

Для добавления фактов во внутреннюю БД используются предикаты: asserta - в начало БД; assertz, assert – в конец БД.

Для удаления фактов из БД используются: retract – удаляет первый сначала факт, который может быть отождествлен с его первым параметром. Для удаления всех фактов из БД используется retractall, первым аргументом может быть анонимная переменная.

Для сохранения динамической БД на диске: предикат save. Он сохраняет ее в текстовый файл, с именем, которое было указано в качестве первого параметра предиката. Факты, сохраненные в текстовом файле, могут быть загружены в оперативную память компьютера предикатом consult. Первый аргумент этого предиката — имя текстового файла, с которого нужно загрузить факты. Один факт должен занимать одну строку. Количество и тип аргументов должны соответствовать описанию предиката в разделе database. В файле не должно быть пустых строк, внутри фактов не должно быть пробелов, за исключение тех, которые содержатся внутри строк в кавычках.

Данные и знания.

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

Знания — это выявленные закономерности предметной области (принципы, связи, законы), позволяющие решать задачи в этой области.

Знания представленные в интеллектуальной системе, образуют базу знаний.

Представление знаний — это соглашение о том, как описать реальный мир.

Основная цель представления знаний - строить математическую модель реальности и мира, для которых, соответствие между системой понятий проблемного знания может быть установлено на основе совпадение имен переменных модели и имен понятий, без предварительных пояснений и установление дополнительных соответствий.

Существуют следующие основные модели представления знаний:

1) продукционная

2) сетевая (семантические сети)

3) фреймовая (фрейм)

4)логическая.


Дата добавления: 2015-10-21; просмотров: 50 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Опасный вечер. .День выдался довольно жарким. Не помню уже когда последний раз так изнывал от вечерней жары. Пусть и близится прохладня, летняя ночь, от этого температура не сильно падает. Целый | Пятьдесят оттенков серого 1 страница

mybiblioteka.su - 2015-2024 год. (0.039 сек.)