Автор: Андрей Например, пусть ИИ, по воле программиста, с "рождения" умеет ускоряться и замедляться в любом направлении на плоскости. А вот перемещаться из любой точки в заданную точку по команде - он должен научиться. |
|
Ускоряющий импульс, замедляющий импульс, инерция, трение... - здесь физика немного сложновата. Это как управление магнитной головкой винчестера.
Сформулируем Вашу задачу немножко иначе. В чём то упростим (в физике), в чём-то усложним (для зрелищности).
Итак, по плоскости блуждает точка Т1.
Шаги влево, вправо, вверх и вниз выбираются случайно.
При подаче команды "догнать" точка начинает учиться догонять другую точку Т2 (блуждающую случайно или по какому-то алгоритму).
По команде "удирать" наша точка начинает учиться удирать от точки Т2.
Покажем как решить обе задачи, интересующие Андрея.
1. Как
заставить точку Т1 (которая случайно себе блуждает) учиться догонять или удирать по команде К.
2. Собственно обучение нужному действию при подаче определённой команды.
Причём и в процессе обучения, и в обученном состоянии команды могут сменять друг друга.
Решение.
Четыре параметра Л,П,В,Н будут задавать вероятность в данный момент шага нашей точки влево, вправо, вверх или вниз.
Вначале считаем их равными и потому движение точки чисто случайны.
Обучать точку будет нейросеть (с одним скрытым слоем).
В сети будут четыре выхода, наши знакомые Л,П,В,Н (определяющие вероятность шага влево, вправо, вверх, вниз).
И три входа. х2-х1, у2-у1 (разность координат х и у нашей точки Т1 и целевой Т2),и команда К (-1 догонять, +1 убегать).
Можно было бы подавать на вход не разности координат а сами координаты х1,у1,х2,у2.
Тогда сеть будет немного более громоздкой и медленней обучение.
А еще проще для обучения сети если подавать не разности координат, а только знаки этих разностей.
Обучение с учителем.
Обучать можно и вручную, указывая после каждого хода в правильном или нет направлении сделан ход, но проще и быстрее автоматизировать это, поскольку процедура определения правильности или неправильности шага очень проста.
А именно. При К=-1 (догонять)если вход Х >0 Надо Р=1, иначе Л=1. Вход У>0 Нужно Н=1, иначе В=1. (при К=1 всё наоборот).
Обучение сети по методу обратного распостранения ошибки.
В результате у обученной сети когда на входе К -1 (догонять), а на входе Х + На выходе П будет 1. Если и на входе У будет + то и на выходе Н будет 1.
Т.е. Наша точка сделае шаг вправо или вниз (приблизится к целевой точке).
Если батарея позволяет питать одновременно два шаговых двигателя, то возможно и движение по диагонали (одновременно вправо и вниз).
При изменении команды К с -1 на +1 наша точка будет убегать от точки Т2.
Ну вот и всё.