Chat:Ru/2021-03-10

From CG community
Jump to navigation Jump to search

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 особенности графика

Default avatar.png lDantl: здарова всем

MadKnight: зДАНТрова

Default avatar.png lDantl: народб нужна помощь

MadKnight: чёч

Default avatar.png lDantl: я сразу оговорюсь я новичок от слова "совсем"б так что кому вопрос покажется глупым :)

Default avatar.png lDantl: делаю задачку с температурами

Default avatar.png lDantl: на си

Default avatar.png lDantl: вроде все тесты прохожуб за исключением одного

MadKnight: там где 0 ?

Default avatar.png lDantl: там где все значения отрицательные

MadKnight: так пофикси свои условия

MadKnight: ты их перемудрил

MadKnight: делается в 1 простой иф

Default avatar.png lDantl: как показать здесь код?

MadKnight: просто попытайся упростить условия

MadKnight: ты их перемудрил

MadKnight: всё делается проще

MadKnight: найди новый подход

MadKnight: а код можно просто сюда закинуть, он автоматически превратится в pastebin ссылку

Default avatar.png lDantl: http://chat.codingame.com/pastebin/0da1f84b-81c6-4d2c-884d-5d0da9c952ea

Default avatar.png lDantl: теперь с только отрицательными нормб но проблема с числами равными по модулю :)

MadKnight:

       if (A[i] < min)

Default avatar.png lDantl: выдает отрицательноеб а должно положительное

MadKnight: так отрицательные всегда меньше

MadKnight: чем min по модулю

MadKnight: ты чё

MadKnight: -5000 меньше чем -3

Default avatar.png lDantl: это понятно

Default avatar.png lDantl: как отправить на вывод модуль отрицательного числа

MadKnight: так тебе надо само число

Default avatar.png 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: человек может сам хотел сделать