Map = CreateArray; {Создаем вспомогательные массивы}
DirectMap= CreateArray;
If Map = Null Then GoTo Exit;
If DirectMap= Null Then GoTo Exit;
Est1 = Estimate(Handle, True);
If Error <> 0 Then GoTo Exit;
RadiusNum = 1; {Обрабатываем первый радиус}
Radius = 1 / RadiusNum; {Вычисляем первый радиус}
If Not SaveArray(Map) Then GoTo Exit; {Сохраняем начальный массив параметров}
End
InstrStep Radius > MinRadius {Обработка с одним радиусом – один шаг обучения}
Begin
TryNum = 0;
While TryNum < Try Do Begin
If Not SetArray(Map) Then GoTo Exit; {Устанавливаем лучший массив параметров}
If Not RandomArray(DirectMap) Then GoTo Exit; {Генерируется новый массив параметров}
If Not Modify(DirectMap, 1, Radius) Then GoTo Exit; {Модифицируем массив параметров}
Est2 = Estimate(Handle, True);
If Error <> 0 Then GoTo Exit;
If Est1>Est2 Then Begin
If Not SaveArray(Map) Then GoTo Exit; {Сохраняем лучший массив параметров}
Est1 = Est2;
TryNum = 0;
End Else TryNum = TryNum + 1; {Увеличиваем счетчик отказов}
End
RadiusNum = RadiusNum + 1; {Обрабатываем следующий радиус}
Radius = 1 / RadiusNum; {Вычисляем следующий радиус}
End
Close
Begin
Exit:
If Not SetArray(Map) Then; {Восстанавливаем лучший массив параметров}
If Not EraseArray(Мар1) Then; {Освобождаем вспомогательные массивы}
If Not EraseArray(Мар2) Then;
QName = "CloseSession"; {Задаем имя запроса}
Map = NewArray(mRealArray, 1); {Создаем массив для аргументов запроса}
If Map = Null Then GoTo Exit1;
TPointer(Map^[1]) = @Handle; {Заносим адрес единственного аргумента}
If Not GenerateQuest(@QName, Map) Then;{Открываем сеанс работы с задачником}
If Not FreeArray(mRealArray, Map) Then; {Освобождаем массив для аргументов}
Exit1:
End
End Instructor
Пример 2. Библиотека функций
InstrLib Library1; {Библиотека содержит функции для следующего учителя}
{Метод наискорейшего спуска}
Function SDM( Handle : Integer; Step : Real) : Real;
Label Exit, Endd;
Var
Real Est;
Begin
Est = CalcGradient(Handle, True);
If Error <> 0 Then GoTo Exit;
Est =Optimize(Null, Step); {Вызываем функцию подбора оптимального шага}
If Error <> 0Then GoTo Exit;
SDM = Est;
GoTo Endd;
Exit:
SDM = 0;
Endd:
End
{Метод случайного поиска}
Function RDM( Handle : Integer; Step : Real) : Real;
Label Exit, Endd;
Var
Real Est;
PRealArray : Direction;
Begin
Direction = CreateArray; {Создаем вспомогательный массив}
If Direction = Null Then GoTo Exit;
If Not RandomArray(Direction) Then GoTo Exit; {Генерируется новый массив параметров}
If Error <> 0 Then GoTo Exit;
Est =Optimize(Direction, Step); {Вызываем функцию подбора оптимального шага}
If Error <> 0 Then GoTo Exit;
RDM = Est;
GoTo Endd;
Exit:
RDM = 0;
Endd:
End
End InstrLib
Пример 3. Антиовражная процедура обучения.