-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Генетический алгоритм #6
Comments
Дополнения:
|
Поправка к моему посту: после скрещивания вовсе не обязательно получится валидное решение. Нужно обязательно применять фиксер. |
По-моему, IoU нам не нужен. Во-первых, задача у нас бинарная: либо мы всё закрасили, либо нет. Union всегда будет включать в себя все клетки поля, т.к. валидное решение закрашивает их все. Intersection же будет определяться оцениваемым решением (т.к. пересечение любого множества с универсумом — это исходное множество). В общем, IoU в нашей задаче сводится к отношению закрашенных клеток к их общему количеству. Drills могут добавлять в множество новые клетки, но они сразу автоматически закрашиваются, поэтому на мои рассуждения выше они никак не повлияют. |
Akon32 в начале контеста предлагал вместо A* использовать генетический алгоритм. Мы таки реализовали A*, но мне уже надоело бесуспешно тюнить его целевую функцию, так что я подумал-таки и про ГА.
Что нам понадобится:
Генератор решений
В первом приближении просто random walk — на каждом шаге делает первое попавшееся действие, приводящее его в новое валидное состояние. Будет генерировать огромные решения, зато быстро.
Также при наличии решения от A* (файла .sol) можно подгружать и его — оно наверняка гораздо оптимальнее и будет отличной основой для мутаций и скрещиваний.
Мутатор решений
Делает одно из:
В результате не обязательно получится валидное решение, но на это у нас будет фиксер.
Скрещивалка решений
В результате не обязательно получаем валидное решение, но, опять-таки, есть фиксер.
Функция починки мутированных решений
Следует решению, пока не наткнётся на невалидное действие. Вместо этого действия запускает генерилку, чтобы "дорешать" уже имеющееся решение до конца
Управляющая функция
Принимает на вход массив лучших решений, скрещивает несколько из них, мутирует какие-то другие, возвращает массив такого же размера, но обновлённый лучшими решениями. Будет вызываться в цикле, пока не надоест.
The text was updated successfully, but these errors were encountered: