Войти
ФлеймФорумПрограммирование

Russian AI Cup 2018: CodeBall 3D (3 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 4 58 Следующая »
#30
16:35, 23 дек. 2018

Adler
я только приступил к симулятору. до этого ифами развлекался)
учитывая свои знания плюсов и кол-во активных занятий, не факт что успею, но постараюсь)


#31
(Правка: 25 дек. 2018, 2:52) 3:56, 24 дек. 2018

PlusMinus
> до этого ифами развлекался)
у меня начиная со седьмой версии и где-то до 21 версии используется симулятор и все они играют вообще отстойно(особенно вратарь фиговый), поэтому пришлось сделать вратаря на ифах, а потом даже отправить его копию бегать по полю за мячом:

+ сейчас эта заглушка тратящая 3μs/frame забралась слишком высоко(за 4 волны)

т.к я насчитал где-то около 30 стратегий против которых эта фигня не работает.

upd: вчера раздумывал соединить вратаря(на if`ах) с нападающим(который использует симулятор) - но вовремя одумался, ещё бы чуть-чуть и потратил бы зря ещё кучу времени.

#32
20:16, 24 дек. 2018

Adler
> нашёл этот баг/опечатку.
там еще у переменных имена совпадают:

let o = o + normalize(v) * (arena.goal_top_radius + arena.goal_side_radius)
из-за использования в выражении не того "o" у меня телепортация робота была.

Что-то тяжело в этом году идет, до сих пор идей нет, как адекватно написать перебор ходов для симулятора.

#33
(Правка: 23:57) 20:19, 24 дек. 2018

Adler
> вчера раздумывал соединить вратаря(на if`ах) с нападающим(который использует
> симулятор)

А я наоборот, думаю код должен быть общим, только область поля контролируемая вратарем не вся карта, а только то, что у ворот. Вот только еще придумать, как сделать так, чтоб роботы друг другу не мешались, постоянно прыгают в одну точку, сталкиваются, и получается белиберда.

    // Ground
    ...
    // Ceiling
    ...

    // Optimization
    if (point.x < 24 && point.z < 34 && point.y < 13)
        return dan;

    ...

У кого лучше?

#34
(Правка: 16:57) 16:56, 26 дек. 2018

ud1
> У кого лучше?
сначала вытянутой сферой отсечь всю центральную область.
потом выкинуть/заменить/специализировать dan_to_plane на свою шаблонную функцию которая принимает ось как параметр шаблона.
возвращать не нормализованный вектор вместо нормали, а потом снаружи нормализовать если надо.
встроить dan_to_arena внутрь collide_with_arena, тем самым выкинув как минимум один dot, когда нормаль совпадает с какой-то осью.

#35
4:28, 29 дек. 2018

ребят какая-то ошибка, почему-то симмуляция считает что может прыгнуть до потолка

+ Показать

#36
19:31, 29 дек. 2018

}:+()___ [Smile]
Ты где? Уже пора включаться.

#37
3:58, 30 дек. 2018

ud1
> Ты где? Уже пора включаться.
Первая версия уже почти готова.
Осталось написать простенькое позиционирование незадействованных футболистов и реализовать пару проверок.

Но как же я задолбался писать точное управление.
Код для применения скорости настолько кривой и полон приколов, которые приходится учитывать.
Например, нельзя задать постоянное ускорение, меньшее максимального. Из-за этого сложно делать плавное управление.
Если конечная скорость тика меньше предела достижимости, то средняя скорость за тик будет кусочно линейной аппроксимацией параболы.
Для гравитации они реализовали схему 2-го порядка, а для управления поленились. Из-за этого приходится делать сдвиги на пол микротика.
Прыжок происходит спустя один микротик и еще микротик после этого робот считается прилипшим к полу, из-за чего скорость прыжка уменьшается.
С ностальгией вспоминаю постоянное ускорение + экспоненциальное затухание скорости из танков.

#38
13:46, 31 дек. 2018

}:+()___ [Smile]
за неделю написал плавное, почти оптимальное управление прихода в нужную точку с нужной скоростью (движение по окружностям + отрезок между ними по касательным)
а потом понял, что я решил физическую задачу для непрерывного случая =(
пришлось переделывать на простую модель, но всё равно работаю с ускорениями а не скоростями. потом приходится перерасчитывать скорость

прыжок считаю по физике, но с "эмпирическими константами" которые правят эти их дурные прыжки за счёт расширения шарика.

#39
18:15, 31 дек. 2018

cArmius
> а потом понял, что я решил физическую задачу для непрерывного случая =(
Две окружности и касательная будут оптимальными и для дискретного случая (в более общем случае туда добавятся еще и куски цепной линии, которая дискретно не представима).
Вот только с переходными отрезками будут проблемы: из-за невозможности рулить напрямую ускорением средняя скорость на переходном отрезке очень извращенно зависит от скоростей на концах.
Но как только понимаешь, что реальная задача не "добраться как можно быстрее", а быть точно к моменту T, то все эти наибыстрейшие траектории идут лесом.
В итоге, у меня перемещение к нужной точке занимает 6 (!) отрезков с постоянным максимальным ускорением и еще один отрезок с нулевым.

> прыжок считаю по физике, но с "эмпирическими константами" которые правят эти их дурные прыжки за счёт расширения шарика.
У меня прыжок получилось сделать точно, без всякой подгонки. Надо было только честно учесть все приколы.

#40
21:15, 31 дек. 2018

}:+()___ [Smile]
> Две окружности и касательная будут оптимальными и для дискретного случая (в
> более общем случае туда добавятся еще и куски цепной линии, которая дискретно
> не представима).
вроде бы оптимальнее будет не касательная, а что-то вроде параболы, но это не точно.
то есть прямая оптимальнее параболы, а вот совместная траектория - не очевидно

> В итоге, у меня перемещение к нужной точке занимает 6 (!) отрезков с постоянным
> максимальным ускорением и еще один отрезок с нулевым.
4 отрезка с максимальным ускорением и 2 с нулевым )
и вроде бы можно даже подоптимизировать до пяти отрезков, но нужно капитально засесть посчитать сколько времени это будет занимать, пока что оставляю так

> У меня прыжок получилось сделать точно, без всякой подгонки. Надо было только
> честно учесть все приколы.
один раз подобрал константы (как я потом понял - это как раз таки увеличение радиуса мяча и один микротик гравитации) - и потом расхождение с симуляцией в 13-м знаке, я думаю это не критично

да и в целом у меня без полноценной симуляции расхождение не большое. Сейчас нужно понять только почему роботы делают не то, что как мне кажется они должны делать )

#41
21:25, 31 дек. 2018

А закругления вы учитываете? Тоник явно видно, что учитывает.
И допустим найдете вы способ добираться до нужной точки, с нужной скоростью, но как понять, какая скорость нужная? С позицией вроде как из какого места бить, проще определиться, а скорость величина варьируемая. И от ее выбора будет еще зависеть траектория и время подхода к ней.

#42
(Правка: 21:41) 21:39, 31 дек. 2018

cArmius
> вроде бы оптимальнее будет не касательная, а что-то вроде параболы, но это не точно.
> то есть прямая оптимальнее параболы, а вот совместная траектория - не очевидно
Наибыстрейшая траектория в пространстве скоростей (непрерывный случай) выглядит так:
отрезок цепной линии, дуга окружности, стояние на месте, дуга окружности и финальный отрезок цепной линии.
Ну либо просто отрезок цепной линии, если времени не хватает достичь ограничения по скорости.

> 4 отрезка с максимальным ускорением и 2 с нулевым )
Это у тебя, что ли, большую часть времени скорость далека от средней?
В этом случае траектория будет слишком далеко отходить от целей, будет чаще цеплять края поля.

ud1
> А закругления вы учитываете?
Я пока нет. В планах есть, но когда дойдет до них...

> но как понять, какая скорость нужная?
Я начинаю с генераций желаемых траекторий мяча и потом пересчитываю в необходимую позицию удара.

#43
22:50, 31 дек. 2018

ud1
> А закругления вы учитываете?

я пока что сказал что у меня игровое поле - параллепипед. Для расчёта траекторий мяча в принципе достаточно, а вот построению траекторий немного мешает, но пока не очень ясно насколько

> И допустим найдете вы способ добираться до нужной точки, с нужной скоростью, но
> как понять, какая скорость нужная?
самое простое - реверсировать желаемый результат (мяч в воротах) до точки, в которой мяч сейчас и понять как нужно было ударить по мячу.

}:+()___ [Smile]
> Это у тебя, что ли, большую часть времени скорость далека от средней?
> В этом случае траектория будет слишком далеко отходить от целей, будет чаще
> цеплять края поля.

вроде как я стараюсь максимизировать время максимальной скорости. Возможно, из-за этого у меня часть хороших траекторий пропадает... хотя я говорю роботу "стой на месте, если ты добегаешь быстрее, чем мяч"..

#44
23:01, 31 дек. 2018

cArmius
> вроде как я стараюсь максимизировать время максимальной скорости.
На мой взгляд, надо наоборот: стараться держать скорость как можно меньше.
В этом случае траектория будет стремиться к прямой между стартом и финишем.
А у тебя она сначала будет срываться в одну (причем достаточно произвольную) сторону с максимальной скоростью, а потом обратно.

Страницы: 1 2 3 4 58 Следующая »
ФлеймФорумПрограммирование