Функциональные модели универсального нейрокомпьютера
Развитие информатики и средств вычислительной техники. Развитие систем искусственного интеллекта на базе алгоритмических языков. Искусственные нейронные сети. Нейрокибернетика. Элементарные детали вычислительных устройств. Анализ нейросетевых парадигм.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | диссертация |
Язык | русский |
Дата добавления | 12.10.2008 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Поскольку длина цикла конечна, то при достаточно большом k зацикливание будет обнаружено.
Для использования в обучении сети обратного функционирования, необходимо переписать второй шаг алгоритма обучения в следующем виде.
2. Проводим цикл предъявления примеров. Для каждого примера выполняется следующая процедура.
2.1. Если сеть выдала правильный ответ, то переходим к шагу 2.5.
2.2. Если на выходе персептрона ожидалась единица, а был получен ноль, то на выход сети при обратном функционировании подаем .
2.3. Если на выходе персептрона ожидался ноль, а была получена единица, то на выход сети при обратном функционировании подаем .
2.4. Проводим шаг обучения с единичными параметрами.
2.5. Переходим к следующему примеру. Если достигнут конец обучающего множества, то переходим к шагу 3, иначе возвращаемся на шаг 2.1.
На рис. 19в приведена схема обратного функционирования нейрона второго слоя персептрона. Учитывая, что величины входных сигналов этого нейрона равны нулю или единице, получаем эквивалентность модифицированного алгоритма исходному. Отметим также, что при обучении персептрона впервые встретились не обучаемые параметры - веса связей первого слоя.
4.3. Язык описания нейронных сетей
В данном разделе описан язык описания нейронных сетей.
4.3.1. Структура компонента
Рассмотрим более подробно структуры данных сети. Как уже было описано в первой части главы, сеть строится иерархически от простых подсетей к сложным. Простейшими подсетями являются элементы. Подсеть каждого уровня имеет свое имя и тип. Существуют следующие типы подсетей: элемент, каскад, слой, цикл с фиксированным числом тактов функционирования и цикл, функционирующий до тех пор, пока не выполнится некоторое условие. Последние четыре типа подсетей будем называть блоками. Имена подсетей определяются при конструировании. В разделе «Имена структурных единиц компонентов» приведены правила построения полного и однозначного имен подсети. В качестве примера рассмотрим сеть, конструирование которой проиллюстрировано на рис. 2. В описании сети NW однозначное имя первого нейрона второго слоя имеет вид K[2].SN.N[1]. При описании слоя однозначное имя первого нейрона записывается как N[1]. В квадратных скобках указываются номер экземпляра подсети, входящей в непосредственно содержащую ее структуру в нескольких экземплярах.
4.3.2. Сигналы и параметры
При использовании контрастирования для изменения структуры сети и значений обучаемых параметров другим компонентам бывает необходим прямой доступ к сигналам и параметрам сети в целом или отдельных ее подсетей. Для адресации входных и выходных сигналов используются имена InSignals и OutSignals, соответственно. Таким образом, для получения массива входных сигналов второго слоя сети, приведенной на рис. 2, необходимо запросить массив NW.K[2].InSignals, а для получения выходного сигнала всей сети можно воспользоваться любым из следующего списка имен:
NW.OutSignals;
NW.N.OutSignals.
Для получения конкретного сигнала из массива сигналов необходимо в конце в квадратных скобках указать номер сигнала. Например, для получения третьего входного сигнала второго слоя сети нужно указать следующее имя - NW.K[2].InSignals[3].
Для получения доступа к параметрам нужно указать имя подсети, к чьим параметрам нужен доступ и через точку ключевое слово Parameters. При необходимости получить конкретный параметр, его номер в квадратных скобках записывается после ключевого слова Parameters.
4.3.3. Обучаемые и не обучаемые параметры и сигналы
При обучении параметров и сигналов (использование обучения сигналов описано во введении) возникает необходимость обучать только часть из них. Так, например, при описании обучения персептрона во второй части этой главы было отмечено, что обучать необходимо только веса связей второго слоя. Для реализации этой возможности используются два массива логических переменных - маска обучаемых параметров и маска обучаемых входных сигналов.
4.3.4. Дополнительные переменные
При описании структуры сетей необходимо учитывать следующую дополнительные переменные, доступные в методах Forw и Back. Для каждой сети при прямом функционировании определен следующий набор переменных:
InSignals[K] - массив из K действительных чисел, содержащих входные сигналы прямого функционирования.
OutSignals[N] - массив из N действительных чисел, в которые заносятся выходные сигналы прямого функционирования.
Parameters[M] - массив из M действительных чисел, содержащих параметры сети.
При выполнении обратного функционирования сети доступны еще три массива:
Back.InSignals[K] - массив из K действительных чисел, параллельный массиву InSignals, в который заносятся выходные сигналы обратного функционирования.
Back.OutSignals[N] - массив из N действительных чисел, параллельный массиву OutSignals, содержащий входные сигналы обратного функционирования.
Back.Parameters[M] - массив из M действительных чисел, параллельный массиву Parameters, в который заносятся вычисленные при обратном функционировании поправки к параметрам сети.
При обучении (модификации параметров или входных сигналов) доступны все переменные обратного функционирования и еще два массива:
InSignalMask[K] - массив из K логических переменных, параллельный массиву InSignals, содержащий маску обучаемости входных сигналов.
ParamMask[M] - массив из M логических переменных, параллельный массиву Parameters, содержащий маску обучаемости параметров.
4.3.5. Приведение и преобразование типов
Есть два пути использовать переменную одного типа как переменную другого типа. Первый путь состоит в преобразовании значения к заданному типу. Так, для преобразования целочисленной переменной к действительному типу, достаточно просто присвоить переменной действительного типа целочисленное значение. С обратным преобразованием сложнее, поскольку не ясно что делать с дробной частью. В табл. 2 приведены все типы, которые можно преобразовать присваиванием переменной другого типа. В табл. 3 приведены все функции преобразования типов.
Таблица 2
Преобразование типов прямым присваиванием переменной значения выражения
Типпеременной |
Типвыражения |
Пояснение |
|
Real |
Real, Integer, Long |
Значение преобразуется к плавающему виду. При преобразовании значения выражения типа Long возможна потеря точности. |
|
Long |
Integer, Long |
При преобразовании типа Integer, действуют следующие правила. Значение переменной помещается в два младших байта. Если значение выражения больше либо равно нолю, то старшие байты равны H0000, в противном случае старшие байты равны HFFFF. |
|
Integer |
Integer, Long |
При преобразовании выражения типа Long значение двух старших байт отбрасывается. |
Таблица 3
Функции преобразования типов
Имя функции |
Типаргумента |
Типрезультата |
Описание |
|
Real |
Real, Integer, Long |
Real |
Аналогично прямому присваиванию |
|
Integer |
Integer, Long |
Integer |
Аналогично прямому присваиванию |
|
Long |
Integer, Long |
Long |
Аналогично прямому присваиванию |
|
Str |
Real, Integer, Long |
String |
Представляет числовой аргумент в виде символьной строки в десятичном виде |
|
Round |
Real |
Long |
Округляет действительное значение до ближайшего длинного целого. Если значение действительного выражения выходит за диапазон длинного целого, то результат равен нулю. |
|
Truncate |
Real |
Long |
Преобразует действительное значение в длинное целое путем отбрасывания дробной части. Если значение действительного выражения выходит за диапазон длинного целого, то результат равен нулю. |
|
LVal |
String |
Long |
Преобразует длинное целое из символьного представления во внутреннее. |
|
RVal |
String |
Real |
Преобразует действительное число из символьного представления во внутреннее. |
|
StrColor |
Color |
String |
Преобразует внутреннее представление переменной типа Color в соответствии с разд. «Значение переменной типа цвет» |
|
ValColor |
String |
Color |
Преобразует символьное представление переменной типа Color во внутреннее. |
|
Color |
Integer |
Color |
Интерпретирует целое число как значение типа Color. |
При вычислении числовых выражений действуют следующие правила преобразования типов:
Выражения вычисляются слева на право.
Если два операнда имеют один тип, то результат имеет тот же тип.
Если аргументы имеют разные типы, то выражение имеет старший из двух типов. Список числовых типов по убыванию старшинства: Real, Long, Integer.
Результат операции деления действительных чисел (операция «/») всегда имеет тип Real, вне зависимости от типов аргументов.
В отличие от преобразования типов приведение типов позволяет по-разному интерпретировать одну область памяти. Функция приведения типа применима только к переменным или элементам массива (преобразование типов применимо и к выражениям). Рекомендуется использовать приведение типов только для типов, имеющих одинаковую длину. Например, Integer и Color или Real и Long. Список функций приведения типов приведен в табл. 4.
Таблица 4
Функции приведения типов
Название |
Тип результата |
Описание |
|
TReal |
Real |
Четыре байта, адресуемые приводимой переменной, интерпретируются как действительное число. |
|
Tinteger |
Integer |
Два байта, адресуемые приводимой переменной, интерпретируются как целое число. |
|
TLong |
Long |
Четыре байта, адресуемые приводимой переменной, интерпретируются как длинное целое. |
|
TRealArray |
RealArray |
Область памяти, адресуемая приводимой переменной, интерпретируются как массив действительных чисел. |
|
TPRealArray |
PRealArray |
Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив действительных чисел. |
|
TIntegerArray |
IntegerArray |
Область памяти, адресуемая приводимой переменной, интерпретируются как массив целых чисел. |
|
TPIntegerArray |
PIntegerArray |
Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив целых чисел. |
|
TLongArray |
LongArray |
Область памяти, адресуемая приводимой переменной, интерпретируются как массив длинных целых. |
|
TPLongArray |
PLongArray |
Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив длинных целых. |
|
TLogic |
Logic |
Адресуемый приводимой переменной байт интерпретируются как логическая переменная. |
|
TLogicArray |
LogicArray |
Область памяти, адресуемая приводимой переменной, интерпретируются как массив логических переменных. |
|
TPLogicArray |
LogicArray |
Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив логических переменных. |
|
TColor |
Color |
Два байта, адресуемые приводимой переменной, интерпретируются как переменная типа цвет. |
|
TFuncType |
FuncType |
Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес функции. |
|
TPointer |
Pointer |
Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес. |
|
TString |
String |
256 байт области памяти, адресуемой приводимой переменной, интерпретируются как строка символов. |
|
TPString |
PString |
Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на строку символов. |
|
TVisual |
Visual |
Четыре байта, адресуемые приводимой переменной, интерпретируются как отображаемый элемент. |
Следующие примеры иллюстрируют использование преобразования и приведения типов:
При вычислении следующих четырех выражений, получаются различные результаты
4096 * 4096 = 0
Поскольку константа 4096 имеет тип Integer, а 4096 * 4096 = 16777216 = 256 * 65536 , то есть младшие два байта результата равны нулю.
Long(4096 * 4096) = 0
Поскольку оба сомножителя имеет тип Integer, то и выражение имеет тип Integer. Следовательно, результат умножения равен нулю, который затем преобразуется к типу Long.
Long(4096) * 4096 = 16777216
Поскольку первый сомножитель имеет тип длинное целое, то и выражение имеет тип длинное целое.
4096.0 * 4096 = 1.677722E+7
Поскольку первый сомножитель имеет тип Real, то и выражение имеет тип Real. Из-за недостатка точности произошла потеря седьмого знака.
В следующем примере, используя приведение типов, в массив действительных чисел A размером в 66 элементов складываются: действительное число в первый элемент массива; длинное целое во второй элемент массива и символьную строку в элементы с 3 по 66.
A[1] = 1.677722E+7
TLong(A[2]) = 16777216
TString(A[3]) = `Пример приведения типов'
Необходимо отметить, что элементы массива A, начиная со второго, после выполнения приведенного выше фрагмента программы не рекомендуется использовать как действительные числа, поскольку элемент A[2] содержит значение 2.350988Е-38, а элемент A[5] - значение -4.577438Е-18. Значение элементов, начиная с A[8] (символьная строка `Пример приведения типов' содержит 23 символа и занимает 24 байта, то есть шесть элементов массива) вообще не зависят от приведенного фрагмента программы и содержат «мусор», который там находился ранее.
В списке типов определены только одномерные массивы. Однако, при необходимости, возможно использование двумерных массивов. Для этого в одномерный массив A необходимо поместить указатели на одномерные массивы. При этом I,J-й элемент двумерного массива записывается в виде:
TPRealArray(A[I])^[J]
В этом примере использована функция приведения типов TPRealArray, указывающая, что I-й элемент массива A нужно интерпретировать как указатель на одномерный массив действительных чисел, и операция «^» указывающая, что вместо указателя на массив TPRealArray(A[I]) используется массив, на который он указывает.
Таким образом, использование функций приведения типов позволяет из одномерных массивов строить структуры произвольной сложности. В языках программирования, таких как C и Паскаль, существует возможность строить пользовательские типы данных. При разработке стандарта эти возможности были исключены, поскольку использование пользовательских типов, облегчая написание программ, сильно затрудняет разработку компилятора или интерпретатора, а при использовании этого языка для описания компонентов нейрокомпьютера необходимость в пользовательских типах данных возникает чрезвычайно редко. Например, при описании примеров всех компонентов, приведенных в данной работе, такая необходимость ни разу не возникла.
4.3.6. Операции
В данном разделе приведены все операции, которые могут быть использованы при построении выражений различного типа. В табл. 5 приведены операции, которые допустимы в целочисленных выражениях (выражениях типа Integer или Long). В табл. 6 - список, дополняющий список операций из табл. 5 до полного списка операций, допустимых в выражениях действительного типа. В табл. 7 - операции, допустимые при построении логических выражений. В табл. 8 -для выражений типа символьная строка. В главе 1 в табл. 3 - для выражений типа Color. Если операндом может быть любой числовой тип, то вместо перечисления всех числовых типов (Integer, Real, Long) указывается слово «числовой»
Таблица 5
Операции, допустимые в целочисленных выражениях
Приоритет |
Обозна-чение |
Тип 1-гооперанда |
Тип 2-гооперанда |
Типрезультата |
Название операции |
|
1 |
* |
Integer |
Integer |
Integer |
Умножение |
|
1 |
* |
Long |
Integer |
Long |
Умножение |
|
1 |
* |
Integer |
Long |
Long |
Умножение |
|
1 |
* |
Long |
Long |
Long |
Умножение |
|
1 |
Div |
Integer |
Integer |
Integer |
Целочисленное деление |
|
1 |
Div |
Integer |
Long |
Long |
Целочисленное деление |
|
1 |
Div |
Long |
Integer |
Long |
Целочисленное деление |
|
1 |
Div |
Long |
Long |
Long |
Целочисленное деление |
|
1 |
Mod |
Integer |
Integer |
Integer |
Остаток от деления |
|
1 |
Mod |
Long |
Integer |
Long |
Остаток от деления |
|
1 |
Mod |
Integer |
Long |
Long |
Остаток от деления |
|
1 |
Mod |
Long |
Long |
Long |
Остаток от деления |
|
2 |
+ |
Integer |
Integer |
Integer |
Сложение |
|
2 |
+ |
Integer |
Long |
Long |
Сложение |
|
2 |
+ |
Long |
Integer |
Long |
Сложение |
|
2 |
+ |
Long |
Long |
Long |
Сложение |
|
2 |
- |
Integer |
Integer |
Integer |
Вычитание |
|
2 |
- |
Integer |
Long |
Long |
Вычитание |
|
2 |
- |
Long |
Integer |
Long |
Вычитание |
|
2 |
- |
Integer |
Long |
Long |
Вычитание |
|
2 |
- |
Long |
Integer |
Long |
Вычитание |
|
2 |
- |
Long |
Long |
Long |
Вычитание |
|
3 |
And |
Integer |
Integer |
Integer |
Побитное И |
|
3 |
And |
Long |
Long |
Long |
Побитное И |
|
3 |
Or |
Integer |
Integer |
Integer |
Побитное включающее ИЛИ |
|
3 |
Or |
Long |
Long |
Long |
Побитное включающее ИЛИ |
|
3 |
Xor |
Integer |
Integer |
Integer |
Побитное исключающее ИЛИ |
|
3 |
Xor |
Long |
Long |
Long |
Побитное исключающее ИЛИ |
|
3 |
Not |
Integer |
Integer |
Integer |
Побитное отрицание |
|
3 |
Not |
Long |
Long |
Long |
Побитное отрицание |
Таблица 6
Операции, дополняющие список операций из табл. 5 до полного списка операций, допустимых в выражениях действительного типа.
Приоритет |
Обозначение |
Тип 1-гооперанда |
Тип 2-гооперанда |
ТипРезультата |
Название операции |
|
1 |
* |
Real |
числовой |
Real |
Умножение |
|
1 |
/ |
числовой |
числовой |
Real |
Деление |
|
1 |
RMod |
числовой |
числовой |
Real |
Остаток от деления |
|
2 |
+ |
Real |
числовой |
Real |
Сложение |
|
2 |
- |
Real |
числовой |
Real |
Вычитание |
Таблица 7
Операции, допустимые при построении логических выражений
Прио-ритет. |
Обозна-чение |
Тип 1-гооперанда |
Тип 2-гооперанда |
Типрезультата |
Название операции |
|
1 |
> |
числовой |
числовой |
Logic |
Больше |
|
1 |
< |
числовой |
числовой |
Logic |
Меньше |
|
1 |
>= |
числовой |
числовой |
Logic |
Больше или равно |
|
1 |
<= |
числовой |
числовой |
Logic |
Меньше или равно |
|
1 |
= |
числовой |
числовой |
Logic |
Равно |
|
1 |
<> |
числовой |
числовой |
Logic |
Не равно |
|
2 |
And |
Logic |
Logic |
Logic |
Логическое И |
|
2 |
Or |
Logic |
Logic |
Logic |
Логическое включающее ИЛИ |
|
2 |
Xor |
Logic |
Logic |
Logic |
Логическое исключающее ИЛИ |
|
2 |
Not |
Logic |
Logic |
Logic |
Логическое отрицание |
Таблица 8
Операции для выражений типа символьная строка
Прио-ритет |
Обозна-чение |
Тип 1-гооперанда |
Тип 2-гооперанда |
Типрезультата |
Название операции |
|
1 |
+ |
String |
String |
String |
Конкатенация (сцепка) строк. |
Во всех таблицах операции размещаются по убыванию приоритета. Для каждой операции указаны допустимые типы операндов, и тип результата, в зависимости от типов операндов.
В табл. 6 приводится необычная операция RMod - остаток от деления действительных чисел. Результат этой функции равен разности между первым операндом и вторым операндом, умноженным на целую часть отношения первого операнда ко второму.
Кроме операций, приведенных в табл. 3 главы 1 и табл. 5-8, определены две взаимно обратные операции для работы с адресами и указателями:
^ - ставится после переменной типа указатель. Означает, что вместо указателя в выражении используется переменная или массив, на который указывает этот указатель. Не допускается после переменных типа Pointer.
@ - ставится перед именем переменной любого типа. Означает, что в выражении участвует не переменная, а адрес переменной. Используется при присвоении адресов переменных или массивов переменным типа указатель.
4.3.7. Язык описания нейронных сетей
Язык описания нейронных сетей предназначен для хранения сетей на диске. Следует отметить, что в отличии от таких компонентов, как предобработчик входных сигналов, оценка или задачник описание даже простой сети имеет большой размер. С другой стороны, многие подсети являются стандартными для большинства сетей. Для компонента сеть нет смысла вводить небольшой набор стандартных элементов и подсетей, поскольку этот набор может легко расширяться. Более эффективным является выделение часто употребляемых подсетей в отдельные библиотеки, подключаемые к описаниям конкретных сетей. В приведенных в этой главе примерах описания нейронных сетей выделен ряд библиотек.
4.3.7.1. Ключевые слова языка
В табл. 9 приведен список ключевых слов языка описания нейронных сетей. Кроме того, к ключевым словам относятся типы данных, приведенные в табл. 1 главы 1; обозначения операций, приведенные в табл. 3 главы 1, 5, 6, 7, 8; названия функций преобразования (табл. 3) и приведения типов (табл. 4); идентификаторы предопределенных констант, приведенные в табл. 4 главы 1; имена элементарных функций, приведенных в табл. 10 и обозначения функций управления памятью из раздела «функции управления памятью».
Таблица 9.
Ключевые слова языка описания нейронных сетей.
Ключевое слово |
Краткое описание |
|
Back |
Метод, осуществляющий обратное функционирование подсети. Префикс сигналов обратного функционирования. |
|
Begin |
Начало описания тела процедуры, или операторных скобок. |
|
Block |
Тип аргумента подсети. Означает, что аргумент является подсетью. |
|
By |
Часть оператора цикла с шагом. Предшествует шагу цикла. |
|
Cascad |
Тип подсети - каскад. |
|
Connections |
Начало блока описания связей подсети. |
|
Contents |
Начало блока описания состава подсети. |
|
DefaultType |
Тип параметров по умолчанию. |
|
Do |
Завершающая часть операторов цикла. |
|
Element |
Тип подсети - элемент. |
|
Else |
Часть условного оператора. Предшествует оператору, выполняемому, если условие ложно. |
|
End |
Конец описания тела процедуры или операторных скобок. |
|
For |
Заголовок оператора цикла с шагом. |
|
Forw |
Метод, осуществляющий прямое функционирования подсети. |
|
Function |
Заголовок описания функции. |
|
Global |
Начло блока описания глобальных переменных. |
|
GoTo |
Начало оператора перехода. |
|
If |
Начало условного оператора. |
|
Include |
Предшествует имени файла, целиком вставляемого в это место описания. |
|
InSignalMask |
Имя, по которому адресуются маски обучаемости входных сигналов подсети. |
|
InSignals |
Имя, по которому адресуются входные сигналы подсети; начало блока описания входных сигналов. |
|
Label |
Начало описания меток |
|
Layer |
Тип подсети - слой. |
|
Loop |
Тип подсети - цикл, выполняемый указанное число раз. |
|
MainNet |
Начало описания главной сети |
|
Name |
Предшествует имени статической переменной. |
|
NetLib |
Начало описания библиотеки подсетей. |
|
NetWork |
Начало описания сети |
|
NumberOf |
Функция (запрос). Возвращает число параметров или сигналов в подсети. |
|
OutSignals |
Имя, по которому адресуются выходные сигналы подсети; начало блока описания выходных сигналов. |
|
ParamDef |
Заголовок определения типа параметров. |
|
Parameters |
Имя, по которому адресуются параметры подсети; начало блока описания параметров. |
|
ParamMask |
Имя, по которому адресуются маски обучаемости параметров подсети. |
|
ParamType |
Заголовок описания типа параметров. |
|
SetParameters |
Признак раздела установления значений параметров. |
|
Static |
Начло блока описания статических переменных. |
|
Then |
Часть условного оператора, предшествующая оператору, выполняемому, если условие истинно. |
|
To |
Часть оператора цикла с шагом. Предшествует верхней границе цикла. |
|
Var |
Начло блока описания переменных. |
|
While |
Заголовок оператора цикла по условию. |
|
Until |
Тип подсети - цикл, выполняемый до тех пор пока не выполнится условие. |
|
Used |
Начало списка подключаемых библиотек подсетей |
Таблица 10
Элементарные функции, допустимые в языке описания нейронных сетей
Имя |
Значение |
Имя |
Значение |
|
Sin |
Синус |
Cos |
Косинус |
|
Tan |
Тангенс |
Atan |
Арктангенс |
|
Sh |
Гиперболический синус |
Ch |
Гиперболический косинус |
|
Th |
Гиперболический тангенс |
Lg |
Логарифм двоичный |
|
Ln |
Логарифм натуральный |
Exp |
Экспонента |
|
Sqrt |
Квадратный корень |
Sqr |
Квадрат |
|
Abs |
Абсолюеное значение |
Sign |
Знак аргумента (0 - минус) |
4.3.7.2. Передача аргументов функциям
Во всех языках описания компонентов все параметры передаются по ссылке (передается не значение аргумента, а его адрес). Если в качестве фактического аргумента указано выражение, то значение выражения помещается интерпретатором (или компилятором) во временную переменную, имеющую тип, совпадающий с типом формального аргумента, а адрес временной переменной передается в качестве фактического аргумента.
4.3.7.3. Имена структурных единиц
Компонент нейронная сеть имеет иерархическую структуру. Часть запросов может быть адресована не всему компоненту, а его структурной единице любого уровня. Для точного указания адресата запроса используется полное имя структурной единицы, которое строится по следующему правилу:
Имя компонента является полным именем компонента.
Полное имя младшей структурной единицы строится путем добавления справа к имени старшей структурной единицы точки, псевдонима младшей структурной единицы и номера экземпляра младшей структурной единицы, если младших структурных единиц с таким псевдонимом несколько.
Иногда при построении описания компонента требуется однозначное имя структурной единицы. В качестве однозначного имени можно использовать полное имя, но такой подход лишает возможности вставлять подготовленные структурные единицы в структуры более высокого уровня. Для этого вводится понятие однозначного имени структурной единицы: в описании структурной единицы A однозначным именем структурной единицы B, являющейся частью структурной единицы A, является полное имя структурной единицы B, из которого исключено полное имя структурной единицы A.
4.3.7.4. Способ описания синтаксических конструкций
Для описания синтаксиса языков описаний компонентов используется расширенная Бэкусова нормальная форма. Описание синтаксиса языка с помощью БНФ состоит в расшифровке понятий от более сложных к более простым. Каждое предложение БНФ состоит из двух частей, разделенных символами «::=» (два двоеточия, за которыми следует знак равенства). Наиболее подходящим названием для этого разделителя является слово «является» в отличие от «равно» или «присвоить» в языках программирования. Слева от разделителя находится объясняемое понятие, справа - конструкция разъясняющая это понятие. Например, предложение
<Имя переменной> ::= <Идентификатор>
означает, что объясняемое понятие - <Имя переменной> является идентификатором. Заметим, что порядок предложений в БНФ описания синтаксиса языка не имеет значения. Однако традиционно сложилось так, что БНФ начинают с наиболее сложных понятий.
При описании синтаксиса языка с помощью БНФ используются следующие понятия и обозначения.
Нетерминальным символом называется понятие, которое должно быть раскрыто в пределах данной БНФ. Нетерминальным символом является произвольный набор символов, заключенный в угловые скобки, например <Имя>. Нетерминальный символ раскрыт, если в пределах БНФ встретилось предложение, в котором этот нетерминальный символ стоит в левой части.
Терминальным символом называется понятие, которое не требует раскрытия. Примерами терминальных символов являются буквы, цифры и ключевые слова описываемого языка. Терминальные символы не заключаются в угловые скобки и набраны курсивом, например Имя.
Подмножеством терминальных символов является набор ключевых слов языка. Для удобства ключевые слова набраны полужирным шрифтом, например, Имя.
В прямых квадратных скобках приводятся необязательные части синтаксических конструкций. Например предложение
<Целое число> ::= [-] <Положительное целое число>
означает, что целым числом является положительное целое число (знак минус, стоящий в квадратных скобках, опущен как необязательный) или положительное целое число, перед которым стоит знак минус (знак минус, стоящий в квадратных скобках, задействован). Отметим, что квадратные скобки, набранные курсивом, являются терминальными символами.
Набор из нескольких синтаксических конструкций, разделенных символом «» и заключенных в прямые фигурные скобки задают конструкцию выбора одной и только одной из перечисленных в фигурных скобках конструкций. Например, предложение
<Буква> ::= { A B C D E F G H I J K L M N O P
Q R S T U V W X Y Z}
означает, что понятие буква является одной из заглавных букв латинского алфавита. Отметим, что фигурные скобки, набранные курсивом, являются терминальными символами.
В целях сокращения описания в тех случаях, когда БНФ описание понятия сложно, а неформальное описание просто и однозначно, в БНФ описание включаются фрагменты неформального описания таких понятий.
Кроме того в данную модификацию БНФ включены нетерминальные символы с параметрами. В теле нетерминального символа параметры набраны полужирным курсивом. В качестве примера приведем набор предложений, описывающих формальные аргументы:
<Список формальных аргументов> ::= <Формальный аргумент> [; <Список формальных аргументов>]
<Формальный аргумент> ::= <Список имен аргументов> : <Скалярный тип>
<Список имен аргументов> ::= <Имя аргумента> [,<Список имен аргументов>]
<Имя аргумента> ::= <Идентификатор>
<Аргумент типа Тип> - одно из следующих понятий:
имя аргумента, который при описании формальных аргументов имел тип Тип имя элемента аргумента-массива, если элементы массива имеют тип Тип результат приведения произвольного аргумента или элемента аргумента-массива к типу Тип.
В этом фрагменте содержится предложение, раскрывающее понятие <Аргумент типа Тип>, являющееся нетерминальным символом с параметром. Из последнего предложения легко понять, что представляет собой понятие <Аргумент типа Тип>. Для описания этого понятия в соответствии с требованиями стандартной БНФ пришлось бы описывать отдельно следующие понятия: <Аргумент типа Long>, <Аргумент типа Real>, <Аргумент типа Integer>, <Аргумент типа Color>, <Аргумент типа Logic>, <Аргумент типа String>, <Аргумент типа PRealArray>, <Аргумент типа PIntegerArray>, <Аргумент типа PLongArray>, <Аргумент типа PLogicArray>, <Аргумент типа PString>, <Аргумент типа Visual>, <Аргумент типа Pointer>, <Аргумент типа FuncType>. Кроме того, пришлось бы отказаться от простой и понятной конструкции описания формальных аргументов. Ниже приведена часть конструкции описания формальных аргументов, которую пришлось бы включить в БНФ. В данном фрагменте приведена расшифровка только одного понятия - <Аргумент типа Long>. Остальные нераскрытые понятия описываются аналогично. Понятия <Идентификатор> и <Номер элемента> считаются раскрытыми ранее.
<Список формальных аргументов> ::= <Формальный аргумент> [; <Список формальных аргументов>]
<Формальный аргумент> ::= {<Формальный аргумент типа Long> <Формальный аргумент типа Real> <Формальный аргумент типа Integer> <Формальный аргумент типа Color> <Формальный аргумент типа Logic> <Формальный аргумент типа String> <Формальный аргумент типа PRealArray> <Формальный аргумент типа PIntegerArray> <Формальный аргумент типа PLongArray> <Формальный аргумент типа PLogicArray> <Формальный аргумент типа PString> <Формальный аргумент типа Visual> <Формальный аргумент типа Pointer> <Формальный аргумент типа FuncType>}
<Формальный аргумент типа Long> ::= <Список имен аргументов типа Long> : Long;
<Список имен аргументов типа Long> ::= <Имя аргумента типа Long> [,<Список имен аргументов типа Long>]
<Имя аргумента типа Long> ::= <Идентификатор>
<Аргумент типа Long> ::= {<Имя аргумента типа Long> <Имя аргумента типа PLongArray>^[<Номер элемента>] TLong(<Имя произвольного аргумента>)}
<Имя произвольного аргумента> ::= <Имя аргумента типа Long>, <Имя аргумента типа Real>, <Имя аргумента типа Integer>, <Имя аргумента типа Color>, <Имя аргумента типа Logic>, <Имя аргумента типа String>, <Имя аргумента типа PRealArray>, <Имя аргумента типа PIntegerArray>, <Имя аргумента типа PLongArray>, <Имя аргумента типа PLogicArray>, <Имя аргумента типа PString>, <Имя аргумента типа Visual>, <Имя аргумента типа Pointer>, <Имя аргумента типа FuncType>
Третье четвертое и пятое предложения данного фрагмента пришлось бы повторить для каждого из остальных тринадцати типов аргументов. Поскольку приведенные в книге БНФ описания языков призваны задать и объяснить синтаксис языка, а не служить исходным кодом компилятора компиляторов, автор счел возможным отступить от канонов БНФ, тем более, что для профессионала в области языков программирования не составит большого труда заменить неформальные конструкции на точные формальные фрагменты.
4.3.7.5. Описание общих синтаксических конструкций
В данном разделе приведено описание общего подмножества языков описания компонентов. В некоторых случаях, когда БНФ описание понятия сложно, а неформальное описание просто и однозначно, в БНФ описание включаются фрагменты неформального описания таких понятий.
Список синтаксических конструкций общего назначения:
<Идентификатор> ::= <Буква> [<Символьная строка>]
<Буква> ::= {a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
<Символьная строка> ::= {<Буква> <Цифра> _ } [<Символьная стока>]
<Цифра> ::= {0 1 2 3 4 5 6 7 8 9}
<Число> ::= {<Целое число> <Действительное число>}
<Целое число> ::= [-] <Положительное целое число>
<Положительное целое число> ::= <Цифра> [<Положительное целое число>]
<Действительное число> ::= <Целое число>[.<Положительное целое число>] [e<Целое число>]
<Целочисленная константа> ::= {<Предопределенная константа типа Integer> <Предопределенная константа типа Long> <Целое число>}
<Цветовая константа> ::= H <Шестнадцатеричная цифра> <Шестнадцатеричная цифра> <Шестнадцатеричная цифра> <Шестнадцатеричная цифра>
<Шестнадцатеричная цифра> ::= {0 1 2 3 4 5 6 7 8 9 A B C D E F }
<Строковая константа> ::= “<Строка произвольных символов>”
<Логическая константа> ::= {True False}
<Строка произвольных символов> - Последовательность произвольных символов из набора ANSI. В этой последовательности допускаются символы национальных алфавитов. При необходиости включить в эту конструкцию символ кавычек, он должен быть удвоен.
<Скалярный тип> ::= {Long Real Integer Color Logic String PRealArray PIntegerArray PLongArray PLogicArray PString Visual Pointer FuncType}
<Тип массива> ::= { RealArray IntegerArray LongArray LogicArray}
<Константа типа Тип> - константа имеющая тип Тип.
Список синтаксических конструкций для формальных аргументов:
<Список формальных аргументов> ::= <Формальный аргумент> [; <Список формальных аргументов>]
<Формальный аргумент> ::= <Список имен аргументов> : <Скалярный тип>
<Список имен аргументов> ::= <Имя аргумента> [,<Список имен аргументов>]
<Имя аргумента> ::= <Идентификатор>
<Аргумент типа Тип> - одно из следующих понятий:
имя аргумента, который при описании формальных аргументов имел тип Тип
имя элемента аргумента-массива, если элементы массива имеют тип Тип
результат приведения произвольного аргумента или элемента аргумента-массива к типу Тип.
Синтаксические конструкции описания переменных:
<Описание переменных> ::= Var <Список описаний однотипных переменных>
<Список описаний однотипных переменных> ::= <Тип переменной> <Список переменных>; [<Список описаний однотипных переменных>]
<Список переменных> ::= <Имя переменной> [, <Список переменных>]
<Имя переменной> ::= <Идентификатор>
<Тип переменной> ::= {<Скалярный тип> <Тип массива>[<Целочисленное константное выражение>]}
<Переменная типа Тип> - одно из следующих понятий:
имя переменной, которая при описании переменных имела тип Тип
имя элемента массива, если элементы массива имеют тип Тип
результат приведения произвольной переменной или элемента массива к типу Тип.
Синтаксические конструкции описания статических переменных
Статические переменные, как правило, служат для описания параметров компонентов нейрокомпьютера. Использование в именах переменных только символов латинского алфавита и цифр делает идентификаторы универсальными, но неудобными для всех пользователей, кроме англо-говорящих. Для удобства всех остальных пользователей в описании статических переменных предусмотрена возможность использовать дополнительные имена для статических переменных. Однако эти имена служат только для построения интерфейса и не могут быть использованы в описании тела соответствующего компонента. Кроме того, статической переменной можно при описании задать значение по умолчанию.
<Описание статических переменных> ::= Static <Список описаний статических
переменных>
<Список описаний статических переменных> ::= <Описание статической переменной>; [<Список описаний статических переменных>]
<Описание статической переменной> ::= <Тип переменной> <Имя переменной> [Name <Имя статической переменной>] [Default <Значение по умолчанию>]
<Имя статической переменной> ::= <Строковая константа>
<Значение по умолчанию> ::= <Константное выражение типа <Тип переменной>>
Синтаксические конструкции описания функций
<Описание функций> ::= <Описание функции> [<Описание функций>]
<Описание функции> ::= <Заголовок функции> <Описание переменных> <Описание меток> <Тело функции>
<Заголовок функции> ::= Function <Имя функции>[(<Список формальных аргументов>)] : <Скалярный тип>;
<Описание меток> ::= Label <Список меток>;
<Список меток> ::= <Имя метки> [, <Список меток>]
<Имя метки> ::= <Идентификатор>
<Тело функции> ::= Begin <Составной оператор> End;
<Составной оператор> ::= [<Имя метки>:] <Оператор> [; <Составной оператор>]
<Оператор> ::= {<Оператор присваивания> <Оператор ветвления> <Оператор цикла> <Оператор перехода> <Операторные скобки>}
<Оператор присваивания> ::= <Допустимое имя переменной> = <Выражение>
<Оператор ветвления> ::= If <Логическое выражение> Then <Оператор> [Else <Оператор>]
<Оператор цикла> ::= { <Цикл For> <Цикл While> }
<Цикл For> ::= For <Имя переменной> = <Целочисленное выражение> To <Целочисленное выражение> [By <Целочисленное выражение>] Do <Оператор>
<Цикл While> ::= While <Логическое выражение> Do <Оператор>
<Оператор перехода> ::= GoTo <Имя метки>
<Операторные скобки> ::= Begin <Составной оператор> End
<Функция типа Тип> - функция, возвращающая величину типа Тип.
<Допустимое имя переменной> - допустимой переменной являются все переменные, описанные в данной функции или в данном процедурном блоке, глобальные переменные данного компонента. Для возвращения значения функции, в левой части оператора присваивания должно стоять имя функции.
Синтаксические конструкции описания выражений:
<Выражение> ::= { <Выражение типа Long> <Выражение типа Real> <Выражение типа Integer> <Выражение типа Color> <Выражение типа Logic> <Выражение типа String> <Выражение типа Pointer>}
<Целочисленное выражение> ::= { <Выражение типа Long> <Выражение типа Integer>}
<Выражение типа Тип> ::= [<Префиксная операция типа Тип>] <Операнд типа Тип> [<Операция типа Тип> <Операнд типа Тип>]
<Операция типа Long> ::= {+ - * Div Mod And Or Xor}
<Операция типа Real>::= {+ - * / RMod }
<Операция типа Integer> ::= {+ - * Div Mod And Or Xor}
<Операция типа Color> ::= {COr CAnd CXor}
<Операция типа Logic> ::= {And Or Xor}
<Операция типа String> ::= +
<Префиксная операция типа Long> ::= { - Not }
<Префиксная операция типа Real>::= -
<Префиксная операция типа Integer> ::= { - Not }
<Префиксная операция типа Color> ::= CNot
<Префиксная операция типа Logic> ::= Not
<Операнд типа Logic> ::= ::= {<Результат сравнения> <Выражение типа Logic> (<Выражение типа Logic>) <Константа типа Logic> <Переменная типа Logic> <Аргумент типа Logic> <Вызов функции типа Logic>}
<Результат сравнения типов Long, Integer, Real> ::= (<Выражение типа Long, Integer, Real> {> < >= <= = <>} <Выражение типа Long, Integer, Real> )
<Результат сравнения типа Color> ::= (<Выражение типа Color> {CEqual CIn CInclude CExclude CIntersect} <Выражение типа Color> )
<Результат сравнения типа String> ::= (<Выражение типа String> {= <>} <Выражение типа String> )
<Операнд типа Тип> ::= {<Выражение типа Тип> (<Выражение типа Тип>) <Константа типа Тип> <Переменная типа Тип> <Аргумент типа Тип> <Вызов функции типа Тип>}
<Вызов функции типа Тип> ::= <Имя функции типа Тип> [(<Список фактических аргументов>)]
<Список фактических аргументов> ::= <Выражение> [,<Список фактических аргументов>]
<Константное выражение типа Тип> - <Выражение типа Тип> в операндах которого не могут фигурировать переменные и функции, описанные пользователем.
<Числовое выражение> ::= { <Выражение типа Long> <Выражение типа Real> <Выражение типа Integer>}
Синтаксические конструкции задания значений статическим переменным
Эта конструкция служит для задания значений параметрам (статическим переменным) компонентов. Для компонента сеть она может встречаться не только при описании главной сети, но и при описании любой составной подсети. В специальных выражениях типа Тип могут участвовать только стандартные функции и аргументы той структурной единицы, в которой находится блок задания значений статическим переменным. При этом специальное выражение, задающее значение параметра должно иметь тип, совместимый с типом статической переменной, которой присваивается это значение.
<Установление параметров Структурной единицы> ::= <Однозначное имя Структурной единицы> [[[<Переменная цикла>:] <Начальный номер> [..<Конечный номер> [:<Шаг>] ]]] SetParameters <Список значений параметров>
<Переменная цикла> ::= <Идентификатор>
<Начальный номер> ::= <Константное выражение типа Long>
<Конечный номер> ::= <Константное выражение типа Long>
<Шаг> ::= <Константное выражение типа Long>
<Список значений параметров> ::= <Значение параметра> [,<Список значений параметров>]
<Значение параметра> ::= <Специальное выражение типа Тип>
<Специальное выражение типа Тип> ::= [<Префиксная операция типа Тип>] <Специальный операнд типа Тип> [<Операция типа Тип> <Специальный операнд типа Тип>]
<Специальный операнд типа Тип > ::= {<Специальное выражение типа Тип > <Константа типа Тип> <Переменная цикла> (<Специальное выражение типа Тип > <Аргумент типа Тип> <Вызов функции типа Тип>)}
Синтаксические конструкции описания распределения сигналов или параметров:
Данная конструкция имеет четыре аргумента, имеющих следующий смысл:
Данное - сигнал или параметр.
Объект - предобработчик, интерпретатор, оценка, сеть.
Подобъект - частный предобработчик, частный интерпретатор, частная оценка, подсеть.
<Идентификатор данных> - одно из ключевых слов Signals, Parameters, Data, InSignals, OutSignals.
<Описание распределения Данных, Объекта, Подобъекта, <Идентификатор данных>> ::= Connections <Описание групп соответствий Данных>
<Описание групп соответствий Данных> ::= <Описание группы соответствий Данных> [;<Описание групп соответствий Данных>]
<Описание группы соответствий Данных> ::= <Блок сигналов Подобъекта> <=> {<Блок сигналов Объекта> <Блок сигналов Подобъекта>}
<Блок сигналов Подобъекта> ::= <Описатель сигналов Подобъекта> [;<Блок сигналов Подобъекта>]
<Описатель сигналов Подобъекта> ::= { For <Переменная цикла> = <Начальный номер> To <Конечный номер> [Step <Шаг>] Do <Блок сигналов Подобъекта> End <Список Данных Подобъекта>}
<Переменная цикла> ::= <Идентификатор>
<Список Данных Подобъекта> ::= <Данное Подобъекта>[; <Список Данных Подобъекта>]
<Данное Подобъекта> ::= <Псевдоним>[[<Номер экземпляра>]].<Идентификатор данных> [[<Номер Данного>]]
<Номер экземпляра> ::= {<Специальное выражение типа Long> [+:]<Начальный номер> [..<Конечный номер> [:<Шаг>]]}
<Номер Данного> {<Специальное выражение типа Long> [+:]<Начальный номер> [..<Конечный номер> [:<Шаг>]]}
<Блок Данных Объекта> ::= <Описатель Данных Объекта> [; <Блок Данных Объекта>]
<Описатель Данных Объекта> ::= { For <Переменная цикла> = <Начальный номер> To <Конечный номер> [Step <Шаг>] Do <Блок Данных Объекта> End <Список Данных Объекта> }
<Список Данных Объекта> ::= <Данное Объекта>[; <Список Данных Объекта>]
<Данное Объекта> ::= <Идентификатор данных> [[<Номер Данного>]]
4.3.7.6. Комментарии
Для понятности описаний компонентов в них необходимо включать комментарии. Комментарием является любая строка (или несколько строк) символов, заключенных в фигурные скобки. Комментарий может находиться в любом месте описания компонента. При интерпретации или компиляции описания комментарии игнорируются (исключаются из текста).
4.3.7.7. Область действия переменных
Все идентификаторы состоят из произвольных комбинаций латинских букв, цифр и подчерков. Первым символом имени обязательно является буква. Использование букв только латинского алфавита связано с тем, что коды, используемые большинством компьютеров, имеют одинаковую кодировку для букв латинского алфавита, тогда как для букв национальных алфавитов других стран кодировка различна не только от компьютера к компьютеру но и от одной операционной системы к другой.
Заглавные и прописные буквы не различаются ни в именах, ни в ключевых словах.
Все переменные (описанные в блоках Var и Static) являются локальными и доступны только в пределах той функции или процедурного блока, в котором они описаны. Статические переменные сохраняют свое значение между вызовами функций или процедурных блоков, тогда как переменные, описанные в блоках Var, не сохраняют.
Переменная Error является глобальной для всех компонентов. Глобальной является также переменная ErrorManager. Однако не рекомендуется использование этих переменных путем прямого обращения к ним. Для получения значения переменной Error служит запрос GetError, исполняемый макрокомпонентом нейрокомпьютер.
4.3.7.8. Основные операторы
Оператор присваивания состоит из двух частей, разделенных знаком “=“. В левой части оператора присваивания могут участвовать имена любых переменных. В выражении, стоящем в правой части оператора присваивания могут участвовать любые переменные, аргументы процедурного блока и константы. В случае несоответствия типа выражения в правой части и типа переменной в левой части оператора присваивания производится приведение типа. Все выражения вычисляются слева на право с учетом старшинства операций.
Оператор ветвления. Оператор ветвления состоит из трех частей, каждая из которых начинается соответствующим ключевым словом. Первая часть - условие, начинается с ключевого слова If и содержит логическое выражение. В зависимости от значения вычисленного логического выражения выполняется Then часть (истина) или Else часть (ложь). Третья (Else) часть оператора может быть опущена. Каждая из выполняемых частей состоит из ключевого слова и оператора. При необходимости выполнить несколько операторов, необходимо использовать операторные скобки Begin End.
Цикл For имеет следующий вид:
For Переменная_цикла = Начальное_значение To Конечное_значение [By Шаг] Do <Оператор>
Переменная цикла должна быть одного из целочисленных типов. В ходе выполнения оператора она пробегает значения от Начальное_значение до Конечное_значение с шагом Шаг. Если описание шага опущено, то шаг равен единице. При каждом значении переменной цикла из диапазона выполняется оператор, являющийся телом цикла. Если в теле цикла необходимо выполнить несколько операторов, то необходимо воспользоваться операторными скобками. Допускается любое число вложенных циклов. Выполнение цикла в зависимости от соотношения между значениями Начальное_значение, Конечное_значение и Шаг приведено в табл. 11.
Таблица 11.
Способ выполнения цикла в зависимости от значений параметров цикла.
Конечное значение |
Шаг |
Способ выполнения |
|
>Начального значения |
>0 |
Цикл выполняется пока переменная цикла Конечного значения |
|
<Начального значения |
>0 |
Тело цикла не выполняется |
|
=Начальному значению |
0 |
Тело цикла выполняется один раз |
|
>Начального значения |
<0 |
Тело цикла не выполняется |
|
<Начального значения |
<0 |
Цикл выполняется пока переменная цикла Конечного значения |
|
=0 |
Тело цикла не выполняется |
Цикл While. Тело цикла выполняется до тех пор, пока верно логическое выражение. Проверка истинности логического выражения производится перед выполнением тела цикла. Если тело цикла должно содержать более одного оператора, то необходимо использовать операторные скобки.
4.3.7.9. Описание распределения сигналов
Раздел описания распределения сигналов начинается с ключевого слова Connections. За ключевым словом Connections следует одна или несколько групп соответствий. Каждая группа соответствий состоит из правой и левой частей, разделенных символами «<=>» и описывает соответствие имен сигналов (параметров) различных структурных единиц. Каждая часть группы соответствий представляет собой список сигналов (параметров) или интервалов сигналов (параметров), разделенных между собой символом «;». Указанные в левой и правой частях сигналы (параметры) отождествляются. Если при указании сигнала (параметра) не указано имя подобъекта, то это сигнал (параметр) описываемого объекта. Использование интервала сигналов (параметров) в правой или левой части группы соответствий равносильно перечислению сигналов (параметров), с номерами, входящими в интервал, начиная с начального номера c шагом, указанным после символа «:». Если шаг не указан, то он полагается равным единице. Число сигналов в правой и левой частях группы соответствий должно совпадать. Если интервал пуст (например [2..1:1]), то описываемая им группа сигналов считается отсутствующей и пропускается. При использовании в описании соответствий явных циклов, во всех выражениях внутри цикла возможно использование переменной цикла. При этом подразумевается следующий порядок перечисления: Сначала изменяется номер в самом правом интервале, далее во втором справа, и т.д. В последнюю очередь изменяются значения переменных цикла явных циклов в порядке их вложенности (переменная самого внутреннего цикла меняется первой и т.д.). Рассмотрим следующий пример описания группы соответствий блока, содержащего две сети Net с 3 входами каждая. Ниже приведено две различных структуры связей по несколько эквивалентных вариантов описания.
Случай 1. Естественный порядок связей.
Вариант 1.
InSignals[1] <=> Net[1].InSignals[1]
InSignals[2] <=> Net[1].InSignals[2]
InSignals[3] <=> Net[1].InSignals[3]
InSignals[4] <=> Net[2].InSignals[1]
InSignals[5] <=> Net[2].InSignals[2]
InSignals[6] <=> Net[2].InSignals[3]
Вариант 2.
InSignals[1..6] <=> Net[1..2].InSignals[1..3]
Вариант 3.
InSignals[1]; InSignals[2]; InSignals[3]; InSignals[4]; InSignals[5];
InSignals[6] <=> For I=1 To 3 Do For J=1 To 2
Подобные документы
Определение перспектив, направлений и тенденций развития вычислительных систем как совокупности техники и программных средств обработки информации. Развитие специализации вычислительных систем и проблема сфер применения. Тенденции развития информатики.
реферат [19,5 K], добавлен 17.03.2011Нейрокибернетика как направление изучения "искусственного интеллекта". Программный, аппаратный и гибридный подход к созданию нейросетей. Развитие института нейрокибернетики в России. Направления внедрение нейрокибернетики и интеллектуальных систем.
контрольная работа [31,4 K], добавлен 26.02.2012Историческое развитие средств вычислений. Структурные схемы вычислительных систем. Развитие элементной базы и развитие архитектуры самих систем. Основные классы вычислительных машин. Каналы передачи данных. Требования к составу периферийных устройств.
реферат [48,7 K], добавлен 09.01.2011Искусственные нейронные сети, строящиеся по принципам организации и функционирования их биологических аналогов. Элементарный преобразователь в сетях. Экспериментальный автопилотируемый гиперзвуковой самолет-разведчик LoFLYTE, использующий нейронные сети.
презентация [1,3 M], добавлен 23.09.2015Примеры счетно-решающих устройств до появления ЭВМ. Суммирующая машина Паскаля. Счетная машина Готфрида Лейбница. "Аналитическая машина" Чарльза Бэббиджа, развитие вычислительной техники после ее создания. Поколения электронно-вычислительных машин.
презентация [1,2 M], добавлен 10.02.2015Характеристика моделей обучения. Общие сведения о нейроне. Искусственные нейронные сети, персептрон. Проблема XOR и пути ее решения. Нейронные сети обратного распространения. Подготовка входных и выходных данных. Нейронные сети Хопфилда и Хэмминга.
контрольная работа [1,4 M], добавлен 28.01.2011Понятие искусственного интеллекта как свойства автоматических систем брать на себя отдельные функции интеллекта человека. Экспертные системы в области медицины. Различные подходы к построению систем искусственного интеллекта. Создание нейронных сетей.
презентация [3,0 M], добавлен 28.05.2015Основы нейрокомпьютерных систем. Искусственные нейронные сети, их применение в системах управления. Алгоритм обратного распространения. Нейронные сети Хопфилда, Хэмминга. Современные направления развития нейрокомпьютерных технологий в России и за рубежом.
дипломная работа [962,4 K], добавлен 23.06.2012Преимущества нейронных сетей. Модели нейронов, представляющих собой единицу обработки информации в нейронной сети. Ее представление с помощью направленных графов. Понятие обратной связи (feedback). Основная задача и значение искусственного интеллекта.
реферат [1,2 M], добавлен 24.05.2015Рождение искусственного интеллекта. История развития нейронных сетей, эволюционного программирования, нечеткой логики. Генетические алгоритмы, их применение. Искусственный интеллект, нейронные сети, эволюционное программирование и нечеткая логика сейчас.
реферат [78,9 K], добавлен 22.01.2015