Open ViktorcArmius opened 3 years ago
Если я правильно понимаю значение слова "пустая", то TL вполне закономерный. Сервер ждёт что программа пришлёт ответ в виде словаря действий, в итоге ничего не получает и выбрасывает TL.
пустая в том смысле что она сразу по вызову отвечает пустое действие
@staticmethod
def read_from(stream):
id = stream.read_int()
if stream.read_bool():
player_id = stream.read_int()
else:
player_id = None
entity_type = EntityType(stream.read_int())
position = Vec2Int.read_from(stream)
health = stream.read_int()
active = stream.read_bool()
Большую часть времени съедает чтение entity, некоторые писали что это из за игровых констант, но их там и на 150 байт не наберется, а entity все вместе занимают от 10к байт.
Что можно сделать? Я думаю лучше всего сделать константным размер entity, убрать bool наличия player_id, либо читать Int не зависимо от наличия player_id. Тогда можно будет прочитать весь буфер entity разом и преобразовать его в массив uint8 при помощи
uints = np.frombuffer(buffer, dtype=np.uint8)
далее извлекать
it += 1
uint = uints[it] + (uints[it+1] << 8) + (uints[it+2] << 16) + (uints[it+3] << 24)
Выглядит не очень, но других способов я не нашел, а этот дает ускорения примерно в 5 раз
Неистово плюсую. Берешь Python, не написал ни строчки кода, получаешь со старта дебаф -30-50% времени. Python и так не быстрый, а тут такое. Я бы просто для всех языков к кол-ву тиков накинул вот это вот время работы пустой стратегии. То есть C++ получит 20500 , а Python 30000 например.
Это было бы справедливо для всех ЯП, ИМХО.
PS То есть выбирая Python я понимаю, что мой код будет работать медленнее. Но сейчас замедление дает не мой код, и это крайне неприятно.
смотрим на игру https://russianaicup.ru/game/view/34159, на вывод меня (игрок cArmius)
`stdout:
stderr:
в чём подвох? в том, что это ПУСТАЯ стратегия. Она не делает ничего, кроме как принимает входные данные, и при этом занимает уже половину от всего доступного времени.
нужно что-то сделать с расчётом времени для стратегии, сейчас это режет потенциальное время стратегии до невыносимо малого значения