Лаб. работы по нейронным сетям_Майя, Света, Вер..

П2. Нейронные сети
Лабораторная работа № 4. Изучение свойств линейного нейрона и линейной нейронной сети
Цель работы: изучить свойства линейного нейрона. Для работы с нейронными сетями необходимо инсталлировать Matlab и обладать первоначальными знаниями относительно языка системы. Поскольку Matlab представляет собой интерпретатор, то обучение инструментарию нейронных сетей заключается в основном в изучении функций и их параметров. Узнать возможности нейрона как классификатора простых линейно сепарабельных задач можно путем проведения экспериментов с моделью одного линейного нейрона.
Функция newp. Для того чтобы создать нейрон, используют функцию newp, имеющую следующий синтаксис:
net = newp(PR, S, TF, LF),
где:
PR – матрица минимальных и максимальных R входных элементов;
S – количество нейронов (при создании одного нейрона S = 1);
TF – функция активации (transfer function);
LF – имя функции обучения нейрона.
В случае если параметры функции newp не заданы, их значения определяются посредством ввода значений в диалоговые окна. Построенный нейрон характеризуется функциями весов (weight function), входов сети (net input function) и определенной функцией активации. Функция весов – это умножение весов на входной сигнал, функция входов сети – их сумма. Веса задаются как для входов нейрона, так и для фиксированного входа, задающего порог срабатывания (bias). Вектор весов инициализируется нулями. Для обучения используются функции, рассмотренные ниже.
Функция learnp настраивает веса нейрона. Синтаксис функции обучения довольно сложен:
[dW, LS] = learnp(W, Р, Z, N, A, T, E, gW, gA, D, LP, LS), [db, LS] = learnp{b, ones(l,Q), Z, N, A, T, E, gW, gA, D, LP, LS),
info = learnp(code).
Функция learnp (W, P, Z, N, A, T, E, gW, gA, D, LP, LS) имеет несколько входов, где вектор W – вектор весов; Р – вектор входов; Z– вектор взвешенных входов; N – вектор сети; А – вектор выхода; Т – вектор желаемых выходов; Е – вектор ошибок; gW – вектор изменения весов; gA – изменения выходов. Функция возвращает значения: dW – изменения матрицы весов; LS – новый уровень обученности.
Функция learnp может быть использована с параметрами по умолчанию:
dW = learnp([ ], p, [ ], [ ], [ ], [ ], e, [ ], [ ], [ ], [ ], [ ]).
Использование пустого списка [ ] означает параметр по умолчанию.
Функция learnp вычисляет изменение весов dW'для заданного нейрона в соответствии с правилом обучения перцептрона:

т. е. dw = е(р13 QUOTE 1415.
Функция обучает нормализованные веса:
[dW, LS] = learnpn(W, Р, Z, N, A, T, E, gW, gA, D, LP, LS).
Функция learnpn вычисляет изменение весов dW для данного нейрона и его входа Р и ошибки Е в соответствии с нормализованным правилом обучения перцептрона:


т. е. dw = е(np13 QUOTE 1415.
Линейный нейрон имеет одно существенное ограничение. Входные векторы должны быть линейно сепарабельны. Если векторы невозможно отделить прямой или гиперплоскостью, то перцептрон не способен решить задачу классификации.
Функция adapt адаптирует нейрон к условиям задачи:
[net, Y, Е, Рf, Аf] = adapt(net, Р, Т, Рi, Аj).
Параметры функции: net – имя сети, Р – входы сети, Т – желаемый выход, Р, – исходные условия задержки, At – исходные условия задержки для слоя. Функция возвращает параметры адаптированной сети net.adaptParam: net – измененная сеть, Y – выход сети, Е– ошибки сети, Pf– условия задержки входов, Аj – условия задержки слоя. Параметры Рi и Pf необязательные и необходимы только для сетей, имеющих задержки на входах и слое.
Функция train также обучает нейронную сеть и использует следующий синтаксис:
[net, tr] = trAjn{NET, Р, Т, Рi, Aj);
[net, tr] = trAjn(NET, P, T, Pi, Aj, W, TV).
Функция trAjn(net, P, T, Ph Aj) имеет следующие параметры: net – сеть, P – входы сети, Т – желаемый выход, Рi – исходные условия задержки входа, Aj – исходные условия задержки слоя.
Функция имитирует нейронную сеть:
[Y, Pf,Af] =sim(net, Р, Рi, Aj), где
net – сеть;
Р – входы сети;
Pi – исходные условия задержки входов сети;
Aj – исходные условия задержки слоя.
Функция возвращает:
Y – выходы сети;
Pf – окончательные условия задержки входов;
Af – окончательные условия задержки слоя.
Функции активации. Ниже представлены назначения этих функций.
Функция Назначение
hardlim (N) Возвращает 1, если N положительное и 0 в противном случае.
tansig (N) Вычисляет гиперболический тангенс от входа.
purelin Вычисляет выход слоя от сетевого входа.
Функции графического интерфейса и вспомогательные функции. Назначение этих функций представлено ниже.
axis{[Xmin Хтах Ymin Ymaxj) – устанавливает диапазоны координатных осей;
title ('строка') – выводит в графическое окно рисунков заголовок графика;
rand(M, N) – возвращает матрицу размерности М на N со случайными значениями;
х1аbе1(13 QUOTE 1415строка13 QUOTE 1415), у label (13 QUOTE 1415строка13 QUOTE 1415) – подписывают наименование координатных осей;
cla reset – очищает координатную сетку в окне рисунков;
hold on и hold off – включают и отключают режим добавления графиков на координатную сетку;
text(X,Y, 'строка') – выводит строку, начиная с указанных координат в поле рисунков;
pause(n) – ожидает пользовательского ответа п секунд
plot(X, Y, 'цвет и символ') – изображает на координатной сетке точки с координатами, заданными векторами X, Y, с помощью указанного символа и цвета;
plotpv(P,Т) – изображает точки Р указанными маркерами Т, где Р – матрица входных векторов размерностью R на Q (R должен быть 3 или меньше), Т – матрица двоичных векторов размерностью S на Q (S должен быть 3 или меньше);
plotes(WV, BV, ES, V) – изображает поверхность ошибки на отдельном входе, где WV – вектор строк значений весов W размерности N, BV – вектор строк значений порогов В размерности М, ES – матрица ошибки размерности М на N, V – угол зрения по умолчанию [-37,5, 30];
plotsom(POS) – изображает позицию нейрона красной точкой, связывая синей линией нейроны, находящиеся друг от друга на расстоянии 1. POS – матрица S N-размерных нейронов;
ind2vec и veclind – позволяют представить индексы либо собственно значениями индексов, либо векторами, строки которых содержат 1 в позиции индекса;
full – преобразует разреженную матрицу в полную;
maxlinlr(P) – функция возвращает максимальный уровень обученности линейного слоя без bias, который обучался только на векторе Р;
trainlm – выполняет обучение многослойной НС методом Левенберга – Марквардта;
netprod – входная сетевая функция, которая вычисляет выход сетевого слоя, умножая входной вектор на веса и прибавляя bias;
init – итеративно инициализирует НС;
Структура данных описания нейронных сетей. Структура данных net – это описание обученной НС. Обучение осуществляется в соответствии со следующими параметрами, значения которых либо устанавливаются пользователем, либо по умолчанию.

Структура данных
Комментарий

net.train?*aram.epochs 100
максимальное количество эпох обучения

[ Cкачайте файл, чтобы посмотреть ссылку ] 0
целевое значение ошибки

net.trainParam.maxJail 5
максимальное значение ошибки

net.!rainParam.mem_reduc 1
фактор оптимизации процесса обучения: оптимизация использования памяти или времени процессора

net.trainParam.min_grad 1е-10
минимальное значение градиента

net.trainParam.show 25
количество эпох между показами

net.trainParam.time inf
максимальное время обучения в секундах

TR
структура данных, содержащая значения об
обученности НС в текущую эпоху

TR.epoch
номер эпохи

TR.perf
уровень обученности (Trainingperformance)

TR.vperf
степень качества (Validation performance)

TR.tperf
результативность обработки теста (Testperformance)

TR.mu
значение адаптивности

Структура данных описания адаптированной НС net.adaptfcn включает в себя следующие поля net.adapt.param:
NET – адаптированная НС;
Y – выходы НС;
Е – ошибки НС;
Pf – окончательные входные значения задержек;
Аf – окончательные выходные задержки;
TR – результат обучения (эпохи и целевая ошибка).
Проведем в среде Matlab toolbox эксперименты, используя рассмотренные функции.

Пример П12. Создание нейрона, выполняющего функцию логического И.
Создадим нейрон с одним двухэлементным входом (интервалы первого и второго элементов [0; 1]). Определим два первых параметра функции newp, а в качестве значений третьего и четвертого параметра (типа ФА и имени процедуры обучения) воспользуемся значениями по умолчанию.
\ \ создание нейрона с одним двухэлементным входом (Интервал первого элемента [0; 1] и интервал второго элемента [-2; 2]
net = newp([0 1; -2 2], 1);
Для того чтобы исследовать поведение нейрона, необходимо имитировать его работу с помощью функции sim. Для определения последовательности значений входа создадим последовательность Ph:
\ \ создание последовательности значений входа Р1 = {[0; 0] [0; 1] [1; 0] [1; 1]};
\\ имитация работы нейрона net на последовательности входов Р1 желаемых выходов – Т, которая позволит нам провести адаптацию нейрона (обучить его) через 20 проходов .
У = sim (net, P1) ;
\\ создание последовательности выходов
Т1 = {0, 0, 0, 1};
\\ установка количества проходов (циклов) адаптации
net.adapt Param.passes = 20;
\\ адаптация нейрона net для обучающей выборки <Р1;Т> net = adapt (net, PI, Tl) ;
\\ симуляция работы нейрона net на последовательности входов P1
Y = sim (net, P1);

В результате мы получим нейрон, выполняющий функцию логического И.
Пример П13. Обучение нейрона выполнению функции логического ИЛИ.
Для переобучения нейрона на выполнение функции ИЛИ переопределим входы Р и выходы Т.
\\ создание последовательности входов Р2 = [0 0 1 1; 0 1 0 1];
\\ создание последовательности выходов (реакций) для нейрона, выполняющего функцию логического ИЛИ
Т2 = [0, 1, 1, 1];
Инициализируем нейрон, обучим его на 20 проходах (эпохах) \\ инициализация нейрона net net = init(net) ;
\\ имитация работы нейрона net на последовательности входов Р2
y = sim(net, P2) ; \\ установка количества проходов net. trainParam.epochs = 20;
\\ обучение нейрона net на обучающей выборке <Р2, Т2> net = train (net, Р2, Т2);
\\ имитация работы нейрона net на последовательности входов Р2 у = sim(net, Р2);
Для случайного изменения весов и порога срабатывания используем функцию init. По умолчанию для создаваемого нейрона указана функция hardlim, изображенная на рис. П18.
Пример П 14. Определение входов со случайными значениями.
Определим случайный вход Р и ошибку E для нейрона с двухэлементным входом.
\ \ определение входа р как вектора двух случайных чисел из интервала [0; 1] р = rand(2,1) ;
\ \ определение входа е как случайного числа из интервала [0; 1] е = rand (1,1);
Пример П15. Получение графика функции активации hardlim.
Получим график функции активации для интервала [ – 3;+3] с шагом 0.1.
\\ определение переменной п со значениями из интервала[-3; 3] с шагом 0.1
n = -3 : 0,1 : 3;

Рис. П18. Функция активации hardlim
\\ вычисление пороговой функции от переменной n b = hardlim(n);
\\ изображение графика функции b = hardlim(n) plot(n, b) ;
Пример П16. Имитация работы линейного нейрона.
Создадим с помощью newp нейрон с двухэлементным входом (значения входа в интервале [0; 1]) net= newp([0 1;0 l],1). Функция sim имитирует работу нейрона для отдельного вектора и для трех векторов.
\\ определение двухэлементного вектора p1 = [.3; .7];
\\ имитация работы нейрона net на входном векторе
результат имитации – вектор a1 a1 = sim (net, p1);
\\определение матрицы входов размерностью 3 на 2(три двухэлементных вектора) р2 = [.3 .5 .2; .8 .5 .4] ;
\ \ имитация работы нейрона net на входном векторе р2, результат имитации – вектор а2 а2 = sim (net, р2) ;
Пример П17. Обучение нейрона классификации векторов на две категории.
Начнем с классификации векторов на основе двухвходового нейрона. Будем использовать функцию newp для создания нейрона, sim для имитации его работы, adapt для адаптации (обучения) нейронной сети. Обучим двухвходовой нейрон классифицировать входные векторы на две категории. Определим четыре входных вектора нейрона.
\ \ определение четырех двухэлементных входов Р = [ -0,5 -0,5 +0,4 -0,2;-0,5 +0,5 -0,4 +1,0];
Зададим желаемые выходы нейрона для определенных векторов.
Т= [1 10 0]; определение выходов нейрона – реакций на входы Р. Изобразим входные векторы (точки) на плоскости:
plotpv(P, Т);


Рис. П19. Исходные векторы, предназначенные для классификации нейроном
Каждый из четырех входных векторов на плоскости Р определяется двумя координатами, представленными как двухэлементные столбцы в матрице Р (рис. П19).
Создадим один линейный нейрон с двумя входами, значения которых лежат в интервале [ – 1, 1].
\ \ создание линейного нейрона с двумя входами из интервала [-1, 1] nеt = newp ([-1 1; -1 1], 1);
Нейрон по умолчанию имеет функцию активации hardlim и такой нейрон разделяет входные векторы прямой линией.
Определим координаты линии классификации: веса (IW) и порог срабатывания нейрона (b).
\ \ получение управляющей структуры linehandle для изображения разделяющей линии в координатах весов (IW)и порога срабатывания нейрона (b) . linehandle = plotpc (net.IW{1}, net.b{1}); \ \ изображение разделяющей прямой
plotpc (net.IW{ 1}, net.b{1});
Если исходным весам задать нулевые значения, то любые входы дадут одинаковые выходы, и линия классификации не будет видна на плоскости. Проведем обучение:
\\ очистка координатных осей cla;
\ \ изображение входных векторов двух категорий, категория задается элементами вектора Т plotpv(P, Т) ;
\\ получение управляющей структуры linehandle linehandle = plotpc (net.IW{ 1}, net.b{1}); \\ присвоение начального значения ошибки
Е = 1;
\ \ инициализация нейрона net = init (net);
\\ получение управляющей структуры linehandle linehandle = plotpc (net.IW{ 1}, net.b{1}); \\ организация цикла пока ошибка не равна 0 while (mse (Е)) ',
\ \ адаптация нейрона net на обучающей выборке <Р, Т>, функция возвращает адаптированный нейрон net, выход Y, ошибку Е
[net, Y, Е] = adapt (net, Р, Т) ;
\\ изображение разделяющей прямой нейрона после адаптации
linehandle = plotpc(net.IW{1}, net.b{1}, linehandle); \\ очистка окна графиков drawnow;
\\ конец цикла while end;
Функция adapt возвращает новый объект – сеть, которая выполняет классификацию, выход сети и ошибку (рис. П20). Проведем классификацию нового вектора с помощью обученного нейрона на основе функции sim. Определим новый вектор р.
\\ определение вектора Р
Р = [0,6; 1,1]; I
\\ имитация работы нейрона net, получение отклика нейрона а а = sim (net, р);
\\ изображение входа р, отнесенного нейроном к категории а plotpv(p, а);



Рис. П20. Прямая, разделяющая исходные векторы на классы

Обученный нейрон можно использовать для классификации любого вектора
\ \ включить режим добавления графиков в графическом окне hold on;
\\ изображение входных точек в соответствии с категориями Т plotpv(P,Т) ;
\\ изображение разделяющей поверхности plotpc (net. IW{1}, net.b{1}); \\ отключение режима добавления графиков hold off;
Нейрон классифицирует новую точку, как принадлежащую категории «0» (представлена кружком), а не категории «1» (представлена +)
Пример П18. Создание слоя линейных нейронов.
Рассмотрим последовательность из 10 шагов (для выхода T1, который известным образом зависит от входов Р1):
\\ последовательность входов
P1 = (-1 0 0 0 1 1 -1 0-1 1);
\\ последовательность выходов
T1 = {-1 -1 1 0 1 2 0 -1 -1 1} ;
Используем функцию newlin, чтобы создать нейрон со значениями входа в интервале [-1; 1], задержками входа от 0 до 1 и уровнем обучения 0,1.
\\создание линейного слоя из одного нейрона со значениями входа в интервале
[-1; 1 ], задержками входа от 0 до 1 и уровнем обучения 0,1.
net = newlin ([-1 1], 1, [0 1], 0,1);
Адаптируем нейрон к задаче одним проходом через последовательность входа. Измерим среднюю квадратичную ошибку с помощью функции mse(e).
\\ адаптация нейрона к последовательности p1 [net, у, е, pf] = adapt (net, PI, Tl); \\ измерение ошибки mse(e) ;
Получим довольно большую ошибку. Вновь адаптируем сеть на 10 шагах последовательности, используя предыдущее значение Pf как новое исходное значение задержки:
р2 = {1 -1 -1 1 1 -1 0 0 0 1}; t2 = {2 0 -2 0 2 0 -1 0 0 1} ;
\ \ адаптация с начальным вектором задержки pf [net, у, е, pf] = adapt (net, р2, t2, pf); mse(e);
Адаптируем сеть на 100-разовом прогоне последовательности:
\\ формирование новой последовательности входов рЗ = [Р1 Р2];
\\ формирование новой последовательности выходов t3 = [T1 t2];
\\ установка количества проходов net.adaptParam.passes = 100; \\ адаптация нейрона
[net, у, e] = adapt (net, p3, t3) ; mse (e);
Получим приемлемую ошибку, значит сеть обучена зависимости выходов от входов.
Пример П19. Изучение возможности линейного нейрона решать линейно несепарабельные задачи.
Проведем эксперимент с линейным нейроном по классификации пяти входных векторов на две категории, которые линейно несепарабелльны (рис. П21). Определим входы линейного нейрона:
\\ входы линейного нейрона Р = [-0,5 -0,5 +0,4 -0,1 -0,9;-0,5 +0,5 -0,5 +1,0 +0,0]; и вектор желаемых векторов:
Т = [1 1 0 0 0]; выходы – реакции нейрона на входы Р
Поскольку векторы разных видов нельзя отделить прямой линией, их классификация невозможна (рис. П22).

Рис. П21. Линейно несепарабельные исходные векторы



Рис. П22. Прямая, не разделяющая исходные векторы на классы


\\ создание нейрона net = newp([-2 2; -2 2] ,1) ; \ \ изображение обучающей выборки plotpv(P, Т) ;
\\ изображение разделяющей прямой linehandle = plotpc (net.W{1}, net.b{1}); Обучим нейрон классифицикации векторов. \\ организация цикла обучения нейрона
for а = 1 : 20; 1
\\ адаптация нейрона
[net, Y, Е] = adapt (net, Р, Т) ;
\ \ получение управляющей структуры изображения для новой разделяющей прямой linehandle = plotpc (net. IW{1}, net.b{1}, linehandle) ; \\ изображение разделяющей прямой drawnow; \\ конец цикла
end;

Цикл дает возможность адаптировать нейрон при одном проходе, изобразить линию классификации и остановиться. Нулевая ошибка, а следовательно, и классификация никогда не будет получена. Фундаментальное свойство линейного нейрона – ограничение линейно сепарабельными данными.
Пример П20. Процесс обучения линейного нейрона.
Для выполнения примера будем использовать функции: newlin – для создания нейрона, train – для обучения, sim – для имитации поведения нейрона. Определим входы нейрона и желаемые выходы:
\ \ определение входов нейрона Р = [1,0 -1,4];
\\ определение выходов нейрона Т = [0,5 1,0];
Вектор Р задает два входных элемента. Используем линейный нейрон с одним входом для решения задачи. Установим интервалы изменения весов и порогов:
\\ установка интервала весов w = -1 : 0,1 : 1;
\\ установка интервала пороговых значений b = -1 : 0,1 : 1;
Вычислить и изобразить ошибку нейрона можно следующим образом:
\\ формирование поверхности ошибки в координатных осях – весов и пороговых значений ES = errsurf(Р, Т, w, b, 'purelin'); \\ изображение поверхности ошибки plotes (w, b, ES);
Лучший вес и значение порога – это самые низкие точки на поверхности ошибки (рис. П23). Переопределим уровень обученности и создадим нейрон.
\\ возвращение максимального уровня обученности для линейного слоя с bias, для обучения на основе Р maxlr = 0.20 * maxlinlr (Р, 'bias'); net = newlin ([-2 2],1,[0], maxlr);
Функция maxlinlr находит значение, соответствующее самому быстрому уровню обученности линейной нейронной сети. Возьмем 20 % от вычисленного уровня.



Рис. П23. Поверхность ошибки
Функция newlin содержит четыре параметра:
матрицу интервалов входов размерностью R х 2;
количество элементов в выходном векторе;
вектор задержек входов;
уровень обучения.
Установим целевое значение ошибки:
\\ установка целевого значения ошибки net. trainParam.goal = . 001;
Получим поверхность ошибки.
\\ формирование поверхности ошибки ES = errsurf(P, Т, w, b, «purelin»);
\\ изображение поверхности ошибки plotes(w, b, ES);
\\ создание 2 координатных осей в графическом окне и установка первых осей активными subplot (1, 2, 2);

Рис. П24. Изменение среднеквадратичной ошибки в ходе обучения
Произвольно изменим веса нейрона в установленных интервалах:
net.IW{1, 1}=0;
\\ произвольное изменение весов нейрона net.b{1}] = 0,1;
\\ эпоха обучения нейрона, формирование истории обучения tr. [net, tr] = train (net, P, T);
Функция train выводит на экран историю обучения обученной сети (tr). График (рис. П24) показывает падение ошибки в ходе обучения:
\ \ изображение истории обучения на поверхности ошибки plotperf(tr, net. trainParam.goal);
p = -1,1;
\\ формирование выхода обученного нейрона для входа -1,1.
а = sim (net, р);





Используем функцию sim, чтобы протестировать нейрон для входа – 1,1, и посмотрим, будет ли выход равен 1,0. Результат очень близок 1.
Контрольные вопросы
Какие функции выполняет линейный нейрон?
Какие функции активации используют в НС?
Какие задачи называют линейно сепарабельными?
Можно ли обучить линейный нейрон выполнять логическую функцию исключающего ИЛИ?
Какой алгоритм используется для обучения однослойных НС?


Лабораторная работа № 5. Изучение многослойного нелинейного перцептрона и алгоритма обратного распространения ошибки

Цель работы: изучить возможности многослойного перцептрона как аппроксиматора и классификатора.
Функция newff создает нейронную сеть прямого распространения сигнала, обучаемую с помощью алгоритма обратного распространения ошибки:
net = newff(PR, [SI S2 SN1], {TF1,TF2, TFN1), BTF, BLF, PF).
Рассмотрим параметры функции newff: PR – матрица интервалов значений для R входных элементов, задаваемых минимальным и максимальным значениями; Si – размер i-го слоя, для N слоев; TFi – функция активации i-го слоя, по умолчанию используется функция tansig – гиперболический тангенс; BTF – функция обучения сети методом обратного распространения ошибки, по умолчанию используется функция traingdx; BLF – функция изменения весов при обучении, по умолчанию используется learngdm; PF – функция измерения ошибки, по умолчанию mse. Функция newff возвращает многослойную нейронную сеть прямого и обратного распространения сигнала и ошибки соответственно. Функции активации могут быть выбраны из следующего перечня: гиперболический тангенс tansig; логистическая сигмоида logsig или линейная функция purelin.
Пример П21. Создание и обучение нейронной сети с помощью алгоритма обратного распространения ошибки.
Зададим с помощью графика исходную функцию:
\ \ входы НС
р = [0 1 2 3 4 5 6 7 8]; \ \ желаемые реакции НС
t = [0 0,44 0,88 0,11 -0,66 -0,95 -0,45 0,78 0,92]; \\ изображение аппроксимируемой функции plot(p, t, 'о');
Используем функцию newff, чтобы создать двухслойную сеть прямого распространения. Пусть сеть имеет входы с интервалом значений от 0 до 8, первый слой с 10 нелинейными сигмоидальными, второй – с одним линейным нейронами. Используем для обучения алгоритм обратного распространения ошибки (backpropagation) Левенбурга – Марквардта.
\\ создание двухслойной НС прямого распространения с интервалом значений входов от 0 до 8, причем первый слой содержит 10 нелинейных сигмоид, а второй – один линейный нейрон. Для обучения используется алгоритм обратного распространения ошибки (backpropagation).
net - newff([0 8], [10 1], {'tansig' 'purelin'},' trainlm');
\\ имитация работы обученного нейрона y1 = sim(net, p)
\\ изображение результатов работы обученного нейрона plot(p, t, 'о', р, y1, 'х');
Обучим сеть на 100 эпохах с целевой ошибкой 0,01:
\\ установка количества проходов
net.trainParam.epochs = 50;
\\ установка целевого значения ошибки
net.trainParam.goal = 0,01;
\\ обучение НС
net = train (net, р, t);
\\ имитация работы обученной НС
у2 = sim(net, р)
\\ изображение результатов работы НС (рис. П25) plot(p, t, о’, р, y1, х’, р, у2, +’)

Рис. П25. Результат аппроксимации векторов двухслойным перцептроном
Для исследования работы алгоритма обратного распространения ошибки воспользуемся примером, встроенным в Matlab toolbox, набрав команду demo.
В появившемся диалоговом окне необходимо последовательно выбирать пункты меню: toolbox, neural networks, Other Neural Network Design textbook demos, Table of Contents, 10 – 13, Backpropagation Calculation.
В примере используется двухслойный перцептрон с двумя нелинейными нейронами в первом слое и одним во втором. Действие алгоритма обратного распространения ошибки разбито на следующие шаги: назначение входа и желаемого выхода, прямой проход входного сигнала до выхода, обратное распространение ошибки, изменение весов. Переменные, позволяющие проследить работу алгоритма обратного распространения ошибки, обозначены следующим образом:
Р – входной сигнал;
W1(i) – вектор весов первого слоя;
W1(1) – вес связи, передающий входной сигнал на первый нейрон;
W1(2) – вес связи, передающий входной сигнал на второй нейрон;
W2(i) – вектор весов второго слоя;
W2(1) – вес связи, передающий входной сигнал с первого нейрона во второй слой,
W2(2) – со второго в первый;
B1(i) – вектор пороговых значений (bias) нейронов первого слоя, i = 1,2;
В2 – пороговое значение (bias) нейрона второго слоя;
N1(i) – вектор выходов первого слоя, i = 1,2;
N2 – выход второго слоя;
A1(i) – вектор выходных сигналов первого слоя после выполнения функции активации (сигмоиды), i = 1,2;
А2 – выход второго слоя после выполнения функции активации (линейной).
Таблица П2
Результаты поэтапного выполнения алгоритма обратногораспространения ошибки

Этап
Прямое распространение входного сигнала
Обратное распространение ошибки
Изменение весов

A1(1),A1(2)
Logsig(W1P+В1) = =[0,321, 0,368]
Не выполняется
Не выполняется

А2
purelin (WlP +В1)= 0,446
То же
То же

e
t -А2 = 1,261
»
»

N1(1), N1(2)
Не выполняется
13 QUOTE 1415 =
=[-0.049,0.100]

»

N2
То же
13 QUOTE 1415 =
=-2.522

»

W1(1),W1(2)
»
Не выполняется
W1= W1 –lr* N1*P=[-0.265, -0.420]

B1(1),B1(2)
»
То же
B1= B1 -lr( N1 = [-0.475, -0.140]

B2
»
»
B2= B2 -lr( N2 =0.732

W2(1),W2(2)
»
»
W2= W2 -lr*N2* N1 = [0.171, =0.077]

Lr – коэффициент обучаемости.
Пусть входной сигнал Р =1,0, а желаемый выход t = 1 + sin(p *
·/4) = 1,707.
Результаты выполнения этапов алгоритма представлены в табл. П2.

Контрольные вопросы
Каким алгоритмом обучают многослойные НС?
Из каких основных этапов состоит алгоритм обратного распространения ошибки?
Почему алгоритм обратного распространения ошибки относится к классу алгоритмов градиентного спуска?
Как влияет функция принадлежности на правило изменения весов в обратном алгоритме распространения ошибки?

Лабораторная работа № 6.
Изучение радиальных базисных, вероятностных нейронных сетей, сетей регрессии

Цель работы: изучить модель вычислений радиального базисного нейрона, структуру и функции сетей регрессии, вероятностных нейронных сетей.
Функция newrb создает радиальную базисную сеть и имеет следующий синтаксис:
net = newrb (Р, Т, goal, spread).
Радиальные базисные сети используют для аппроксимации функций. Функция newrb конструирует скрытый (первый) слой из радиальных базисных нейронов и использует значение средней квадратичной ошибки (goal).Функция newrb(P,Т, goal, spread) имеет следующие аргументы: Р – матрица Q входных векторов размерности R на Q; Т – матрица Q векторов целевых классов S на Q; goal – средняя квадратичная ошибка, по умолчанию 0,0; spread – разброс радиальной базисной функции, по умолчанию 1,0. Функция создает и возвращает в качестве объекта радиальную базисную сеть. Большое значение разброса приводит к большей гладкости аппроксимации. Слишком большой разброс требует много нейронов, для того чтобы подстроиться под быстро изменяюшуюся функцию, слишком малый – для достижения гладкости аппроксимации. Подобрать значение разброса можно с помощью многократных вызовов функции newrb. Создадим в среде Matlab радиальную базисную сеть:
net = newrbe(P, Т, spread).
Функция newrbe проектирует радиальную базисную сеть с нулевой ошибкой для заданных векторов. Функция newrbe(P, Т,spread) имеет три параметра: Р – матрица Q входных векторов размерности R на Q, Т – матрица Q целевых векторов - описателей класса размерности S на Q, spread – разброс радиальной базисной функции, по умолчанию 1,0. Функция создает радиальную базисную сеть.
Нейронная сеть регрессии – это вид радиальной базисной сети, которая часто используется для аппроксимации функций и быстро строит сеть для аппроксимации: net = newgrnn(P, Т,spread).
Функция
newgrnn(P, Т, spread)

имеет следующие входы: Р – матрица Q входных векторов размерности R на Q, Т – матрица Q целевых векторов классов размерности S на Q, spread – разброс радиальных базисных функций, по умолчанию 1,0. Функция возвращает НС регрессии. Чем больше разброс, тем более гладкой будет функция аппроксимации. Для того чтобы настроить функцию аппроксимации на исходные данные, используют разброс меньший, чем типичное расстояние между входными векторами.
Функция newgrnn создает двухслойную сеть. Первый слой содержит радиальные базисные нейроны, вычисляющие расстояние между входами и весами с помощью netprod. Второй слой имеет нейроны с функцией активации purelin. Только у первого слоя существует bias.
Вероятностную нейронную сеть проектируют с помощью функции
net = newpnn(P, Т, spread).

Вероятностная НС – это вид радиальной базисной сети, как и НС регрессии, но данные сети используются для решения задачи классификации, а не аппроксимации. Функция net = newpnn(P, T, spread) имеет такие же параметры, как и вышеописанная функция newgrnn. Если разброс близок к нулю, вероятностная НС действует как классификатор на основе принципа выбора «ближайшего соседа», в противном случае сеть принимает в расчет несколько близких векторов.
Пример П22. Создание и обучение НС регрессии.
Рассмотрим проектирование НС регрессии. Определим:
\\ входы НС регрессии Р = [1 2 3]; \ \ выходы НС регрессии. Т = [3,0 5,1 4,8];
Воспользуемся функцией newgrnn для создания НС регрессии. Зададим разброс радиальных базисных функций (переменная spread) меньше, чем 1, для того чтобы получить хорошую аппроксимацию данных и более гладкую функцию.
\\ установка разброса радиальных базисных функций Spread = 0,8;
\\ создание НС регрессии net = newgrnn (Р, Т, spread);
\\ имитация работы НС регрессии А = sim (net, Р) ;
\\ изображение аппроксимируемой функции plot(P, Т, '. ', 'markersize', 30); \ \ установка режима добавления графиков на координатные оси hold on,
\\ изображение работы необученной НС регрессии plot(P, А, '. ','markersize', 30, 'color', [1 0 0]);
cla reset'; \\ очистка координатных осей
р = 4,5; \\установка нового входа НС регрессии
а = sim (net, р); \\ получение отклика НС регрессии
\\ изображение аппроксимируемой функции plot(P, Т, '. ', 'markersize', 30);
axis ([0 9 – 1 4]); \\ установка диапазонов осей X и У hold on; \\ включение режима добавления графиков \\ изображение отклика НС регрессии на вход р plot(p, а, '.', 'markersize', 30, 'color', [1 0 0])/ title ('Новый входной вектор'); \ \ написать заголовок графика
xlabel ( 'P и p'); \\ пометить ось X
у label('T и a 1); \\ пометить ось X
cla reset; \\ очистить координатную сетку
р2 - 0: 2 : 9; \\ определить последовательность входов Р2
Сымитируем отклик сети для различных значений, чтобы увидеть результат аппроксимации (рис. П26).
\ \ получить отклик НС регрессии на последовательность входов Р2 &2 = sim (net, Р2); \ \ изобразить отклик НС регрессии plot(P2f К2, 'linewidth', 4, 'color9, [1 0 0]); hold on; \\ включить режим добавления графиков \ \ изобразить аппроксимируемую функцию plot(Р, Т, '. ', 'markersize', 30); axis ([0 9 – 1 4]); \\ установить диапазон осей title('Аппроксимируемая функция'); \\ озаглавить график xlabel('Р и Р2'); \\ пометить ось X ylabel('T и А2 '); \\ пометить ось Y

Рис. П26. Аппроксимация точек с помощью нейронной сети регрессии
Пример П23. Использование РБНС для аппроксимации функций.
Рассмотрим аппроксимацию функций на основе радиальной базисной сети.
Пусть J
\\ определение диапазона значений радиальной базисной функции р = -4: 2 : 4; 1
\ \ вычисление радиальной базисной функции на диапазоне р а = radbas (р) ;
plot (р, а) ; \\ изображение РБФ
title ('Радиальная базисная функция ');
\\ озаглавить график
xlabel ('Вход р'); \\ пометить ось X уlabel ('Выход а '); \\ пометить ось У
На рис. П27 изображена радиальная базисная функция. Функция newbe создаст необходимую сеть. Зададим аппроксимируемую функцию как набор точек:
\ \ определение последовательности аргументов аппроксимируемой функции Р Р = -1 : 1 : 1;
\\ определение значений аппроксимируемой функции, \\ соответствующих Р

Рис. П27. Радиальная базисная функция

T = [-.6662 -.3766 -.1129 .2111 .6565 .3301 .3649 .2006-.1913 -.3994 -.5022 -.4531 -.1133 .0866 .3333 .4955.3488 .2833 -.1112 -.6685 -.3255];
Изобразим график функции (рис. П28).
plot (Р, Т, ' * ') ; \\ изображение аппроксимируемой функции title('Обучающая выборка '); \\ озаглавить график xlabel('Входной вектор Р'); \\ пометить ось X уlabel ('Вектор Т'); \\ пометить ось У
Далее необходимо найти функцию, которая хорошо описывает заданную 21 точку.
Функция newrb создает РБНС для аппроксимации:
е = 0,02; % целевой среднеквадратичной ошибки
sp = 1; % разброса РБФ
net = newrb(Р,Т,е,sp); создание РБФ
X = -1 : .01 : 1; \\ определение вектора входов
Сымитируем работу сети.
У = simfnet, X); \\ формирование отклика У hold on; \\ включение режима добавления графика plot(X, У); \\ изображение результатов аппроксимации hold off; \\ отключение режима добавления графика

Рис. П28. Результат аппроксимации с помощью радиальной базисной нейронной сети

Пример П24. Использование вероятностной НС для классификации векторов.
Рассмотрим задачу классификации с набором входов Р и множеством классов, обозначенным Тс.
\\ определение входов Р = [1 2 3 4 5 6 7];
Тс = [1 1 3 3 2 1 1]; \\ определение желаемых выходов \\ конвертирование индексов в векторы, содержащие
1 в индексных позициях Т = ind2vec (Тс);
net = newpnn(P, Т); \\ создание вероятностной НС Y = sim (net, Р); \\ имитация работы вероятностной НС Yc = vec2ind(Y); \\ конвертирование номеров классов в векторы.
Контрольные вопросы
Какую функцию называют радиальной базисной функцией?
Из каких слоев состоит радиально-базисная НС?
Из каких слоев состоит НС регрессии?
Из каких слоев состоит вероятностная НС?
Какие виды НС предназначены для решения задачи аппроксимации функций, а какие – для классификации объектов?


Лабораторная работа № 7.
Изучение сетей Кохонена и алгоритма обучения без учителя

Цель работы: изучить алгоритм обучения без учителя на примере задачи кластеризации, алгоритм «победителя» Кохонена. Функция net возвращает соперничающий слой. Соперничающий слой используется для решения задачи классификации
net = newc(PR, S, KLR, CLR),где:
PR – матрица минимальных и максимальных значений для R входных элементов;
S – количество нейронов;
KLR – уровень обученности Кохонена, по умолчанию 0,01;
CLR – рекомендуемый уровень обученности, по умолчанию 0,001.
Соперничающий слой представляет собой слой с функцией вычисления расстояний negdist, сетевой функцией суммирования rttsum и функцией активации compet. Слой имеет веса на входах и bias.
Функция newsom создает самоорганизующуюся сеть – карту (SOM), которая решает задачу классификации:

net = newsom(PR, [dl, d2, ...], 7TO; DFCN, OLR, OSTEPS, TLR, TND), где:


PR – матрица минимальных и максимальных значений для R входных элементов;
I – размер I-го слоя;
TFCN – функция топологии;
DFCN – функция расстояния;
OLR – уровень обученности фазы упорядочения, по умолчанию 0,9;
OSTEPS – шаги фазы упорядочения, по умолчанию 1000;
TLR – уровень обученности фазы настройки, по умолчанию 0,02;
TND – расстояние соседства фазы настройки, по умолчанию 1.
Пример П25. Создание и использование соперничающего слоя.
Рассмотрим пример использования соперничающего слоя. Зададим множество, состоящее из четырех двухэлементных векторов Р.
Р = [ .2 .5 .1 .8; .3 .7 .2 . 6] ; \\ определение входного вектора
Соперничающий слой должен разделить входы на два класса: net = newcilQl; 0 1], 2); \ \ создание соперничающегослоя
net = train (net, Р) ; \\ обучение соперничающего слоя на векторе Р
Результирующая сеть выдает выходной вектор, конвертируемый в номер класса:
Y = sim(net, Р) ! W имитация работы слоя
Yc = vec2ind(Y) / W конвертирование выхода сети в номер кявсса У состоит из векторов, содержащих только по однойединице.
Функция vec2ind показывает индексы единичных позиций.

Рис. П29. Множество исходных векторов для кластеризации
Пример П26. Применение SOM для кластеризации векторов.

Рассмотрим работу SOM на примере задачи классификации 1000 двухэлементных векторов, расположенных в ограниченной прямоугольной области (рис. П29).
\\ определение множества векторов для кластеризации Р = rands(2, 1000);
plot(P(1,:), Р(2,:), '*g'); \\ изображение множества векторов
Создадим SOM:
net = newsom([0 1; 0 1],[5 6]); \\ создание SOM размерностью 5 х 6
Используем сеть размерностью 5x6, чтобы классифицировать вышеопределенные векторы. Создадим сеть с 30 центрами, к которым сеть будет относить каждый вектор на основе ближайшего соседства.
plotsom (net.iw{1,1}, net.layers{1}.distances); \\ визуализация SOM

Рис. ПЗО. Самоорганизующаяся карта кластеризации
Сначала центр прямоугольника совпадает с центрами классов. Обучим сеть на 100 эпохах и изобразим результат (рис. ПЗО):
net.trainParam.epochs = 100; \\ установка количества эпох net = train (net, Р); \\ обучение сети plotsom (net.iw {1,1}, net.layers{1} .distances); \\ визуализация SOM
p = [0,3; 0,5]; \\ определение нового вектора
a = 0; \\ начальная установка переменной а
а = sim (net, р) ; \\ получение отклика SOM вход р
Контрольные вопросы
В чем заключается задача кластеризации?
Какую структуру имеет НС Кохонена?
Каким алгоритмом обучается НС Кохонена?
П.З. Генетические алгоритмы
Учебный практикум по генетическим алгоритмам составлен как задание на разработку основных функций в среде Matlab, так как в распространяемых версиях системы расширение toolbox не содержит третью компоненту мягких вычислений – генетические алгоритмы. Полезным упражнением будет служить множество элементарных функций генетических алгоритмов. Практикум включает в себя также набор оптимизационных задач, в том числе классических, которые можно будет решать в разработанной среде генетических вычислений Matlab.
Лабораторная работа № 8. Основные элементарные функции генетических вычислений.

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

Функция
Назначение

Chromobin(length, cod)
Задает хромосому в форме бинарной строки длины length, если cod = 0, используется двоичное кодирование, если cod = 1, используется код Грэя.

Chromoint (length)
Задает хромосому в форме последовательности целых чисел длины length.

Chromolist(length)
Задает хромосому в форме списка пар (номер гена, целое значение) длины length.

InitPopulation (rand, cht, S)
Создает исходную первичную популяцию объектов – хромосом, причем rand – это функция порождения случайной хромосомы, cht – тип хромосомы (Chromobin, Chromoint, Chromolist), по умолчанию Chromobin, S – количество хромосом в популяции.

Mutationbin (chromo)
Мутация в форме инверсии случайно выбранного гена хромосомы chromo.

Mutationint (chromo, max)
Мутация случайно выбранного гена дополнением до max значения.

Mutationlist(chromo, max)
Мутация случайно выбранного гена дополнением до max значения.

Recombinationbin(chromo1, chromo2)
Возвращает двух потомков, составленных из родительских фрагментов chromo1, chromo2, причем фрагменты получены в случайной точке разрезания, а хромосомы – это бинарные строки.

Функция
Назначение

Recombinationint (chromo1, chromo2)
Возвращает двух потомков, составленных из родительских фрагментов chromo1, chromo2, причем фрагменты получены в случайной точке разрезания, а хромосомы – это последовательности целых.

Recomhinationbinm (chromolist, parents, sons)
Возвращает потомков в количестве sons, составленных из родительских фрагментов, причем список chromolist содержит родителей в количестве parents. Фрагменты получены в случайных точках разрезания случайных родителей из chromolist, а хромосомы – это бинарные строки.

Recombinationintm (chromolist, parents, sons)
Возвращает потомков в количестве sons, составленных из родительских фрагментов, причем список chromolist содержит родителей в количестве parents. Фрагменты получены в случайных точках разрезания случайных родителей из chromolist, а хромосомы – это последовательности целых чисел.

Rang(Р, fitfunction)
Ранжирование хромосом популяции Р с помощью функции оптимальности fitfunction, причем функция оптимальности задается конкретно для каждой проблемной области.

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

Newgeneration (Fold, Pparents, elite)
Формирует новое поколение популяции из старой популяции потомков, выбранных для рекомбинации хромосом Pparents, причем, если параметр elite = 0, то элитное сохранение лучших не используется, если elite – целое число, то столько лучших хромосом текущего поколения переходит в следующее.

InitPopulationM (rand, S)
Создает исходную первичную популяцию объектов – хромосом, причем rand – функция порождения случайной хромосомы, S – количество хромосом в популяции, причем формируются не полностью определенные хромосомы типа Chromolist. Функция используется для мобильного генетического алгоритма.

Cut (cromo)
Разрезает хромосому типа Chromolist в случайном месте.

Splice (chromo1, chromo2)
Склеивает две хромосомы типа Chromolist, причем в результирующей хромосоме возможно дублирование генов, которые доминируют слева направо.

AccumulatePop (Р, q)
Функция разрезает и склеивает хромосомы популяции Pop, причем склеивание доминирует над разрезанием. Функция реализует стадию насыщения мобильного ГА. Параметр q – количество поколений в стадии насыщения.

Контрольные вопросы
Как выполняется оператор пропорционального отбора в стандартном ГА?
Как выполняется оператор скрещивания в стандартном ГА?
Как выполняется оператор мутации в стандартном ГА?
Каким образом кодируют хромосомы?
Что выполняют операторы Cut и Splice в мобильном ГА?
Какой ГА использует хромосомы переменной структуры: стандартный или мобильный?

Лабораторная работа № 9. Интегральные функции генетических вычислений

Цель работы: изучить генетические алгоритмы – стандартный, мобильный, эволюционные стратегии.
Интегральные функции генетических вычислений реализуют стандартный ГА, включая «только мутацию», ГА со сложной рекомбинацией и мобильный ГА.
Функция standartga(cht, qpop, initpopfun, mutfun, recfun, fitfun, rangfun, selfun, newgen, terminationcond, fitgoalpmut, precom) реализует генетическую оптимизацию популяции хромосом типа cht размера qpop, которая инициализируется функцией инициализации initpopfun. Генетическая оптимизация использует оператор мутации типа mutfun с вероятностью pmut, оператор рекомбинации – с вероятностью precom. Ранжирование, селекция и формирование нового поколения осуществляются функциями rangfun, selfun, newgen соответственно на основе функции оптимальности fitfun. Завершение оп- тимизации задается либо параметром terminationcond, как число поколений, либо параметром fitgoal, как целевым значением функции оптимальности. Если параметр pmut = 0, то мутация не используется; если precom = 0, то рекомбинация не используется и стандартный ГА превращается в алгоритм «только мутация».
Функция mobilga(qpop, initpopfun, accumfun, cutfun, splicefun, fitfun, rangfun, selfun, newgen, terminationcond, fitgoal, pcut, psplice) реализует генетическую оптимизацию популяции хромосом размера qpop с помощью мобильного ГА, которая инициализируется функцией инициализации initpopfun. Стадия насыщения реализуется функцией accumfun. Генетическая оптимизация использует оператор разрезания cutfun с вероятностью pcut, оператор склеивания – с вероятностью psplice. Ранжирование, селекция и формирование нового поколения осуществляются функциями rangfun, selfun, newgen соответственно на основе функции оптимальности fitfun. Завершение оптимизации задается либо параметром terminationcond, как число поколений, либо параметром fitgoal, как целевым значением функции оптимальности.


Контрольные вопросы
Из каких этапов состоит стандартный ГА?
Что такое эволюционная стратегия?
Какие параметры ГА позволяют управлять его сходимостью?
Какими особенностями обладает мобильный ГА?
В чем заключается этап генерации популяции для стандартного и мобильного ГА?

Лабораторная работа № 10. Прикладные оптимизационные задачи
Цель работы: изучить особенности применения генетических алгоритмов к оптимизационным задачам, получить опыт применения ГА к конкретной проблемной области.
Список оптимизационных задач, которые могут быть решены с помощью генетических вычислений, составим на основе классических оптимизационных задач и прикладных задач автоматизированного проектирования технических объектов.
Перечислим классические задачи оптимизации, приемлемые для демонстрации мощности генетических вычислений.
Задача о диете. Рассмотрим задачу составления наиболее экономного (дешевого) рациона питания, удовлетворяющего определенным медицинским требованиям. Известен перечень доступных продуктов из N наименований. Кроме того, рассматриваются такие характеристики продуктов, как витамины, минеральные вещества, жиры, белки, углеводы, калорииность. Для каждого продукта известна его медицинская характеристика, т. е. количественное содержание в одной единице указанных компонент. Приемлем рацион, удовлетворяющий медицинским нормам, оптимальным является самый дешевый из них.
Транспортная задача. Имеется m пунктов S1, S2, , Sm производства однородного продукта (стали, цемента и т.д.), причем объем производства в пункте Si равен ai. Произведенный продукт используется в пунктах Q1,Q2, ...., Qn, и потребность в нем в пункте составляет bj единиц. Требуется найти оптимальный путь из пунктов Si в пункты Qj чтобы удовлетворить потребности в продукте bj не допуская затоваривания пунктов производства и минимизируя транспортные расходы.
Задача рационального использования посевных площадей. Имеется m земельных угодий S1, S2, , Sm, предназначенных для засева той или иной сельскохозяйственной культурой. Эти площади отличаются положением и характером почвы. На каждом из угодий Si могут быть размещены одна или несколько из n сельскохозяйственных культур Q1, Q2, , Qn. Пусть известна урожайность культуры Qj на поле Si, она равна аij ц/га. Будем обозначать площадь поля Si в гектарах через ai. Ограничения на приемлемое решение следующие: задан план производства bj каждой сельскохозяйственной культуры Qj. Известны закупочные цены Cj на каждый вид продукции. Найти оптимальный план засева посевных площадей с максимальной прибылью от продажи сельхозпродукции.
Задача межотраслевого баланса. Допустим, что в некоторый момент времени, в году T0 по итоговым данным составлен балансовый отчет по народному хозяйству за фиксированный период по форме табл. ПЗ.
Величины Аij указывают объем продукта с номером i, израсходованный отраслью j. Числа Vj равны общему объему продукции j-й отрасли, а Сi – объему продукции j-й отрасли, который был потреблен в непроизводственной сфере. Балансовый характер таблицы выражается уравнением


· j Аij= Vj – Сi
Будем считать технологию производства неизменной и линейной. Допустим, что все отрасли будут работать так, что отрасль с номером j произведет объем xj валового выпуска своей продукции, т. е. отрасль j работает с интенсивностью хj. Необходимо найти оптимальный вектор интенсивности X при описанных ограничениях. Другими словами, необходимо решить уравнение X – АХ = С. Это уравнение вместе с изложенной выше интерпретацией матрицы А и вектора X называется моделью Леонтьева.
Таблица П3
Итоговый баланс по народному хозяйству
Отрасль
Продукт
Итого


1
2

m


1
A11
A12

A1n
(jA1j

2
A21
A22

A2n
(jA1j








n
An1
An2

Ann
(jAnj

Валовый выпуск
V1
V2

Vn


Конечное потребление
C1
C2

Cn


Задача расчета химической технологии. Пусть имеется N химических реакторов, соединенных последовательно и перерабатывающих некоторый тип сырья с целью выделить из него полезный продукт, и пусть х=(13 EMBED Equation.3 1415,13 EMBED Equation.3 141513 QUOTE 1415,,13 EMBED Equation.3 1415) – характеристика свойств данного продукта. Обозначим xk=(13 EMBED Equation.3 1415,13 EMBED Equation.3 141513 QUOTE 1415,,13 EMBED Equation.3 1415) характеристику продукта на входе реактора k, тогда хk+1 – характеристика на выходе из реактора. Пусть uk – набор параметров, регулирующих процесс преобразования продукта в k-м реакторе. Считаем, что известна зависимость хk+1=fk(xk,uk) для k-го реактора. При этом на реактор могут быть наложены ограничения
·k(uk)·(x1,x2,,xN,u1,u2,, ,uN), которая может выражать, например, стоимость продукта.
Все приведенные пять задач являются задачами линейного программирования и приведены как полезные упражнения для адаптации прикладных задач к методам генетических вычислений.
Дополним данный список задач задачами конструкторского проектирования, которые можно поставить как оптимизационные. Это задачи компоновки, размещения и трассировки.
Задача компоновки. Процесс перехода от электрической схемы к конструктивному распределению (разбиению) всех элементов на группы, соответствующие конструктивам различных уровней, т. е. преобразование функционального описания аппаратуры в конструктивное, называется компоновкой. При компоновке элементы должны быть разбиты на микросхемы, типовые элементы замены (ТЭЗ), устройства, блоки, стойки. В задаче заданы функциональная электрическая схема, номенклатура модулей низшего уровня, типовые комбинации элементов, требуется покрыть исходную схему модулями из заданного набора и минимизировать как число модулей, так и число типов модулей. На практике критерий оптимальности может быть сложным и включать в себя суммарную площадь, электромагнитную совместимость элементов в одном модуле, параметры теплообмена между элементами в узле.
Задача размещения. Размещение элементов это определение их местоположения на коммутационном поле в конструктивном модуле, при котором создаются наилучшие условия для последующей трассировки. Задача размещения различается для однотипных, кратных и разногабаритных элементов. Критерии размещения могут быть следующими: суммарная длина всех соединений, расстояние между элементами, соединенными наибольшим количеством связей, число пересечений проводников, длина самых длинных связей, число цепей простой конфигурации, число перегибов проводников, число межслойных переходов, параметры паразитных связей, равномерность температуры на коммуникационном поле.
Задача трассировки монтажных соединений. Трассировка это построение на монтажном поле всех цепей данного конструктива, координаты начал и концов которых определены при размещении всех элементов. На проведение трассировки влияет технология монтажа элементов: проводной монтаж, печатный и пленочный монтаж и т. д. Критерии оптимальности трассировки для разных технологий монтажа приведена ниже.

Технология
Критерий

Проводной монтаж
Суммарная длина соединений, длина самой длинной связи

Многослойные печатные платы с металлизацией сквозных отверстий
Суммарная длина соединений, число переходных отверстий

Технология
Критерий

Многослойные печатные платы с открытыми контактными площадками и выступающими выводами
Суммарная длина соединений, число слоев

Интегральные схемы
Шаг металлизации, число межслойных переходов, число пересечений проводников

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

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

 Например, plot(X,Y,' g+:') изображает точки зеленого цвета с помощью символа «+».
 Например, для четырех векторов (содержащих только одну 1 в каждой строке) можно найти индексы единиц: vec = [ 1 0 0 0; 0 0 1 0; 0 1 0 1 ];ind = vec2ind(yec).











13PAGE 15


13PAGE 143315





Приложенные файлы

  • doc 6129654
    Размер файла: 886 kB Загрузок: 0

Добавить комментарий