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

 

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

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

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

Кафедра ФиПМ








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

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




Выполнил:

ст. гр. АИС - 108

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

Проверил:

Абрахин С. И.









Владимир 2011

Содержание


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

.1Нечеткая логика

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

.3Задание

.4Реализация

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

.1 Нейронные сети

.2 Задание

.3 Реализация

Вывод


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


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

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



Обозначения:- входной четкий вектор;

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

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

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)= evalfis(input, fis, numPts)

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

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

Описание:

Выполняет нечеткий логический вывод. Функция evalfis может иметь три входных аргумента, первые два из которых обязательные:- матрица значений входных переменных, для которых необходимо выполнить нечеткий логический вывод. Матрица должна иметь размер 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');= 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;= gaussmf(x, [0.5 5]);

y2 = gaussmf(x, [1 5]);= gaussmf(x, [2 5]);= gaussmf(x, [3 5]);(x, [y1; y2; y3; y4])(' gaussmf, b=5, c=0.5…3')(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, данная команда возвращает следующие аргументы:- Причина остановки алгоритма. - Структура с информацией о эффективности работы алгоритма для каждого выполненного поколения. - состояние последнего семейства. - конечное состояние.

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

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

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

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

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

options = : 'doubleVector': [2x1 double]: 20: 2: 0.8000: 'forward': 20: 0.2000: 100: Inf: -Inf: 50: 20: []: []: 1: @gacreationuniform: @fitscalingrank: @selectionstochunif: @crossoverscattered: @mutationgaussian: []: 'final': []: []: 'off'

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

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

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

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

Если далее выполнить команду:(@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, как это описано в разделе Экспорт опций и задач. В случае экспорта принимаемых по умолчанию опций в инструментарий Генетического алгоритма окончательная структура опций будет иметь те же самые установки, как и принимаемая по умолчанию структура, возвращаемая из команды= 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 номер варианта, в соответствии с порядковым номером в журнале старосты.

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


.4Реализация


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



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


Вычисляем ошибку по гауссу и норму по гауссу для нечеткой логической системы: =newfis('kurs');

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

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

%задаем функции принадлежности входных переменных=addmf(a,'input',1,'g1','gaussmf',[0.4248 -2]);

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


%задаем входную переменую=addvar(a,'input','x2',[-2 2]);

%задаем функции принадлежности входных переменных=addmf(a,'input',2,'g1','gaussmf',[0.4248 -2]);

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


%задаем выходную переменую=addvar(a,'output','y',[-8 24]);

%задаем функции принадлежности выходной переменной=addmf(a,'output',1,'g1','gaussmf',[3.397 -8]);

a=addmf(a,'output',1,'g2','gaussmf',[3.397 0]);=addmf(a,'output',1,'g3','gaussmf',[3.397 8]);=addmf(a,'output',1,'g4','gaussmf',[3.397 16]);=addmf(a,'output',1,'g5','gaussmf',[3.397 24]);


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

1 5 1 1

2 4 1 1

3 2 1 1

4 1 1 1

5 1 1 1

1 4 1 1

2 3 1 1

3 2 1 1

4 1 1 1

5 1 1 1

1 2 1 1

2 2 1 1

3 2 1 1

4 2 1 1

5 2 1 1

1 1 1 1

2 1 1 1

3 2 1 1

4 3 1 1

5 4 1 1

1 1 1 1

2 1 1 1

3 2 1 1

4 4 1 1

5 5 1 1];

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

a=addrule(a,ruleList);


% изменяем значения методов=setfis(a,'AndMethod','prod');=setfis(a,'ImpMethod','prod');

= 0;i=-2:1:2j=-2:1:2= i^2 + j^2 + 4*i*j;= evalfis([i j], a);= sum + (realValue - eVal)^2;


%ошибак по Гауссу= sqrt(sum);


sum = 0;i=-2:1:2j=-2:1:2= i^2 + j^2 + 4*i*j;= sum + (realValue)^2;

%норма по Гауссу= error / (sqrt(sum));

Вывод:

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

? = 11.3060

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

? = 0.2444

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

%

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

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

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

%


function error=fitnes(pop)


% создаем новый фис файл=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)]);=addmf(a,'input',1,'g3','gaussmf',[pop(1,5) pop(1,6)]);=addmf(a,'input',1,'g4','gaussmf',[pop(1,7) pop(1,8)]);=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)]);=addmf(a,'input',2,'g3','gaussmf',[pop(1,15) pop(1,16)]);=addmf(a,'input',2,'g4','gaussmf',[pop(1,17) pop(1,18)]);=addmf(a,'input',2,'g5','gaussmf',[pop(1,19) pop(1,20)]);


%задаем выходную переменую=addvar(a,'output','y',[-8 24]);

%задаем функции принадлежности выходной переменной=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)]);=addmf(a,'output',1,'g3','gaussmf',[pop(1,25) pop(1,26)]);=addmf(a,'output',1,'g4','gaussmf',[pop(1,27) pop(1,28)]);=addmf(a,'output',1,'g5','gaussmf',[pop(1,29) pop(1,30)]);


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

1 5 1 1

2 4 1 1

3 2 1 1

4 1 1 1

5 1 1 1

1 4 1 1

2 3 1 1

3 2 1 1

4 1 1 1

5 1 1 1

1 2 1 1

2 2 1 1

3 2 1 1

4 2 1 1

5 2 1 1

1 1 1 1

2 1 1 1

3 2 1 1

4 3 1 1

5 4 1 1

1 1 1 1

2 1 1 1

3 2 1 1

4 4 1 1

5 5 1 1];

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

a=addrule(a,ruleList);


% изменяем значения методов=setfis(a,'AndMethod','prod');=setfis(a,'ImpMethod','prod');

= 0;i=-2:1:2j=-2:1:2

%значеие из фисфайла= evalfis([i j],a);

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

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

%сумма по Гауссу= sum + (efis - realValue)^2;

end


%выходной параметр - ошибка по Гауссу= sqrt(sum);

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

= gaoptimset;

% интервал принадлежности= 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]);

% начальные значения параметров= 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]);= 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]);= gaoptimset(options,'PlotFcns', { @gaplotbestf });

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

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



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

) для 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

) для 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

) для 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 Реализация


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


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



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


k=1;(1,25)=0;i=-2:1:2j=-2:1:2(1,k) = i^2 + j^2 + 4*i*j;=k+1;


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



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



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




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




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

[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. Так же была реализована аппроксимация функции с применением аппарата нечеткого логического вывода, с оптимизацией параметров функций принадлежности с помощью генетического алгоритма и использованием нейронных сетей в качестве универсального аппроксиматора.


Министерство образования и науки РФ Владимирский Государственный Университет Имени А. Г. и Н. Г. Столетовых Кафедра ФиПМ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ