Домены: стандартные, списковые, составные



Раздел описания доменов является аналогом раздела описания типов в обычных императивных языках программирования и начинается с ключевого слова DOMAINS.

В Турбо Прологе имеются стандартные домены, которые не нужно указывать в разделе описания доменов. Основные стандартные домены - это:

Integer - целое число (из промежутка -32768...32767);

real - действительное число (лежащее между ±1e-307...±1e308);

char - символ, заключенный в одиночные апострофы;

string - последовательность символов, заключенная в двойные кавычки;

symbol - символическая константа (начинающаяся со строчной буквы последовательность букв латинского алфавита, цифр и знаков подчеркивания или последовательность любых символов, заключенная в кавычки). Этот домен соответствует понятию атома, с которым мы познакомились во второй лекции;

file - файл (подробному изучению файлов будет посвящена лекция 12).

В разделе описания доменов объявляются любые нестандартные домены, используемые в качестве аргументов предикатов.

Объявление домена имеет следующий вид:

<имя домена>=<определение домена>

или

file=<имя файлового домена1>;...;<имя файлового доменаN>

Удобно использовать описание доменов для сокращения имен стандартных доменов. Например, чтобы не писать каждый раз integer, можно написать следующее:

DOMAINS

i=integer

и далее использовать вместо ключевого слова integer односимвольное обозначение i.

Из доменов можно конструировать составные или структурные домены ( структуры ). Структура описывается следующим образом:

<имя структуры>=<имя функтора>(<имя домена первой

компоненты>,...,<имя домена последней компоненты>)

[;<имя функтора>(...)]*

Каждая компонента структуры в свою очередь может быть структурой. Например, структура, описывающая точку на плоскости и имеющая две компоненты (координаты точки)

point = p(integer, integer)

может входить в качестве компоненты в более сложную структуру, описывающую треугольник:

triangle = tr(point, point, point)

В описание структуры могут входить альтернативы, разделенные символом " ; " или ключевым словом " or ".

Так, структуру, описывающую точку и на плоскости, и в пространстве, можно задать следующим образом:

point = p(integer, integer);p(integer, integer, integer).

Описание файлового домена имеет вид:

file = <символическое имя файла 1>;...;

<символическое имя файла N>

Для представления данных в Турбо Прологе, в отличие от стандартных алгоритмических языков программирования, используются не массивы, а списки. Подробнее списки будут рассмотрены в следующей лекции, а пока заметим, что списковый домен задается следующим образом:

<имя спискового домена>=<имя домена элементов списка>*

Например, список целых чисел описывается так:

list_of_integer=integer*

 

3. Разработать предикат, проверяющий, является ли список палиндромом. Палиндромом называется список, который совпадает со своим обращением.

Палиндромом называется список, который совпадает со своим обращением. Соответственно, у данного предиката будет всего один аргумент (список, который проверяем на "палиндромность"). Первое, что приходит в голову: воспользоваться только что написанным предикатом reverse (или reverse2). Перевернуть список и проверить, совпадает ли результат с исходным списком. Выглядеть этот предикат будет следующим образом: palindrom(L):– reverse (L,L).

rev([H|T],L1,L2):-rev(T,[H|L1],L2).
rev([ ],L,L).
palindrom(L):-rev(L,L).

Билет № 15

Проектирование и обучение персептронов

Итак, при проектировании персептронов существует пробле­ма выбора необходимого числа нейронов. Число нейронов вход­ного слоя персептрона должно совпадать с размерностью вектора входных параметров X, который определен условиями решаемой задачи. Число нейронов выходного слоя должно совпадать с раз­мерностью выходного вектора Y,что также определено условия­ми задачи. Число скрытых слоев персептрона согласно теоремам Арнольда—Колмогорова—Хехт-Нильсена должно быть не менее одного. Число нейронов в скрытых слоях может быть приближен­но оценено по формулам ,

однако его желательно оптимизировать для каждой конкретной задачи.

 

Существуют два способа оптимизации числа нейронов в скрытых слоях — деструктивный и конструктивный. Деструктивный способ заключается в том, что первоначально строится сеть с заведомо избыточным числом степеней свободы, а затем в процессе обучения из нее постепенно исключаются лишние синаптические связи и нейроны.

Существует довольно большое многообразие алгоритмов исключения избыточных степеней свободы нейросети. Наиболее простой из них состоит в обнулении тех синаптических весов, которые в процессе обучения нейросети стали значительно меньше их среднего значения. Однако малые значения синаптических весов не обязательно оказывают наименьшее воздействие на поведение нейронов и сети в целом. Поэтому более удачными признаются способы редукции сети, учитывающие ее чувствительность к структурным и параметрическим вариациям.

Общим недостатком деструктивных алгоритмов является значительная длительность их работы, поскольку первоначальные вычисления производятся в сетях, имеющих избыточное количество нейронов. Этого недостатка лишены альтернативные конструктивные алгоритмы, которые предполагают постепенное добавление нейронов к сети, в которой их заведомо недостаточно. Новые нейроны добавляются каждый раз после определенного числа эпох обучения, а синаптическим весам и порогам новых нейронов присваиваются случайные числа. Поэтому после каждого добавления нового нейрона текущая погрешность обобщения нейросети резко увеличивается, но после нескольких эпох обучения становится меньше той, которая была до добавления нейрона.

 

Отсечение и откат в Прологе

Отсечение -это специальный механизм ПРОЛОГа использование которого позволяет указать, какие из ранеесделанных выборов не следует пересматривать при возврате поцепочке согласованных целевых утверждений.Отсечение используется для повышения эффективности программ

как по времени (не тратится время на попытки найти новыесопоставления для целей, для которых заранее известно, что они невнесут в решение ничего продуктивного), так и по памяти (нет

необходимости хранить маркеры точек возврата). Часто отсечениеявляется необходимым элементом программы - без него онаправильно не работает.

max2(X,Y,X):-

          X>Y,!./* если первое число больше второго,

                 то первое число - максимум */

max2(_,Y,Y). /* в противном случае максимумом будет

                 второе число */

Откат - это механизм, который Пролог использует для нахождения дополнительных фактов и правил, необходимых при вычислении цели, если текущая попытка вычислить цель оказалась неудачной. Пролог использует откат для того, чтобы попробовать новые пути к решению. Пролог использует всю доступную информацию для выбора подходящего направления.

 

 


Дата добавления: 2018-02-28; просмотров: 445; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!