Chat:Ru/2021-03-10
magaiti: 80-й максимальный был только до Катаклизма
wlesavo: YurkovAS у тебя в A* онлайн решение?
wlesavo: сима вроде правильно работает, а поиск что-то улучшить особо не могу
YurkovAS: wlesavo онлайн
YurkovAS: эволюционный алгоритм
wlesavo: у меня тоже
wlesavo: отдельно учитываю границы и объем, но больше как-то ничего не придумал
wlesavo: сима финальный счет правильно определяет тоже
YurkovAS: уже забыл что там, читаю
YurkovAS: вообще, у топ6 чела SA, он не так давно делал, с эйлером еще обсуждал, у того тоже SA
YurkovAS: но я не смог, лучшее с ЕА только
wlesavo: ну эволюция от sa не сильно отличается, не в 3 раза уж точно
wlesavo: ну там видимо какие-то детали важные которые я упускаю
YurkovAS: у меня почему-то разбито на 2 части, одна работает 200мс и делает по 5 мутаций
YurkovAS: а вторая часть работает остальное време, но делает больше мутаций
YurkovAS: там еще какая-то магия связанная с кол-во соседних клеток. не пойму
wlesavo: ну я тоже чето магичу с количеством соседних
wlesavo: типа если 4 соседних то там меньше вероятности того что нужна стрелка
YurkovAS: а скор похоже как в игре
wlesavo: с лимитом 100 мс и секундой скор оч слабо отличчается, хм
wlesavo: видимо это проблема эволюции как раз, он куда то в локальный минимум попадает и не может выбраться
wlesavo: для такой игры вполне возможно
tutubalin: в жизни для этой цели есть вулканы и метеориты
YurkovAS: что-то не помнимаю гралей
YurkovAS: в общем, у топов тех на карте Round the Clock набирает под 1к и я локально ее долго оптимизировал, позапускал, у меня 850 набирает
YurkovAS: вот их реплеи https://www.codingame.com/replay/497423964 https://www.codingame.com/replay/497425796
wlesavo: YurkovAS о, спс
YurkovAS: в общем у меня, что-то такое: есть массив доступных клеток, там не все, а куда можно ходить
wlesavo: а сколько роллаутов на Round the Clock?
YurkovAS: 730к роллаутов.
wlesavo: эх, у меня в 7 раз меньше, еще и в этом дело может быть
YurkovAS: а ну это тоже может повлиять
wlesavo: ну не в 7 даже, 150к получается
YurkovAS: а в том массие доступных точек для ходов отсекаются тунели, чтобы в них на середине не поворачивал назад
wlesavo: раз в 5, но один фиг
YurkovAS: bitset<190> robotVisits[4]; ого
wlesavo: YurkovAS ну у меня что-то такое тоже есть вроде
wlesavo: у меня bitset<190*4> :slight_smile:
YurkovAS: а сама карата это массив uint8, а не пара х, y
wlesavo: ну тоже самое, надо посмотреть че там у меня узкое такое
YurkovAS: в общем я эту карту взял и начал локально пытаться улучшить: ускорял или экспериментировал с кол-вом мутаций и т.п.
wlesavo: ладно, спасибо, если не забью тоже наверное что-то такое попробую
YurkovAS: о, еще странное, запускаем по 5 мутаций, но меняем стрелку в 50% случаев
MadKnight: да лучше MCTS какой-нить
MadKnight: заточенный под массив юнитов
wlesavo: хм, за 5кк роллаутов 39 улучшений, точно что-то не так пошло
MadKnight: это начиная с рандомных солюшенов?
wlesavo: с нулевого решения случайными улучшениями
MadKnight: а, так вы уже про Round the Clock
MadKnight: wlesavo скинь ссыль на игру
wlesavo: MadKnight не, это тескейс в A* просто
MadKnight: а чё у тебя за алгоритм-то там?
MadKnight: GA ?
MadKnight: а что ты там роллаутами называешь?
MadKnight: может у тебя в поколении 10 000 решений?
YurkovAS: там ты же берешь одно или два из них, скрещиваешь и мутируешь
YurkovAS: вот кол-во итераций этого цикла и называет роллаутами
MadKnight: этож целое поколение прогоняется
MadKnight: у него 5кк поколений?)
MadKnight: они же много времени юзают
wlesavo: не, у меня там недо SA, роллаут это просто одна полная симуляция игры
MadKnight: а
MadKnight: wlesavo просто когда ты мутируешь ход в середине - все хорошие ходы после него превращаются в trash
YurkovAS: ну тогда просто мало очков наберет такое
MadKnight: ну так само собой
MadKnight: ты обрезал целый кусок своего хорошего солюшена
YurkovAS: так его пытаемся улучшить, а не ухудшить. т.е. плохие решения будут игнорироваться
MadKnight: так а как его улучшить мутацией, если изменение хода полностью ломает всю часть решения, идущую после этого хода?
MadKnight: этож не гоночки где мутировать можно на 0.1
YurkovAS: может оно иногда и улучшает?
MadKnight: ну вот видишь? 39 раз зарандомило улучшения за 5кк попыток
YurkovAS: да это он сломал что-то
YurkovAS: так оно и работает, рандомно подставляет ходы и прогоняет. решение постепенно улучшается.
MadKnight: так чтобы улучшить - ему нужно заменить ещё и все ходы после тех, которые он заменил
YurkovAS: не нужно
MadKnight: например если он заменил 2й ход - ему нужно заменить все ходы после него
YurkovAS: ну может быть и так
MadKnight: потому что все ходы после 2го заточены под именно такой 2й ход
YurkovAS: там не так уж и заточены
MadKnight: значит улучшения идут в основном от замены последнего или предпоследнего ходов
MadKnight: а это лишь пара улучшений
MadKnight: всмысле не так уж и заточены ты чё
MadKnight: они конкретно заточены
MadKnight: абсолютно
MadKnight: это совершенно новая стратегия - другой шаг во 2й ход
YurkovAS: так это же можно проверить
MadKnight: но какой смысл когда и так понятно?
MadKnight: весь твой путь ломается
YurkovAS: а вдруг нет, как их менять?
YurkovAS: тоже каждый рандомно
YurkovAS: а если не поменялся хоть один, тогда остальные не меняем
YurkovAS: ну надо проверить, вдруг будет заметный прирост
MadKnight: да SA вообще сам по себе не заточен под такие точные игры
MadKnight: он больше под физику или подбор независимых float параметров заточен
MadKnight: где можно на 0.1 менять
YurkovAS: ну вот здесь типа у всех СА. в туриста точно
MadKnight: ужс
YurkovAS: в ПМ-ах читал, врятли он это исправлял
MadKnight: а хотя чё это за игра - турист
MadKnight: ?
YurkovAS: турист это пользователь
MadKnight: а
MadKnight: так у него просто мутаций много
MadKnight: они часто рандомят много изменений после самого раннего изменённого
MadKnight: с таким успехом можно было сделать чистейший RNG полных солюшенов
YurkovAS: ну надо проверить твое решение, согласен
MadKnight: первую половину времени например
MadKnight: а потом юзать эти решения в SA чтобы они концовку получше выбрали
MadKnight: просто каждый твой ход должен быть именно под какой-то определённый план действий
MadKnight: и если хоть 1 ход неправильный - то ничего не работает вообще
MadKnight: тут нету escalate
MadKnight: тут есть
MadKnight: 0 0 0 0 0 0 0 10000 0 0 0 0 3 0 0 0 67
MadKnight: эт я нарисовал график
MadKnight: а SA основан на escalate особенности графика
MadKnight: зДАНТрова
MadKnight: чёч
lDantl: я сразу оговорюсь я новичок от слова "совсем"б так что кому вопрос покажется глупым :)
lDantl: делаю задачку с температурами
lDantl: вроде все тесты прохожуб за исключением одного
MadKnight: там где 0 ?
lDantl: там где все значения отрицательные
MadKnight: так пофикси свои условия
MadKnight: ты их перемудрил
MadKnight: делается в 1 простой иф
lDantl: как показать здесь код?
MadKnight: просто попытайся упростить условия
MadKnight: ты их перемудрил
MadKnight: всё делается проще
MadKnight: найди новый подход
MadKnight: а код можно просто сюда закинуть, он автоматически превратится в pastebin ссылку
lDantl: http://chat.codingame.com/pastebin/0da1f84b-81c6-4d2c-884d-5d0da9c952ea
lDantl: теперь с только отрицательными нормб но проблема с числами равными по модулю :)
MadKnight:
if (A[i] < min)
lDantl: выдает отрицательноеб а должно положительное
MadKnight: так отрицательные всегда меньше
MadKnight: чем min по модулю
MadKnight: ты чё
MadKnight: -5000 меньше чем -3
lDantl: как отправить на вывод модуль отрицательного числа
MadKnight: так тебе надо само число
lDantl: допустим масив 5 -5 6 9 4
MadKnight: зачем модуль на вывод?
MadKnight: ты условие не дочитал
MadKnight: в условии сказано
MadKnight: что если есть х и -х то выводить надо х
magaiti: так сделай новую переменную, присвой ей модуль нужного числа, и выводи ее
tutubalin: выводить надо не модуль же, а само число
magaiti: ну там код такой, что запоминает число, а потом проверяет, нет ли такого же но положительного, или что-то в этом роде
magaiti: и если есть, то выводит модуль отрицательного
magaiti: то есть запомненного
tutubalin: можно ж проще
magaiti: можно
magaiti: но вопрос был - как вывести модуль числа в си
magaiti: хотя я туплю, да
magaiti: число по значению передается
tutubalin: когда сравниваешь с минимумом: если новое число по модулю меньше минимума, минимум равен новому числу. если новое число РАВНО по модулю минимуму, то присвоить в минимум только если оно положительное
magaiti: можно просто printf("%d", -x) написать
magaiti: зачем ты рассказыаешь решение задачи?
magaiti: человек может сам хотел сделать