Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
Случай 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 Do Net[J].InSignals[I] End End
Случай 2. Другой порядок связей.
Вариант 1.
InSignals[1] <=> Net[2].InSignals[3]
InSignals[2] <=> Net[1].InSignals[3]
InSignals[3] <=> Net[2].InSignals[2]
InSignals[4] <=> Net[1].InSignals[2]
InSignals[5] <=> Net[2].InSignals[1]
InSignals[6] <=> Net[1].InSignals[1]
Вариант 2.
InSignals[1..6] <=> For I=3 To 1 Step -1 Do Net[2..1:-1].InSignals[I] End
Вариант 3.
InSignals[6..1:-2]; InSignals[5..1:-2]<=> For I=1 To 3 Do For J=1 To 2 Do Net[J].InSignals[I] End End
Функции управления памятьюДля создания массивов и освобождения занимаемой ими памяти используются следующие функции:
Создание массива.
Function NewArray(Type: Integer; Size: Long): PRealArray;
Описание аргументов:
Type — задает размер элемента массива и является одной из предопределенных констант, приведенных в табл. 15.
Size — число элементов в массиве.
Описание исполнения.
1. Если аргумент Type не совпадает ни с одной из предопределенных констант, приведенных в табл. 15, то возвращается значение Null, исполнение функции завершается.
2. Создается массив, занимающий Size*Type+4 байта.
3. Адрес массива возвращается как результат.
Таблица 15. Предопределенные константы типов элементов массивов
Идентификатор Значение Описание mRealArray 4 Размер элемента — 4 байта mIntegerArray 2 Размер элемента — 2 байта mLongArray 4 Размер элемента — 4 байта mLogicArray 1 Размер элемента — 1 байтОсвобождение массива.
Function FreeArray(Type: Integer; Array: PRealArray): Logic;
Описание аргументов:
Type — задает размер элемента массива и является одной из предопределенных констант, приведенных в табл. 15.
Array — адрес массива. Память, занимаемая этим массивом, должна быть освобождена.
Описание исполнения.
1. Если аргумент Type не совпадает ни с одной из предопределенных констант, приведенных в табл. 15, то возвращается значение False, исполнение функции завершается.
2. Освобождается память размером TReal(Array[0])*Type+4 байта.
3. Аргументу Array присваивается значение Null
Пересоздание массива.
Function ReCreateArray(Type: Integer; Array: PRealArray; Size: Long): Logic;
Описание аргументов:
Type — задает размер элемента массива и является одной из предопределенных констант, приведенных в табл. 15.
Array — адрес массива.
Size — число элементов в массиве.
Описание исполнения.
1. Если аргумент Type не совпадает ни с одной из предопределенных констант, приведенных в табл. 15, то возвращается значение False, исполнение функции завершается.
2. Если аргумент Array не равен Null, и TReal(Array[0]) равен Size, то возвращается значение True, выполнение функции завершается.
3. Если аргумент Array не равен Null, и TReal(Array[0]) не равен Size, то освобождается память размером TReal(Array[0])*Type+4 байта. Аргументу Array присваивается значение Null
4. Аргументу Array присваивается значение NewArray(Type,Size), возвращается значение True, исполнение функции завершается.
Использование памяти
Ряд запросов, исполняемых различными компонентами, возвращают в качестве ответа указатели на массивы. В этих случаях действуют следующие правила:
1. Если компонент получил пустой указатель (Null), то он сам создает массив необходимой длины.
2. Если передан непустой указатель, но существующей длины массива недостаточно, то компонент освобождает память, занятую под переданный массив и создает новый массив необходимой длины.
3. Освобождение памяти после использования массива лежит на вызывающем компоненте.
Если одному из компонентов не хватает памяти для выполнения запроса, то этот компонент может передать макрокомпоненту нейрокомпьютер запрос на дополнительную память. В этом случае макрокомпонент нейрокомпьютер передает всем компонентам запрос FreeMemory. При исполнении данного запроса каждый компонент должен освободить всю память, не являющуюся абсолютно необходимой для работы. Например, компонент задачник может для быстроты обработки держать в памяти все обучающее множество. Однако абсолютно необходимой является память, достаточная для хранения в памяти одного примера.
Запрос на освобождение памяти исполняется каждым компонентом и не включен в описания запросов компонентов, приведенные в следующих разделах.
Обработка ошибок
Схема обработки ошибок достаточно проста по своей идее — каждый новый обработчик ошибок может обрабатывать только часть ошибок, а обработку остальных может передать ранее установленному обработчику. Пользователь может организовать обработку ошибок и не прибегая к установке обработчика ошибок — обработчик ошибок по умолчанию почти во всех случаях устанавливает номер последней ошибки в переменную Error, которая может быть считана с помощью запроса GetError и обработана прямо в компоненте, выдавшем запрос.
Если обработчик ошибок устанавливает номер последней ошибки в переменной Error, то все запросы, поступившие после момента установки, завершаются неуспешно. Это состояние сбрасывается при вызове запроса «дать номер ошибки».
Процедура обработки ошибокПроцедура обработки ошибок должна удовлетворять следующим требованиям:
• Это должна быть процедура с дальним типом адресации. Формат описания процедуры обработки ошибок
Far;ErrorFunc(Long ErrorNumber)
• После обработки ошибок процедура может вызвать ранее установленный обработчик ошибок. Адрес ранее установленного обработчика ошибок процедура обработки ошибок получает в ходе следующей процедуры:
• Вызов процедуры с нулевым номером ошибки означает, что в следующем вызове будет передан адрес старой процедуры обработки ошибок.
• Значение аргумента ErrorNumber при вызове, следующем непосредственно за вызовом с нулевым номером ошибки, должно интерпретироваться как адрес старой процедуры обработки ошибок.
Ниже приведено описание запросов, связанных с обработкой ошибок и исполняемых макрокомпонентом нейрокомпьютер.
Установить обработчик ошибок (OnError)Описание запроса:
Pascal:
Function OnError(NewError: ErrorFunc): Logic;
C:
Logic OnError(ErrorFunc NewError)
Описание аргументов:
NewError — адрес новой процедуры обработки ошибок.
Назначение — устанавливает новый обработчик ошибок.
Описание исполнения.
1. Если Error <> 0, то выполнение запроса прекращается.
2. Вызов NewError с аргументом 0 — настройка на установку цепочки обработки ошибок.
3. Вызов NewError с аргументом ErrorManager (вместо длинного целого передается адрес старой процедуры обработки ошибок).
4. ErrorManager:= NewError
Дать номер ошибки (GetError)Описание запроса:
Pascal:
Function GetError: Integer;
C:
Integer GetError()
Назначение — возвращает номер последней необработанной ошибки и сбрасывает ее.
Описание исполнения.
1. GetError:= Error
2. Error:= 0
Списки ошибок, возникающих в различных компонентах, даны в разделах «Ошибки компоненты …», в соответствующих разделах. Все номера ошибок каждого компонента являются трехзначными числами и начинаются с номера компонента, указанного в колонке «Ошибка» табл. 16.
Запросы, однотипные для всех компонентов
Таблица 16. Префиксы компонентов
Префикс Компонент Запроса Ошибки ex 0 Исполнитель tb 1 Задачник pr 2 Предобработчик nn 3 Сеть es 4 Оценка ai 5 Интерпретатор ответа in 6 Учитель cn 7 КонтрастерРяд запросов обрабатывается всеми компонентами, кроме компонента исполнитель, носящего вспомогательный характер. Один из таких запросов — FreeMemory — был описан в разделе «Управление памятью», а два запроса, связанных с обработкой ошибок — в разделе «Обработка ошибок». В данном разделе приводятся описания остальных запросов, имеющих одинаковый смысл для всех компонентов. В отличие от ранее описанных запросов эти запросы опираются на структуру исполняющего компонента, поэтому к имени запроса добавляется префикс, задающий компонента. Список префиксов приведен в табл. 16. Единственным исключением из числа компонентов, исполняющих перечисленные в данном разделе запросы, является компонент исполнитель.