![]() |
![]() |
renesko1 |
![]()
Сообщение
#1
|
![]() поиск ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 346 Пол: Мужской Реальное имя: nir Репутация: ![]() ![]() ![]() |
Я решил поэксперементировать и реализовать некое сущестово, которое осущ. поиск еды на матрице.
В принципе все легко, но я решил сделать с минимум хода то есть без правил левой-правой ноги, обхода спиралью и тд. Я заполнил матрицу едой и сделал массив из 4 функций: право, лево, верх и вниз. По моему условию животное "слепое" те не видит, где еда. Пока я сделал след. :наугад берется команда если она выполнена успешно(не врезались в стену) и съедена еда, то команда выполняется еще раз(мне кажется что это логично и для простейшего существа). Если стена или нет еды выберается наугад команда, пока не найдем еду. Так же я пытался записываь команды которые привели к нахождению еды и если ннет еды то выполнять их. Сам вопрос, какой алгоритм поиска пищи у насекомых или какие нибудь идеи.? Я искал про муравьев, но увы не нашел, хотя искал не очень долго. У меня есть пару мыслей : к примеру помечать клетки, где мы оно было и если встретили их идти от них до стены... бррррр бред.Ведь насекомые вроде не дигаются спиралью от центра норки ? ps Самое главное, что оно слепое, и без обояния. ![]() -------------------- typedef void Śūnyatā ;
|
![]() ![]() |
andriano |
![]()
Сообщение
#2
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Ну, примерно так:
1. Задаешься радиусом видимости (для примера 3 клетки в каждую сторону). 2. Задаешься, во сколько раз радиус "унюхиваемости" больше радиуса видимости (например, в 2.5-3 раза). 3. Вычисляешь СКО (в данном случае 8 клеток). 4. Делаешь для распределения массив весов: 4.1. Заводишь двумерный массив по 3 СКО в каждую сторону от середины, т.е. 49х49 (3*8 + 1 + 3*8). 4.2. Вычисляешь интеграл для каждой ячейки по формуле в зависимости от радиуса (расстояния до центральной ячейки). 4.3. При необходимости - нормируешь, но, думаю, в данном случае не нужно. 5. Массив весов готов. Для вычисления потенциала: 1. Заводишь вспомогательное поле размером равное полю, по которому будут бродить муравьи (вещ.тип). 2. Перед началом вычисления очищаешь поле (обнуляешь). 3. Пробегаешь по всем клеткам основного поля. Если есть еда, то прибавляешь к полю потенциала вспомогательное поле, отцентрировав его по рассматриваемой ячейке, и домножив на количество еды. 4. В полученном поле находишь градиент в тех точках, где расположены муравьи. В принципе, для оптимизации можно и потенциал вычислять только в окрестностях этих точек (+/- одна ячейка). Для пояснения приведу одномерный пример. Пусть у нас Гаусс: 0 1 2 5 2 1 0 Пусть поле имеет ширину 10 клеток и в нем в точке 4 расположено 2 ед. еды, а в точке 8 - 3 единицы. Обнуляем: 0 0 0 0 0 0 0 0 0 0 От 4-й точки: 0 0 2 4 10 4 2 0 0 0 От 8-й точки: 0 0 0 0 0 0 3 6 15 6 Суммируем: 0 0 2 4 10 4 5 6 15 6 |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 2:08 |