Системы искусственного интеллекта

Понятие и суть нечеткой логики и генетических алгоритмов. Характеристика программных пакетов для работы с системами искусственного интеллекта в среде Matlab R2009b. Реализация аппроксимации функции с применением аппарата нечеткого логического вывода.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.06.2012
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки РФ

Владимирский Государственный Университет

Имени А. Г. и Н. Г. Столетовых

Кафедра ФиПМ

Курсовая работа

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

Выполнил:

ст. гр. АИС - 108

Болонкин А.А.

Проверил:

Абрахин С. И.

Владимир 2011

Содержание

Глава 1. Нечеткая логика и генетические алгоритмы

1.1 Нечеткая логика

1.2 Генетические алгоритмы

1.3 Задание

1.4 Реализация

Глава 2. Нейронные сети

2.1 Нейронные сети

2.2 Задание

2.3 Реализация

Вывод

Глава 1. Нечеткая логика и генетические алгоритмы

1.1 Нечеткая логика

Fuzzy Logic Toolbox - это пакет прикладных программ, входящих в состав среды MatLab. Он позволяет создавать системы нечеткого логического вывода и нечеткой классификации в рамках среды MatLab, с возможностью их интегрирования в Simulink. Базовым понятием Fuzzy Logic Toolbox является FIS-структура - система нечеткого вывода (Fuzzy Inference System). FIS-структура содержит все необходимые данные для реализации функционального отображения “входы-выходы” на основе нечеткого логического вывода согласно схеме

Обозначения:

X - входной четкий вектор;

- вектор нечетких множеств, соответствующий входному вектору X;

- результат логического вывода в виде вектора нечетких множеств;

Y - выходной четкий вектор.

Fuzzy Logic Toolbox содержит следующие категории программных инструментов:

Функции Fuzzy Logic Toolbox

Первая категория программных инструментов пакета Fuzzy Logic Toolbox содержит функции, которые могут быть вызваны непосредственно путем набора имени функции в командном окне (command line) или из собственных пользовательских приложений. Большинство из этих функций представляют собой матлабовские функции в виде m-файлов. В этом случае пользователь может посмотреть запрограммированные в этих функциях алгоритмы а также редактировать и корректировать эти файлы. Ниже приведены названия примененных функций с кратким описанием их назначения:

· addmf - добавление функции принадлежности в FIS

FIS_name=addmf(FIS_name, varType, varIndex, mfName, mfType, mfParams)

Описание:

Функцию принадлежности можно добавить только к существующей в рабочей области MatLab системе нечеткого логического вывода. Другими словами система нечеткого логического вывода должна быть каким-то образом загружена в рабочую область или создана с помощью функции newfis. Функция addmf имеет шесть входных аргументов:

ь FIS_name - идентификатор системы нечеткого логического вывода в рабочей области MatLab;

ь varType - тип переменной, к которой добавляется функция принадлежности. Допустимые значения - `input' - входная переменная и `output' - выходная переменная;

ь varIndex - порядковый номер переменной, к которой добавляется функция принадлежности;

ь mfName - наименование добавляемой функции принадлежности (терм). Задается в виде строки символов;

ь mfType - тип (модель) добавляемой функции принадлежности. Задается в виде строки символов;

ь mfParams - вектор параметров добавляемой функции принадлежности.

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

Пример. FIS_name=addmf(FIS_name, `input', 1, `низкий', `trapmf', [150, 155, 165, 170])

Строка добавляет в терм-множество первой входной переменной нечеткой системы FIS_name терм `низкий' с трапециевидной функцией принадлежности с параметрами [150, 155, 165, 170].

· addrule - добавление правила в FIS

FIS_name= addrule (FIS_name, ruleList)

Описание:

Правила можно добавить только к существующей в рабочей области MatLab системе нечеткого логического вывода. Функция addrule имеет два входных аргумента:

ь FIS_name - идентификатор системы нечеткого логического вывода в рабочей области MatLab;

ь ruleList - матрица добавляемых правил.

Матрица правил должна быть задана в формате indexed. Количество строк матрицы ruleList равно количеству добавляемых правил, т.е. каждая строка матрицы соответствует одному правилу. Количество столбцов матрицы равно m+n+2, где m (n) - количество входных (выходных) переменных системы нечеткого логического вывода.

Первые m столбцов соответствуют входным переменным, т.е. задают ЕСЛИ-часть правил. Элементы этих столбцов содержат порядковые номера термов, используемых для лингвистической оценки соответствующих входных переменных. Значение 0 указывает, что соответствующая переменная в правиле не задана, т.е. ее значение равно none.

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

Предпоследний столбец матрицы содержит весовые коэффициенты правил. Значения весовых коэффициентов должны быть в диапазоне [0, 1].

Последний столбец матрицы задает логические связки между переменными внутри правил. Значение 1 соответствует логической операции И, а значение 2 - логической операции ИЛИ.

Пример. FIS_name=addrule(FIS_name, [1 1 1 1 1; 1 2 2 0.5 1])

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

Если вход1=MF1 и вход2=MF1, то выход1=MF1 с весом 1,

Если вход1=MF1 и вход2=MF2, то выход1=MF2 с весом 0.5,

где MF1 (MF2) - терм с порядковым номером 1 (2).

· addvar - добавление переменной в FIS

FIS_name= addvar (FIS_name, varType, varName, varBound)

Описание:

Переменную можно добавить только к существующей в рабочей области MatLab системе нечеткого логического вывода. Функция addrvar имеет четыре входных аргумента:

ь FIS_name - идентификатор системы нечеткого логического вывода в рабочей области MatLab;

ь varType - тип добавляемой переменной. Допустимые значения - `input' - входная переменная и `output' - выходная переменная;

ь varName - наименование добавляемой переменной. Задается в виде строки символов;

ь varBound - вектор, задающий диапазон изменения добавляемой переменной.

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

Пример. FIS_name=addrule(FIS_name, `input', `Рост', [155 205])

Строка добавляет в систему нечеткого логического вывода FIS_name входную переменную `Рост', заданную на интервале [155 205].

· evalfis - выполнение нечеткого логического вывода

output = evalfis(input, fis)

output = evalfis(input, fis, numPts)

[output, IRR, ORR, ARR] = evalfis(input, fis)

[output, IRR, ORR, ARR] = evalfis(input, fis,,numPts)

Описание:

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

input - матрица значений входных переменных, для которых необходимо выполнить нечеткий логический вывод. Матрица должна иметь размер M x N, где N - количество входных переменных; M - количество входных данных. Каждая строчка матрицы представляет один вектор значений входных переменных;

ь fis - идентификатор системы нечеткого логического вывода;

ь numPts - необязательный входной аргумент, задающий количество точек дискретизации функций принадлежности. Значение по умолчанию равно 101. Это означает, что все нечеткие множества представляются в виде 101 пары чисел “элемент универсального множества - степень принадлежности”. При уменьшении точек дискретизации возрастает скорость выполнения логического вывода и уменьшается точность вычислений, и наоборот.

Функция evalfis может иметь четыре выходных аргумента:

ь output - матрица значений выходных переменных, получаемая в результате нечеткого логического вывода для вектора входных значений input. Матрица имеет размер M x L, где M - количество входных данных; L - количество выходных переменных в fis;

ь IRR - матрица размером NR x N, где NR - количество правил в fis; N - количество входных переменных. Матрица содержит степени принадлежности входных значений термам, входящих в базу знаний;

ь ORR - матрица размером numPts x (NR*L), где numPts - количество точек дискретизации; NR - количество правил в fis; L - количество выходных переменных в fis. Каждый столбец матрицы содержит функцию принадлежности выходной переменной, получаемую в результате вывода по одному правилу. Функция принадлежности дискретизируется на numPts точках и представляется в виде множества степеней принадлежности;

ь ARR - матрица размером numPts x L, где numPts - количество точек дискретизации; L - количество выходных переменных в fis. Матрица содержит функции принадлежности выходных переменных, получаемые в результате нечеткого логического вывода по всей базе знаний. Функции принадлежности дискретизируются на numPts точках и представляются в виде множества степеней принадлежности.

Аргументы IRR, ORR и ARR являются необязательными, они содержат промежуточные результаты нечеткого логического вывода. В случае задания нескольких входных данных значения аргументов IRR, ORR и ARR будут рассчитаны только для последнего вектора входных данных. Эти аргументы используются когда необходимо отследить процесс логического вывода или когда необходимо реализовать нестандартную процедуру нечеткого вывода.

Пример.Первая строчка загружает демо-систему нечеткого логического вывода tipper, предназначенную для определения процента чаевых в ресторане. Вторая строчка рассчитывает размер чаевых, в случае если service=3 и food=8.

fis = readfis('tipper');

tip = evalfis([3 8], fis)

· gaussmf - гауссовская функция принадлежности

y = gaussmf (x, params)

Описание:

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

ь b - координата максимума функции принадлежности;

ь c - коэффициент концентрации функции принадлежности.

Функция gaussmf применяется для задания гладних симетричных функций принадлежности. Функция gaussmf имеет два входных аргумента:

ь x - вектор, для координат которого необходимо рассчитать степени принадлежности;

ь params - вектор параметров функции принадлежности. Порядок задания параметров - [c b].

Функция gaussmf возвращает выходной аргумент y, содержащий степени принадлежности координат вектора x.

Пример:

x = 0: 0.1: 10;

y1 = gaussmf(x, [0.5 5]);

y2 = gaussmf(x, [1 5]);

y3 = gaussmf(x, [2 5]);

y4 = gaussmf(x, [3 5]);

plot (x, [y1; y2; y3; y4])

title (' gaussmf, b=5, c=0.5…3')

legend(`c=0.5', `c=1', `c=2', `c=3')

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

1.2 Генетические алгоритмы

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

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

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

Основное отличие генетических алгоритмов заключается в представлении любой альтернативы решения в виде строки фиксированной длины, манипуляции с которой производятся в отсутствие всякой связи с ее смысловой интерпретацией. То есть в данном случае применяется единое универсальное представление любой задачи. Парадигму генетических алгоритмов предложил Джон Холланд, опубликовавший в начале 60-х годов ее основные положения. А всеобщее признание она получила после выхода в свет в 1975 году его классического труда "Адаптация в естественных и искусственных системах".

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

В начале работы алгоритма случайным образом формируется начальная популяция, состоящая из заданного числа хромосом.

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

Развернутая схема работы ГА

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

Кроссовер

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

Мутация

После скрещивания и мутации размер популяции увеличивается. Однако для последующих преобразований необходимо сократить число хромосом текущей популяции. Такая процедура носит название селекции. В текущей популяции, состоящей из родителей и потомков, производится отбор лучших решений, т.е. хромосом с наилучшим значением целевой функции. Эта функция показывает, насколько исследуемая хромосома близка к оптимальному решению. Для текущей популяции повторяются все описанные процедуры. Процесс продолжается до тех пор, пока не будет обработано заданное число поколений. При этом каждая последующая популяция должна быть лучше, чем предыдущая. Решению задачи соответствует хромосома с наилучшим значением целевой функции.

Генетические алгоритмы обладают следующими поистине уникальными достоинствами:

ь Позволяют решать задачу с любым количеством точек.

ь Разрешают распараллелить задачу.

ь Допускают ограничение решения задачи, как по времени, так и по заданному значению критерия.

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

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

Работы с инструментарием генетического алгоритма.

ь ga - Поиск минимума функции при помощи генетического алгоритма

ь gaoptimget - Получить значения структуры опций генетического алгоритма

ь gaoptimset - Создать структуры опций генетического алгоритма

ь gatool - Открыть графический инструментарий генетического алгоритма

Для выполнения Генетического алгоритма с принимаемыми по умолчанию опциями следует вызвать команду ga согласно следующему синтаксису:

[x fval] = ga(@fitnessfun, nvars)

Входными аргументами для команды ga будут следующие величины:

ь @fitnessfun - Указатель функции в М-файле, по которой производится расчет функции пригодности. Пояснения по формированию М-файла приведены в разделе Составление М-файлов для подлежащих оптимизации функций.

ь nvars - число независимых переменных для функции пригодности.

Выходными переменными являются:

ь x - Конечная точка расчета.

ь fval - Значение функции пригодности в точке x.

Дополнительные выходные аргументы

Дополнительную информацию о характеристиках Генетического алгоритма можно получить при выполнении команды при следующем синтаксисе:

[x fval reason output population scores] = ga(@fitnessfcn, nvars)

Кроме вышеназванных x и fval, данная команда возвращает следующие аргументы:

reason - Причина остановки алгоритма.

output - Структура с информацией о эффективности работы алгоритма для каждого выполненного поколения.

population - состояние последнего семейства.

scores - конечное состояние.

Установка опций для команды ga из командной строки

Имеется возможность установить любую опцию из состава инструментария Генетического алгоритма. Для этих целей структура опций передается в качестве входных аргументов для команды ga при выполнении

[x fval] = ga(@fitnessfun, nvars, options)

Структура опций формируется при помощи команды gaoptimset.options = gaoptimset

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

options =

PopulationType: 'doubleVector'

PopInitRange: [2x1 double]

PopulationSize: 20

EliteCount: 2

CrossoverFraction: 0.8000

MigrationDirection: 'forward'

MigrationInterval: 20

MigrationFraction: 0.2000

Generations: 100

TimeLimit: Inf

FitnessLimit: -Inf

StallLimitG: 50

StallLimitS: 20

InitialPopulation: []

InitialScores: []

PlotInterval: 1

CreationFcn: @gacreationuniform

FitnessScalingFcn: @fitscalingrank

SelectionFcn: @selectionstochunif

CrossoverFcn: @crossoverscattered

MutationFcn: @mutationgaussian

HybridFcn: []

Display: 'final'

PlotFcns: []

OutputFcns: []

Vectorized: 'off'

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

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

options.PopulationSize

ans = 20

Для формирования структуры опций со значением полей, отличных от принимаемых по умолчанию величин, следует установить соответствующую опцию. Например, с помощью выполнения команды с опцией PopulationSize, равной 100, можно установить соответствующее значение (100) вместо принимаемого по умолчанию значения 20:

options = gaoptimset('PopulationSize', 100)

Эта команда формирует структуру опций совместно со всеми остальными принимаемыми по умолчанию значениями за исключением PopulationSize, установленного как равного 100.

Если далее выполнить команду:

ga(@fitnessfun, nvars, options)

то программа ga выполнит команду генетического алгоритма с размером семейства, равного 100.

Если в последствии будет необходимо изменить и другие поля структур, таких как установка PlotFcns как @gaplotbestf, с помощью которой осуществляется рисование графика наилучших значений функции пригодности для каждого поколения, то следует выполнить команду gaoptimset со следующим значением синтаксиса:

options = gaoptimset(options, 'PlotFcns', @plotbestf)

Эта команда сохраняет текущие значения всех полей опций за исключением PlotFcns, которое переходит в @plotbestf. Отметим, что если опустить опцию входных аргументов, то gaoptimset переустанавливает PopulationSize с его принимаемым по умолчанию значением, равным 20.

Так же имеется возможность с помощью только одной команды установить сразу две опции PopulationSize и PlotFcns:

options = gaoptimset('PopulationSize',100,'PlotFcns',@plotbestf)

Использование опций и задач из инструментария Генетического алгоритма

В качестве альтернативы создания структуры опций с помощью команды gaoptimset, в инструментарии Генетического алгоритма имеется возможность предварительно устанавливать эти значения опций и затем экспортировать их в структуру опций рабочего пространства MATLAB, как это описано в разделе Экспорт опций и задач. В случае экспорта принимаемых по умолчанию опций в инструментарий Генетического алгоритма окончательная структура опций будет иметь те же самые установки, как и принимаемая по умолчанию структура, возвращаемая из команды

options = gaoptimset

В случае экспорта структуры задач с помощью команды ga_problem из инструментария Генетического алгоритма, то можно использовать команду ga со следующим синтаксисом:

[x fval] = ga(ga_problem)

Структура задач включает в себя следующие поля:

ь fitnessfcn - функция пригодности.

ь nvars - Количество переименных в данной задаче.

ь options - Структура опций.

1.3 Задание

Реализовать аппроксимацию функции с применением аппарата нечеткого логического вывода, с оптимизацией параметров функций принадлежности с помощью генетического алгоритма

Сформировать систему приближающую функцию: y=x12+x22+kx1x2

ь на области D={-2?x1?2; -2? x2 ?2}, где k номер варианта, в соответствии с порядковым номером в журнале старосты.

ь Оценить погрешность вычислений по норме Гауса

1.4 Реализация

1. Вид поверхности x1^2+x2^2+4*x1*x2;

2. Создание нечеткой логической системы с параметрами по умолчанию

Вычисляем ошибку по гауссу и норму по гауссу для нечеткой логической системы:

a=newfis('kurs');

%задаем входную переменую

a=addvar(a,'input','x1',[-2 2]);

%задаем функции принадлежности входных переменных

a=addmf(a,'input',1,'g1','gaussmf',[0.4248 -2]);

a=addmf(a,'input',1,'g2','gaussmf',[0.4248 -1]);

a=addmf(a,'input',1,'g3','gaussmf',[0.4248 0]);

a=addmf(a,'input',1,'g4','gaussmf',[0.4248 1]);

a=addmf(a,'input',1,'g5','gaussmf',[0.4248 2]);

%задаем входную переменую

a=addvar(a,'input','x2',[-2 2]);

%задаем функции принадлежности входных переменных

a=addmf(a,'input',2,'g1','gaussmf',[0.4248 -2]);

a=addmf(a,'input',2,'g2','gaussmf',[0.4248 -1]);

a=addmf(a,'input',2,'g3','gaussmf',[0.4248 0]);

a=addmf(a,'input',2,'g4','gaussmf',[0.4248 1]);

a=addmf(a,'input',2,'g5','gaussmf',[0.4248 2]);

%задаем выходную переменую

a=addvar(a,'output','y',[-8 24]);

%задаем функции принадлежности выходной переменной

a=addmf(a,'output',1,'g1','gaussmf',[3.397 -8]);

a=addmf(a,'output',1,'g2','gaussmf',[3.397 0]);

a=addmf(a,'output',1,'g3','gaussmf',[3.397 8]);

a=addmf(a,'output',1,'g4','gaussmf',[3.397 16]);

a=addmf(a,'output',1,'g5','gaussmf',[3.397 24]);

%задаем обучающие правила

ruleList=[

1 1 5 1 1

1 2 4 1 1

1 3 2 1 1

1 4 1 1 1

1 5 1 1 1

2 1 4 1 1

2 2 3 1 1

2 3 2 1 1

2 4 1 1 1

2 5 1 1 1

3 1 2 1 1

3 2 2 1 1

3 3 2 1 1

3 4 2 1 1

3 5 2 1 1

4 1 1 1 1

4 2 1 1 1

4 3 2 1 1

4 4 3 1 1

4 5 4 1 1

5 1 1 1 1

5 2 1 1 1

5 3 2 1 1

5 4 4 1 1

5 5 5 1 1];

%добавляем правила в фис файл

a=addrule(a,ruleList);

% изменяем значения методов

a=setfis(a,'AndMethod','prod');

a=setfis(a,'ImpMethod','prod');

sum = 0;

for i=-2:1:2

for j=-2:1:2

realValue = i^2 + j^2 + 4*i*j;

eVal = evalfis([i j], a);

sum = sum + (realValue - eVal)^2;

end

end

%ошибак по Гауссу

error = sqrt(sum);

sum = 0;

for i=-2:1:2

for j=-2:1:2

realValue = i^2 + j^2 + 4*i*j;

sum = sum + (realValue)^2;

end

end

%норма по Гауссу

delta = error / (sqrt(sum));

Вывод:

Ошибка по Гауссу

? = 11.3060

Норма по Гауссу

? = 0.2444

Создание фитнес функции на основе fuzzy logic toolbox:

%

% Функция для генетического алгоритма

% её параметры - коэффициент концентрации и координата максимума функции

% возвращаемое значение - ошибка по Гауссу

%

function error=fitnes(pop)

% создаем новый фис файл

a=newfis('kurs');

%задаем входную переменую

a=addvar(a,'input','x1',[-2 2]);

%задаем функции принадлежности входных переменных

a=addmf(a,'input',1,'g1','gaussmf',[pop(1,1) pop(1,2)]);

a=addmf(a,'input',1,'g2','gaussmf',[pop(1,3) pop(1,4)]);

a=addmf(a,'input',1,'g3','gaussmf',[pop(1,5) pop(1,6)]);

a=addmf(a,'input',1,'g4','gaussmf',[pop(1,7) pop(1,8)]);

a=addmf(a,'input',1,'g5','gaussmf',[pop(1,9) pop(1,10)]);

%задаем входную переменую

a=addvar(a,'input','x2',[-2 2]);

%задаем функции принадлежности входных переменных

a=addmf(a,'input',2,'g1','gaussmf',[pop(1,11) pop(1,12)]);

a=addmf(a,'input',2,'g2','gaussmf',[pop(1,13) pop(1,14)]);

a=addmf(a,'input',2,'g3','gaussmf',[pop(1,15) pop(1,16)]);

a=addmf(a,'input',2,'g4','gaussmf',[pop(1,17) pop(1,18)]);

a=addmf(a,'input',2,'g5','gaussmf',[pop(1,19) pop(1,20)]);

%задаем выходную переменую

a=addvar(a,'output','y',[-8 24]);

%задаем функции принадлежности выходной переменной

a=addmf(a,'output',1,'g1','gaussmf',[pop(1,21) pop(1,22)]);

a=addmf(a,'output',1,'g2','gaussmf',[pop(1,23) pop(1,24)]);

a=addmf(a,'output',1,'g3','gaussmf',[pop(1,25) pop(1,26)]);

a=addmf(a,'output',1,'g4','gaussmf',[pop(1,27) pop(1,28)]);

a=addmf(a,'output',1,'g5','gaussmf',[pop(1,29) pop(1,30)]);

%задаем обучающие правила

ruleList=[

1 1 5 1 1

1 2 4 1 1

1 3 2 1 1

1 4 1 1 1

1 5 1 1 1

2 1 4 1 1

2 2 3 1 1

2 3 2 1 1

2 4 1 1 1

2 5 1 1 1

3 1 2 1 1

3 2 2 1 1

3 3 2 1 1

3 4 2 1 1

3 5 2 1 1

4 1 1 1 1

4 2 1 1 1

4 3 2 1 1

4 4 3 1 1

4 5 4 1 1

5 1 1 1 1

5 2 1 1 1

5 3 2 1 1

5 4 4 1 1

5 5 5 1 1];

%добавляем правила в фис файл

a=addrule(a,ruleList);

% изменяем значения методов

a=setfis(a,'AndMethod','prod');

a=setfis(a,'ImpMethod','prod');

sum = 0;

for i=-2:1:2

for j=-2:1:2

%значеие из фисфайла

efis = evalfis([i j],a);

%реальное значение функции

realValue = i^2 + j^2 + 4*i*j;

%сумма по Гауссу

sum = sum + (efis - realValue)^2;

end

end

%выходной параметр - ошибка по Гауссу

error = sqrt(sum);

1. Применение генетического алгоритма

options = gaoptimset;

% интервал принадлежности

options = gaoptimset(options,'PopInitRange', [0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -8 0 -8 0 -8 0 -8 0 -8; 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 60 24 60 24 60 24 60 24 60 24]);

% начальные значения параметров

options = gaoptimset(options,'InitialPopulation', [0.4248 -2 0.4248 -1 0.4248 0 0.4248 1 0.4248 2 0.4248 -2 0.4248 -1 0.4248 0 0.4248 1 0.4248 2 3.397 -8 3.397 0 3.397 8 3.397 16 3.397 24]);

% рисование графика

options = gaoptimset(options,'PlotFcns', { @gaplotbestf });

[x,fval]=ga(@fitnes,30,[],[],[],[],[],[],[],options);

Применение генетического алгоритма:

options = gaoptimset;

options = gaoptimset(options,'PopInitRange', [0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -68 0 -68 0 -68 0 -68 0 -68; 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 50 84 50 84 50 84 50 84 50 84]);

options = gaoptimset(options,'InitialPopulation', [0.4248 -2 0.4248 -1 0.4248 0 0.4248 1 0.4248 2 0.4248 -2 0.4248 -1 0.4248 0 0.4248 1 0.4248 2 16.14 -68 16 -29.2 16 8 16.14 46 16.14 84]);

options = gaoptimset(options,'PlotFcns', { @gaplotbestf });

[x,fval]=ga(@lr_sii_4,30,[],[],[],[],[],[],[],options);

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

Генетическим алгоритмом были сформированы следующие коэффициенты для функций принадлежности:

1) для `x1':

1.1 0.0965 -2.0000

1.2 0.4248 -0.3406

1.3 0.4248 0

1.4 -0.5111 1.0000

1.5 0.4248 2.0000

2) для `x2':

2.1 0.3716 -2.0000

2.2 0.4248 -1.0000

2.3 0.5579 0

2.4 0.4248 1.0000

2.5 0.4248 2.0000

3) для `y':

3.1 3.3970 -8.0000

3.2 3.3970 1.3940

3.3 3.3970 8.0000

3.4 3.3970 16.0000

3.5 3.3970 24.0000

Поверхность построенная при помощи Fuzzy Logic ToolBox и генетического алгоритма

Вывод:

Ошибка по Гауссу

? = 9.4502

Норма по Гауссу

? = 0.2043

Глава 2. Нейронные сети

2.1 Нейронные сети

Нейронные сети (NN - Neural Networks) широко используются для решения разнообразных задач. Среди развивающихся областей применения NN - обработка аналоговых и цифровых сигналов, синтез и идентификация электронных цепей и систем. Основы теории и технологии применения NN широко представлены в пакете MATLAB. В этой связи особо следует отметить последнюю версию пакета - MATLAB 6.0, где впервые представлен GUI (Graphical User Interface - графический интерфейс пользователя) для NN - NNTool.

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

Обработка сигналов в технологиях NN выполняется с помощью либо NN без памяти, либо NN c памятью. И в том и другом случаях ключевым элементом является NN без памяти. Подобная роль определяется тем обстоятельством, что при использовании нейронов с определёнными функциями активации (передаточными характеристиками) NN является универсальным аппроксиматором. Последнее означает, что в заданном диапазоне изменения входных переменных NN может с заданной точностью воспроизводить (моделировать) произвольную непрерывную функцию этих переменных.

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

После того как структура NN выбрана, должны быть установлены её параметры. Выбор структуры NN и типов нейронов - самостоятельный и весьма непростой вопрос, который здесь мы обсуждать не будем. Что же касается значений параметров, то, как правило, они определяются в процессе решения некоторой оптимизационной задачи. Эта процедура в теории NN называется обучением.

Графический интерфейс пользователя NNTool позволяет выбирать структуры NN из обширного перечня и предоставляет множество алгоритмов обучения для каждого типа сети.

Управляющие элементы NNTool

Чтобы запустить NNTool, необходимо выполнить одноимённую команду в командном окне MATLAB:

>> nntool

после этого появится главное окно NNTool, именуемое "Окном управления сетями и данными" (Network/Data Manager)

ь Панель "Сети и данные" (Networks and Data) имеет функциональные клавиши со следующими назначениями:

ь Помощь (Help)- краткое описание управляющих элементов данного окна;

ь Новые данные (New Data…)- вызов окна, позволяющего создавать новые наборы данных;

ь Новая сеть (New Network…)- вызов окна создания новой сети;

ь Импорт (Import…)- импорт данных из рабочего пространства MATLAB в пространство переменных NNTool;

ь Экспорт (Export…)- экспорт данных из пространства переменных NNTool в рабочее пространство MATLAB;

ь Вид (View)- графическое отображение архитектуры выбранной сети;

ь Удалить (Delete)- удаление выбранного объекта.

На панели "Только сети" (Networks only) расположены клавиши для работы исключительно с сетями. При выборе указателем мыши объекта любого другого типа, эти кнопки становятся неактивными.

При работе с NNTool важно помнить, что клавиши View, Delete, Initialize, Simulate, Train и Adapt (изображены на рис. 1 как неактивные) действуют применительно к тому объекту, который отмечен в данный момент выделением. Если такого объекта нет, либо над выделенным объектом невозможно произвести указанное действие, соответствующая клавиша неактивна.

2.2 Задание

Выполнить аппроксимацию функции с применением аппарата искусственных нейронных сетей в качестве универсального аппроксиматора.

Сформировать систему приближающую функцию: y=x12+x22+kx1x2

ь На области D={-2?x1?2; -2? x2 ?2}, где k номер варианта, в соответствии с порядковым номером в журнале старосты.

ь Оценить погрешность вычислений по норме Гауса.

2.3 Реализация

1. Заготовим набор обучающих данных

2. Заготовим набор целевых данных

Обучающие и целевые данные были получены из м-файла:

k=1;

Y(1,25)=0;

for i=-2:1:2

for j=-2:1:2

Y(1,k) = i^2 + j^2 + 4*i*j;

k=k+1;

end

end

Выберем персептрон (Feed-Forward Back Propa-gation) c десятью сигмоидными (TANSIG) нейронами скрытого слоя и одним линейным (PURELIN) нейроном выходного слоя. Обучение будем производить, используя алгоритм Левенберга-Маркардта (Levenberg-Mar-quardt), который реализует функция TRAINLM. Функция ошибки - MSE.

Полученная сеть имеет вид:

3. Приступаем к обучению. Для этого необходимо указать, какие наборы данных должны быть использованы в качестве обучающих и целевых, а затем провести обучение.

4. Результаты обучения.

Результаты симулирования

[23.5241 10.1687 -3.186 -6.7512 -7.4776 13.1624 6.1722 2.2861 1.6822 1.3933 4.6416 2.3951 1.9966 2.7281 3.0747 -6.9504 -2.1591 6.7088 10.5665 12.3712 -0.694 1.1594 4.7518 13.5354 22.1203]

Вывод:

Ошибка по Гауссу

? = 16.2332

Норма по Гауссу

? = 0.3509

Вывод

искусственный интеллект программный алгоритм

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

Размещено на Allbest.ru


Подобные документы

  • Понятие искусственного интеллекта как свойства автоматических систем брать на себя отдельные функции интеллекта человека. Экспертные системы в области медицины. Различные подходы к построению систем искусственного интеллекта. Создание нейронных сетей.

    презентация [3,0 M], добавлен 28.05.2015

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

    курс лекций [1,1 M], добавлен 14.01.2011

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

    контрольная работа [27,9 K], добавлен 07.12.2009

  • Характеристика сущности искусственного интеллекта. Проблема создания искусственного интеллекта. Базовые положения, методики и подходы построения систем ИИ (логический, структурный, эволюционный, имитационный). Проблемы создания и реализация систем ИИ.

    реферат [43,1 K], добавлен 19.07.2010

  • Искусственный интеллект – научное направление, связанное с машинным моделированием человеческих интеллектуальных функций. Черты искусственного интеллекта Развитие искусственного интеллекта, перспективные направления в его исследовании и моделировании.

    реферат [70,7 K], добавлен 18.11.2010

  • Сущность искусственного интеллекта, сферы человеческой деятельности, в которых он распространен. История и этапы развития данного явления. Первые идеи и их воплощение. Законы робототехники. Использование искусственного интеллекта в коммерческих целях.

    реферат [40,8 K], добавлен 17.08.2015

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

    дипломная работа [860,8 K], добавлен 23.04.2011

  • Эволюция систем искусственного интеллекта. Направления развития систем искусственного интеллекта. Представление знаний - основная проблема систем искусственного интеллекта. Что такое функция принадлежности и где она используется?

    реферат [49,0 K], добавлен 19.05.2006

  • Составление программы искусственного интеллекта в среде программирования Delphi 7, осуществляющую игру "крестики-нолики" с пользователем. Данная программа имеет возможность запоминания ходов и на основе них ходить так, чтобы не оказаться в проигрыше.

    контрольная работа [787,7 K], добавлен 16.01.2011

  • Обзор образовательных стандартов педагогического образования в области искусственного интеллекта. Построение модели предметной области в виде семантических сетей. Характеристика проблемного обучения. Основные средства языка программирования Пролог.

    дипломная работа [387,8 K], добавлен 01.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.