Instructor
kParTan Used Library1; {Антиовражная процедура обучения kParTan}Main
{Обучение ведется по всему обучающему множеству} Label
Exit, Exit1; Static
Color
InstColor Name "Цвет примеров обучающего множества" Default
HFFFF; {По умолчанию} Integer
OperColor Name "Операция для отбора цветов" Default CIn; {все примеры, в цвете которых есть хоть один единичный бит }
String
NetName Name "Имя сети" Default ""; Integer
What Name "Что обучать" Default Parameters; {По умолчанию 2ParTan}
Integer
k Name "Число шагов между ParTan шагами" Default 2; Real
AccuracyName "Требуемый минимум оценки"Default 0.00001; Logic
Direction Name "Случайное направление или антиградиент" 11 Default True
; {Если истина,то антиградиент } Var
Integer
Handle; {Номер сеанса задачника} String
QName; {Имя запроса} PRealArray
Map1, DirectMap; {Для текущего массива параметров и ParTan направления} Real
Step, ParTanStep; {Длины шагов для оптимизации шага} Real
Est1, Est2; {Для хранения текущей и случайной оценки} Long
I;Init
Begin
If Not
SetInstructionObject(What, @NetName) Then GoTo Exit; {Задаем объекты обучения} QName = "InitSession"; {Задаем имя запроса}
Map1 = NewArray(mRealArray, 3);{Создаем массив для аргументов запроса}
If
Map = Null Then GoTo Exit; TPointer(Map^[1]) = @InstColor; {Заносим адрес первого аргумента}
TPointer(Map^[2]) = @OperColor; {Заносим адрес второго аргумента}
TPointer(Map^[3]) = @Handle; {Заносим адрес третьего аргумента}
If Not
GenerateQuMap(@QName, Map) Then GoTo Exit;{Открываем сеанс работы с задачником} If Not
FreeArray(mRealArray, Map) Then GoTo Exit;{Освобождаем массив для аргументов} {Собственно начало обучения}
Map = CreateArray; {Создаем вспомогательные массивы}
DirectMap= CreateArray;
If
Map = Null Then GoTo Exit; If
DirectMap = Null Then GoTo Exit; Est1 = Accuracy*10; {Задаем оценку, не удовлетворяющую требованию точности}
Step = 0.005; {Задаем начальное значение шагу}
End
InstrStep
Est > Accuracy Begin
If Not
SaveArray(Map1) Then GoTo Exit; {Сохраняем начальный массив параметров} For
I = 1 To k Do Begin {Выполняем k межпартанных шагов} If Direct Then Est = SDM(Handle, Step) Else Est = RDM(Handle, Step);
If Error
<> 0 Then GoTo Exit; End;
If Not
SaveArray(DirectMap) Then GoTo Exit; {Сохраняем конечный массив параметров} For
I = 1 To TLong(Map^[0]) Do DirectMap^[I] = DirectMap^[I] - Map^[I]; {Вычисляем направление ParTan шага}
ParTanStep = 1; {Задаем начальное значение ParTan шагу}
Est =Optimize(DirectMap, ParTanStep); {Вызываем функцию подбора оптимального шага}
If Error
<> 0 Then GoTo Exit; End
Close
Begin
Exit:
If Not
EraseArray(Мар) Then; {Освобождаем вспомогательные массивы}