Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
<Псевдоним>::= <Идентификатор>
<Число экземпляров >::= <Целое число>
<Имя ранее описанного интерпретатора>::= <Идентификатор>
<Имя стандартного интерпретатора>::= <Идентификатор>
<Установление параметров>::= <Установление параметров Частного интерпретатора> [;<Установление параметров>]
<Описание сигналов>::= Signals <Константное выражение типаLong >
<Описание распределения сигналов>::= <Описание распределения Сигналов,Интерпретатора, Частного интерпретатора,Signals>
<Описание распределения ответов>::= <Описание распределения Ответов,Интерпретатора, Частного интерпретатора,Answer>
<Конец описания интерпретатора>::= End Interpretator
Описание языка описания интерпретаторов
Структура описания интерпретатора имеет вид: заголовок, описание частных интерпретаторов, описание состава, описание сигналов, описание распределения сигналов, описание распределения ответов, конец описания интерпретатора.
Заголовок состоит из ключевого слова Interpretator и имени интерпретатора и служит для обозначения начала описания интерпретатора в файле, содержащем несколько компонентов нейрокомпьютера.
Описание частного интерпретатора — это описание процедуры, вычисляющей две величины: ответ и уверенность в ответе. Отметим, что уверенность в ответе имеет смысл только для оценок с уровнем надежности. В остальных случаях интерпретатор ответа может вычислять аналогичную величину, но эта величина не является коэффициентом уверенности в ответе в точном смысле. Отметим, что при описании частного интерпретатора его аргументом, как правило, является число интерпретируемых сигналов. При выполнении частный интерпретатор получает в качестве аргументов массив интерпретируемых сигналов и две действительные переменные для возвращения вычисленных ответа и уверенности в ответе. Формально, при исполнении, частный интерпретатор имеет описание следующего вида:
Pascal:
Procedure Interpretator(Signals: PRealArray; Var Answer, Reliability: Real);
C:
void Interpretator(PRealArray Signals, Real* Answer, Real* Reliability);
В разделе описания состава перечисляются частные интерпретаторы, входящие в состав интерпретатора. Признаком конца раздела служит символ «;».
В необязательном разделе установления параметров производится задание значений параметров (статических переменных) частных интерпретаторов. После ключевого слова SetParameters следует список значений параметров в том порядке, в каком параметры были объявлены при описании частного интерпретатора (для стандартных интерпретаторов порядок параметров указан в табл. 29). При использовании одного оператора задания параметров для задания параметров нескольким экземплярам одного частного интерпретатора после ключевого словаsetparameters указывается столько выражений, задающих значения параметров, сколько необходимо для одного экземпляра. Например, если в блоке описания состава содержится 10 экземпляров двоичного интерпретатора на 15 интерпретируемых сигналов — myint: binarycoded(15)[10], то после ключевого слова setparameters должно быть только одно выражение:
MyInt[I:1..10] SetParameters 0.01*I
В данном примере первый интерпретатор будет иметь уровень надежности равный 0.01, второй — 0.02 и т. д.
В необязательном разделе описание сигналов указывается число сигналов, интерпретируемых интерпретатором. Если этот раздел опущен, то полагается, что число интерпретируемых интерпретатором сигналов равно сумме сигналов, интерпретируемых всеми частными интерпретаторами. В константном выражении может вызываться функция NumberOf, аргументом которой является имя частного интерпретатора (или его псевдоним) с указанием фактических аргументов.
В необязательном разделе описания распределения сигналов для каждого частного интерпретатора указывается, какие сигналы из общего интерпретируемого массива передаются ему для интерпретации. Если этот раздел отсутствует, то считается, что каждый следующий частный интерпретатор получает следующий фрагмент общего вектора выходных сигналов. В примере 1 данный раздел описывает распределение сигналов по умолчанию.
В необязательном разделе описания распределения ответов для каждого частного интерпретатора указывается, какой элемент массива ответов он вычисляет. Если этот раздел опущен, то считается, что первый частный интерпретатор вычисляет первый элемент массива ответов, второй — второй элемент и т. д. Массив уровней надежностей всегда параллелен массиву ответов. В примере 1 данный раздел описывает распределение ответов по умолчанию.
Кроме того, в любом месте описания интерпретатора могут встречаться комментарии, заключенные в фигурные скобки.
Пример описания интерпретатора
В этом разделе приведены два примера описания одного и того же интерпретатора следующего состава: первый сигнал интерпретируется как температура путем умножения на 10 и добавления 273; следующие два сигнала интерпретируются как наличие облачности, используя знаковый интерпретатор; следующие три сигнала интерпретируются как направление ветра, используя двоичный интерпретатор (восемь румбов); последние три сигнала интерпретируются максимальным интерпретатором как сила осадков (без осадков, слабые осадки, сильные осадки). В первом примере приведено описание дубликатов всех стандартных интерпретаторов. Во втором — использованы стандартные интерпретаторы.
Пример 1.
Interpretator Meteorology
{Интерпретатор осуществляющий масштабирование и сдвиг сигнала}
Inter Empty1()
Static
Real B Name "Масштабный множитель";
Real C Name "Сдвиг начала отсчета";
Begin
Answer = Signals[1] * B + C;
Reliability = 0
End
{Кодирование номером канала. Знаковый интерпретатор}
Inter Binary1 : (N : Long)
Static
Real E Name "Уровень надежности";
Var
Long A, B, I;
Real Dist;
Begin
Dist = E;
B = 0; {Число единиц}
A = 0; {Номер единицы}
For I = 1 To N Do Begin
If Abs(Signals[I]) < Dist Then Dist =Abs(Signals[I]);
If Signals[I] > 0 Then Begin A = I; B = B + 1; End;
End;
If B <> 1 Then Answer = 0 Else Answer = A
Reliability = Abs(Dist / E)
End
{Кодирование номером канала. Максимальный интерпретатор.}
Inter Major1 : (N : Long)
Static
Real E Name "Уровень надежности";
Var
Real A, B;
Long I, J;
Begin
A = -1.E+30; {Максимальный сигнал}
B = -1.E+30; {Второй по величине сигнал}
J = 0; {Номер максимального сигнала}
For I = 1 To N Do Begin
If Signals[I] > A Then Begin B = A; A = Signals[I]; J=I; End
Else If Signals[I] > B Then B = Signals[I];
End;
Answer = J;
If A – B > E Then Reliability = 1 Else Reliability = (A – B) / E;
End
Inter BynaryCoded1 : (N : Long)
Static
Real E Name "Уровень надежности";
Var
Long A, I;
Real Dist;
Begin
Dist = E;
A = 0; {Ответ}
For I = 1 To N Do Begin
If Abs(Signals[I]) < Dist Then Dist =Abs(Signals[I]);
A = A * 2;
If Signals[I] > 0 Then A = A + 1;
End;
Answer = A;
Reliability = Abs(Dist / E)
End
Contents Temp : Empty1, Cloud : Binary1(2), Wind : BynaryCoded1(3), Rain : Major1(3);
Temp SetParameters 10, 273;
Cloud SetParameters 0.1;
Wind SetParameters 0.2;
Rain SetParameters 0.15
Signals NumberOf(Signals,Temp) +NumberOf(Signals, Cloud) +