Миркес Е. М.
Шрифт:
Пример 1.
Instructor RandomFire; {Метод случайной стрельбы с уменьшением радиуса}
Main {Обучение ведется по всему обучающему множеству}
Label Exit, Exit1;
Static
Integer Try Name "Число попыток при одном радиусе" Default 5;
Real MinRadius Name "Минимальный радиус, при котором + "продолжается работа"Default 0.001;
String NetName Name "Имя сети" Default "";
Integer What Name "Что обучать" Default Parameters;
Color InstColor Name "Цвет примеров обучающего множества" Default HFFFF; {По умолчанию}
Integer OperColor Name "Операция для отбора цветов" Default CIn;
Var {все примеры, в цвете которых есть хоть один единичный бит}
PRealArray Map, DirectMap; {Для хранения текущего и случайного массивов параметров}
Real Est1, Est2; {Для хранения текущей и случайной оценки}
Real Radius; {Текущий радиус}
Integer TryNum, RadiusNum; {Число попыток, номер использованного радиуса}
Integer Handle; {Номер сеанса задачника}
String QName; {Имя запроса}
Init
Begin
If Not SetInstructionObject(What, @NetName) Then GoTo Exit; {Задаем объекты обучения}
QName = "InitSession"; {Задаем имя запроса}
Map = NewArray(mRealArray, 3); {Создаем массив для аргументов запроса}
If Map = Null Then GoTo Exit;
TPointer(Map^[1]) = @InstColor; {Заносим адрес первого аргумента}
TPointer(Map^[2]) = @OperColor; {Заносим адрес второго аргумента}
TPointer(Map^[3]) = @Handle; {Заносим адрес третьего аргумента}
If Not GenerateQuest(@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 = 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;