- •Нечеткие логические системы Постановка задачи
- •Решение задачи
- •Нейронные сети Постановка задачи
- •Эвристическое решение задачи
- •Выбор нейронной сети для решения задачи
- •Вычислительный эксперимент
- •Экспертная система Постановка задачи
- •Исследование структуры экспертной системы
- •Создание собственной базы продукционных правил
- •Литература
Нейронные сети Постановка задачи
Известны координаты нападающего и вратаря относительно левого нижнего угла левой половины поля. Вратарь может находиться только в рамках штрафной площади. Необходимо принять решение о том, в какую часть ворот бить нападающему с учетом следующих допущений:
Размерами вратаря и мяча можно пренебречь;
Мяч летит по прямой линии, соединяющей нападающего и выбранную им точку ворот;
Мяч летит с импульсом, достаточным чтобы из любой точки поля мяч мог попасть в ворота;
Разметка поля произведена по следующей схеме:
Рис. 6. Разметка поля.
Координаты вратаря ограниченны зеленым прямоугольником, нападающий может находиться в любой точке внутри синего прямоугольника, линия ворот обозначена красным цветом.
Эвристическое решение задачи
Для простоты будем считать, что вратарь одинаково подвижен слева и справа от оси, соединяющей его с нападающим. Рассмотрим наиболее частую ситуацию, когда вратарь расположен между нападающим и воротами:
Рис. 7. Схема для принятия решений о направлении удара нападающего.
На рисунке 2 вратарь обозначен крестом (G), нападающий – квадратом (F), точки A и B – границы ворот, синим штрихом – границы направления удара, красным штрихом – выбранное направление.
Примем допущение о том, что чем больше угол траектории мяча с прямой FG тем меньше вероятность того что вратарь сможет мяч перехватить. Тогда принятие решения сводится к сравнению углов AFG и BFG и выбор того сектора для удара, где угол наибольший. Для определенности будем считать, бить прямо в точки A и B нельзя, поэтому определим множество возможных точек для удара как . Тогда правило для принятия решений будет иметь вид:
101\* MERGEFORMAT (.)
Выбор нейронной сети для решения задачи
Будем использовать нейронную сеть для аппроксимации правила определенного ранее. Из вида правила, очевидно, что рассматриваемая задача является задачей классификации. В качестве входных переменных будем использовать координаты нападающего и защитника .
Поскольку исходная зависимость использует для принятия решений углы образованные воротами и игроками и углы нелинейно зависят от координат игроков, то в данном случае необходимо использовать нейронную сеть со скрытым слоем:
202\* MERGEFORMAT (.)
Так как данная нейронная сеть решает задачу классификации для двух классов, то число ее выходных нейронов будет также равно двум.
Для обучения будем использовать набор векторов, лежащих в узлах четырехмерной сетки (всего векторов), генерируемый с помощью следующего кода Matlab:
trainingSize = [4; 4; 4; 4];% Number of training vectors
testSize = 5000 ;% Number of training vectors
f_x = [0 16.5]; % Range of forward x coordinate
f_y = [0 40.3]; % Range of forward y coordinate
g_x = [11 16.5]; % Range of goalkeeper x coordinate
g_y = [11 29.3]; % Range of goalkeeper y coordinate
a = [f_x ; f_y; g_x; g_y];
trainData = [];
testData = [];
k=1
for i=1:trainingSize(1)
for j=1:trainingSize(2)
for y=1:trainingSize(3)
for z=1:trainingSize(4)
trainData(1:4,k) = a(:,1) + [i j y z]'.*(a(:,2)-a(:,1))./(trainingSize+1);
trainData(5:6,k) = hitPoint(trainData(1:2,k)',trainData(3:4,k)');
k=k+1;
end
end
end
end
Для дополнительной проверки корректности работы сети будем использовать долю неправильных срабатываний сети на 5000 случайных входных векторах в сравнении с эталонной функцией, используя следующий код Matlab:
testSize = 5000 ;% Number of training vectors
for i=1:testSize
testData(1:4,i) = a(:,1) + rand(4,1).*(a(:,2)-a(:,1));
testData(5:6,i) = hitPoint(testData(1:2,i)',testData(3:4,i)');
% figure
end
out = net(testData(1:4,:));
[y_out,I_out] = max(out);
[y_t,I_t] = max(testData(5:6,:));
diff = I_t - 2*I_out;
f_m = length(find(diff==0));
m_f = length(find(diff==-3));
error = (f_m+ m_f)/testSize