Задача Z. JCP-19. Оболочка
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 с
Ограничение по памяти: 1024 МБ
Выпуклой оболочкой конечного набора точек на плоскости является выпуклый плоский многоугольник (в вырожденных случаях — отрезок или точка), причём его вершины являются подмножеством исходного набора точек (см. рисунок).
Пусть на плоскости расположена группа из N точек, интерпретируемых как объекты защиты. Спроектируйте и реализуйте нейронную сеть, которая бы со сто процентным правильным результатом распознавала принадлежность объекта защиты, точки с координатами (x1, x2), к области, ограниченной выпуклой оболочкой D этой группы точек. В случае, если точка находится на границе области D – она считается принадлежащей области D. Также считаем, что среди точек, образующих выпуклую оболочку множества нет точек, лежащих на одной прямой.
Результатом работы нейронной сети должно быть значение 1, если (x1,x2) принадлежит D или 0 в противном случае.
Сеть, которую вам необходимо построить, должна быть двухслойной.
В ее входном слое три значения – 1, x1 и x2 координаты точки (х1,х2). В первом слое N персептронов, каждый из которых реализует разбиение плоскости на две полуплоскости одной из прямых, образующих выпуклую оболочку множества. Во втором слое один персептрон, реализующий булеву функцию AND от n входов (выходов предыдущего слоя). f(u) – функция активации.
В матричной форме – как представлено ниже:
Порядок столбцов матрицы свяжем с обходом выпуклой оболочки. За начальную точку возьмем самую левую точку с наибольшим значением координаты x2. Следующую точку выбираем – в порядке обхода выпуклой оболочки по часовой стрелке. И так далее. Коэффициенты векторов нормируем. Так, чтобы w_2^i=\{-1,1\}, i=1,2,...,N. А если w_2^i=0, то w_1^i=\{-1,1\}.
Вам необходимо построить нейронную сеть, которая распознавала бы принадлежность точки к области D, которая является выпуклой оболочной заданного множества. В случае, если точка находится на границе либо внутри этой области – нейросеть должна выдавать значение 1, в противном случае – значение 0. Решение должно быть получено при помощи двухслойной нейросети. Ответом на задание будут две матрицы – для работы с первым слоем и для работы со вторым слоем.

Формат входных данных

В первой строке – число N – количество объектов защиты.
Далее идут N строк, каждая из которых состоит из двух вещественных чисел, разделенных пробелами – координат объекта защиты.
В следующей строке – число M – количество объектов защиты, принадлежность которых к области D надо определить.
Далее идут M строк, каждая из которых состоит из двух вещественных чисел, разделенных пробелами – координат объекта защиты.

Формат выходных данных

Решение должно быть получено при помощи двухслойной нейросети. Ответом на задание будут две матрицы – для работы с первым слоем и для работы со вторым слоем. Перед каждой матрицей выводится число ее строк и столбцов. Сами матрицы выводятся по строкам. Элементы строки разделены пробелами.
В первой строке – два натуральных числа N1 и M1, число строк и число столбцов матрицы w для работы с первым слоем нейросети.
В каждой из следующих N1 строк – коэффициенты строк матрицы. По M1 вещественных чисел, округленных до двух цифр после точки. Числа разделены пробелами.
В следующей строке – значение коэффициента h_0, вещественное число, округленное до двух цифр после точки.
В следующих P строках выводится по одному числу - 0 если соответствующая точка лежит вне области D или 1 – если внутри ее или на границе.

Примеры

стандартный вводстандартный вывод
4 1.00 0.00 0.00 2.00 -2.00 0.00 0.00 -1.00 4 0 0 1 0 2 0 4.5 3.1 3 5 1.00 2.00 1.00 1.00 2.00 0.00 -2.00 -1.00 0.50 1.00 0.00 -1.00 1.00 1.00 -1.00 -4.00 1 1 0 0
7 0.00 10.00 10.00 0.00 0.00 -10.00 -10.00 0.00 5.00 -7.00 -7.00 5.00 -5.00 -7.00 6 5 7 -5 7 -5 -7 5 -7 0 0 10 10 3 8 1.00 10.00 14.00 10.00 10.00 14.00 16.67 10.00 0.00 -1.00 -1.40 -0.60 0.60 1.40 1.67 0.71 0.00 -1.00 1.00 1.00 1.00 1.00 -1.00 -1.00 -7.00 0 0 1 1 1 0