Chat:Ru/2021-02-09

From CG community
Jump to navigation Jump to search

MadKnight: типа что-то поинтереснее не прикручивается к apache

MadKnight: я чё, написал "с начальником" ?)

MadKnight: ужс

MadKnight: не с моим начальником

MadKnight: и просто тимлид

MadKnight: неважно

MadKnight: Automaton2000 забудь

Automaton2000: ты в цикле делаешь проверки условий, генерируешь строку для вывода и выводишь? а кто координаты Тора обновлять будет? в плеере ...

MadKnight: как вообще огромные проекты переносят со старых технологий на новые?

MadKnight: чтобы не всё разом, а чтобы постепенно и безболезненно

magaiti: инкапсулируют

MadKnight: что в кого

magaiti: и переписывают по частям

magaiti: части проекта

magaiti: в максимально независимые компоненты

MadKnight: а если это хтмл пхп и апач?

MadKnight: у всяких модных жс фреймворков же у всех свои сервера

MadKnight: которые идут вместо апача

MadKnight: magaiti

depthzer0: amurushkin тоже в этом направлении пока двигаюсь

depthzer0: Uljahn не очень владею терминологией. Когда говорят эвристики - это что имеют в виду? От балды?

depthzer0: MadKnight ну конечно на питон переезжайте

мамонта едят по частям, надо выделить часть функционала огромного проекта и реализовать его в новом, и так много раз

Uljahn: depthzer0: да, условия на основе интуиции, куча if'ов

depthzer0: amurushkin "у топов были симуляции" - тоже не очень понимаю. Симуляции - это значит они у себя сделали такие движки локально?

Uljahn: кнш, тут физики нет, только коллизии, да и то простые

depthzer0: ну да.... но что им эта симуляция даёт?

я могу сделать симуляцию и на ней те же ифы потом заюзать

depthzer0: или что?

YurkovAS: симуляция значит - что в боте можешь сделать любой их доступных ходов и потом посмотреть что будет

Uljahn: можно перебрать варианты хода и как-то оценить их

depthzer0: а.... в том смысле, что они сделали не только или столько локально симуляцию, сколько в голову ботам, чтобы они могли просчитывать

YurkovAS: например сделать перебор всех доступных ходов на текущем первом уровне и потом добавить их оценку по получаемому состоянию игры

YurkovAS: и выбрать лучшй ход

depthzer0: понятно

depthzer0: спс

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

Uljahn: это уже уровень леги

YurkovAS: и т.п. и получится минимакс

depthzer0: :thumbsup:

Uljahn: для начала надо научиться королевой уклоняться от врагов, а постройки можно захардкодить

YurkovAS: Uljahn можешь подсказать по минимаксам?

Uljahn: я видел вопрос про transposition tables

Uljahn: думаю, они эффективны в играх, где стейты часто повторяются

Uljahn: типа шахмат

miklla: типа dots and boxes :)

YurkovAS: а нам же еще надо делать iterative deeping?

Uljahn: угу, чтобы не таймиться

miklla: там только есть один подводный камень

YurkovAS: т.е. завести цикл с какой глубины и для каждой потом запускать миник?

miklla: не забудь, что во многих играх кешированная позиция могла быть достигнута на другой глубине, чем ты сейчас, иногда это всё ломает и надо быть аккуратным

YurkovAS: например с глубины 2, потом 3, потом 4 - но случится таймаут, тогда для 4 результат не берем?

Uljahn: если не успели глубину досчитать, то берём с предыдущей

YurkovAS: зачем нужена эта table? там делаю хеширование состояния и для него хранят что-то? типа какой там скор

Uljahn: чтобы заново не оценивать, наверное

YurkovAS: и для этого deeping оно типа дает прирост, т.к. до этого считали?

YurkovAS: и при следующем тике игры, мы же опять будет одно и тоже считать

YurkovAS: так же или нет? не пойму

miklla: можно и последнюю глубину использовать, например с предпоследней глубины первые ходы были упорядочены по оценке №1, №2, №3, .., а ты насчитал в последней глубине и оказалось, что №2 круче номер №1, а в №3 таймаут, тогда лучше выдать ход №2

Uljahn: вот про упорядочивание важная тема

Uljahn: вроде бы, оно как раз даёт прирост в альфа-бете

YurkovAS: получается при упорядочивании использовать именно TT, а не свое? это тоже не понял, сделал свое упорядочивание

YurkovAS: и еще вопрос, как его вообще запускать? вот пример, PVS and Aspiration https://www.chessprogramming.org/Principal_Variation_Search

YurkovAS: Call from root:

  rootscore = PVS(-infinite, infinite, depthleft);

miklla: ты сначала минимакс пойми, потом альфу-бету, а потом можешь и глядеть на нулевое окно из ссылки

YurkovAS: но нам же это не подходит, т.к. возвращают оценку а неход

YurkovAS: miklla а как запускать, сделать аналогичную фукцию, но чтобы возвращала Move вместо int?

miklla: я просто score храню в позиции, а не отдельно

miklla: тогда после обсчёта можно по детям просто пройтись

YurkovAS: не понял

miklla: ну границу score

YurkovAS: не понял где храниш

Uljahn: в стейте?

miklla: а там, можно сделать так, чтобы функция возвращала 2 объекта, score и указатель на лучший ход

miklla: ну ща точно проверю свой тарый ход

miklla: старый

YurkovAS: получается сделал копию функции только для первого хода и она возвращает Move вместо int ни где в примерах этого не встречал

Uljahn: можно применить ходы к руту и из них запускать обычную функцию, получить инты и выбрать лучший ход, то же самое почти

Uljahn: из них - из полученных стейтов

miklla: в одной своей реализации я вижу, что функция всегда гарантировала, что в списке детей лучший ребёнок - первый

miklla: ща вторую гляну

YurkovAS: Uljahn понял, ну значит это правильно делаю - все по аналогии с основным алгоритмом, только результат в другом виде

miklla: да, во второй то же самое

YurkovAS: miklla это про сортировку же?

miklla: не надо к детям рута применять, это ухудшает всё

miklla: во второй реализации я натурально сортировал, так как детей всегда было не больше 4, а в первой просто гарантировал, что первый - лучший

miklla: там было много дете

miklla: й

YurkovAS: т.е. у тебя нет этих TT, а сортировал по своей оценке "вручную устанавливал"?

miklla: есть

miklla: не понял, чем ТТ мешают сортировке

miklla: просто указатели на детей хранятся в каком-то порядке

YurkovAS: да я не понял что за ТТ, просто. запрогал игру, а бот очень плохо играет. баги все пофиксил

Uljahn: а как ты гарантировал? очередь с приоритетом или типа того?

miklla: топорно, когда находился новый лучший ход, я свапал первый и второй, а потом лучший с новым первым

miklla: можно было изящнее, конечно

Uljahn: хм, логично

YurkovAS: т.е. у тебя есть массив лучших ходов?

miklla: так получалось, что первый точно лучший, а второй неплохой, наверняка можно было ещё лучше сделать упорядочивание

miklla: нет у меня массива лучших ходов

miklla: есть массив/список детей

miklla: у каждой позиции

miklla: и он как-то упорядочен

miklla: точнее массив/список указателей на детей

miklla: когда в ТТ находится такая же позиция, я просто вставляю указатель из неё

miklla: в список детей

YurkovAS: в общем, потом нашел противника, у него вроде тоже миник на такую же глубину, но играет гораздо лучше - значит проблема еще в оценочной. наверное правильнее ее сначала пофиксить, а потом уже ТТ и прочее смотреть - т.к. они помогают глубже смотреть

miklla: сначала просто минимакс делай с норм оценочной, а только потом можно приступать к изучению всяких альфа-бет, если с ними не имел дел

YurkovAS: понял, спасибо. я только минимакс понимаю - т.к. это полный перебор альфа-бету уже нет

Uljahn: альфа-бета - это оптимизированный полный перебор

Uljahn: результат точно такой же, что и у полного, но заведомо плохие ветки обрезаются

YurkovAS: а этот iterative deeping - правильно же юзаю? цикл по макс глубинам, и результат берем только от отработавшей без таймлимитов?

Uljahn: miklla говорил же, что если у тебя ходы упорядочены, то высока вероятность, что найденный первый потомок на незаконченной глубине будет лучшим, если это гарантируется алгоритмом :thinking:

miklla: а если не упорядочены, то да

miklla: но для альфа-беты будет полезно упорядочивать потом

Uljahn: угу

Uljahn: спс, кое-что тоже прояснилось

YurkovAS: Uljahn ну хорошо что ты понял, подскажешь потом, если что...

tutubalin: Uljahn читак! задачу недели через eval решил

Uljahn: я знаю, что eval зло, но это же просто пазл

tutubalin: с этого всё и начинается )

Uljahn: что начинается? я ж не кодер, с продакшном и юзер инпутами дел не имею )

Uljahn: но вообще да, надо было коммент написать, что это плохая практика

tutubalin: да не, решение прикольное :)

tutubalin: просто читерское )

Uljahn: мне в комментах писали, что scipy импортировать - тоже чит

Uljahn: может надо было сразу на С писать

Uljahn: только я питон не для того выбрал, чтобы игнорить батарейки, а наоборот как раз

tutubalin: я ж по-дружески потроллил просто

735487: я какой то пазл на джаве решал и в ней вызывал интерпретатор javascript или что то такое кажется. через жопу но работало и не надо было самому парсить :) там что то типа калькулятора было

magaiti: первый компилятор лиспа был написан на интерпретаторе лиспа

magaiti: и потом откомпилирован а самом себе

MadKnight: ну почему бы и нет

MadKnight: компилятор - этож просто генератор бинаря

magaiti: сделал ваш пазл недели

magaiti: такая мутотень на плюсах

magaiti: 68 строк :sweat_smile:

depthzer0: прочитал сначала "символов"...

magaiti: хорошо что не файлов

depthzer0: :scream:

YurkovAS: тут пазлы сложнее, чем мульти. это про резисторы? надо попытаться решить, врода даже знаю каким алгоритмом

Uljahn: мой "читерский" "алгоритм": заменить скобки на имена соответствующих функций, подставить инпут и вычислить строку через eval :)

magaiti: однопроходный парсер с рекурсивным аккумулятором

MadKnight: у меня кстати мода забрали

MadKnight: ну бывает

MadKnight: зато теперь всех спамить в лс могу

magaiti: ты слишком мэд

magaiti: вот и забрали

MadKnight: да ваще

MadKnight: а, он пишет я просто слишком долго отсутствовал когда систему прав мода переделывали

MadKnight: туда всех заново надо было добавить

magaiti: https://www.codingame.com/replay/525296510

magaiti: явно баг, раннер застрял на границе чекпоинта

magaiti: может пофиксить, глядишь заимпрувлю

MadKnight: может

MadKnight: я вон вообще 595 радиус чека сделал

magaiti: хмм, да у меня тоже так, но что-то не срабатывает

MadKnight: значит у тебя уже серьёзный баг

MadKnight: интересно какой

MadKnight: magaiti го тебя тоже модом сделаем

magaiti: нее

MadKnight: почему?)

magaiti: зачем мне лишняя ответственность

MadKnight: да ты впишешься

magaiti: я не хочу вписываться в сомнительные мероприятия

MadKnight: Uljahn вписался вон

MadKnight: и ему норм

Uljahn: я не вписывался

Uljahn: меня вписали

MadKnight: ужас

Uljahn: мало того, что ответственность, так ещё и дёргаться приходится постоянно

Uljahn: и платят мало

MadKnight: а сколько?)

magaiti: вам еще и платят?

MadKnight: ну выпишись

magaiti: по 10 копеек за бан?

Uljahn: за спасибо работаем :(

magaiti: спасибо хоть вовремя выплачивают? аванс, получка

Uljahn: пока ещё ни разу не получал

depthzer0: странно что баны не оплачивают.... это же стресс всё-таки.

могли бы полсотни евро накидывать

Uljahn: есть пара плюсов - доступ на модерский канал в дискорде и в админку форума, статистику зырить

Uljahn: после кика или бана могут начать в личку спамить, в чатике защиты от этого нет :(

depthzer0: вот и я о том

depthzer0: а так бы 50 евриков душу согрели

depthzer0: он тебя матами перематами, а ты ему фоточку полтосика ))

magaiti: хмм, а откуда у меня в истории кода гоночек код за 11 дней назад, я вроде 4 месяца не ресабмитил

YurkovAS: ты точно сабмитил, смитс был на твоем месте, до твоего сабмита

YurkovAS: у меня радиус чекпоинта 598. помню что с другими значениями было только хуже

magaiti: сабмитил смитс

magaiti: а я поигрался с параметрами в иде и забил

YurkovAS: тестирюу обычно в брутал тестере локально или в cg-bench

YurkovAS: и тоже как у тебя - если блокер уезжает далеко, то мой раннер останавливается перед чекпоинтом своим

YurkovAS: блокер противника

YurkovAS: в гонки не играют, т.к. 110к участников и за любое место в топ300 получишь свои 4.9к cp

magaiti: думаю это косяк оценочной, раннер предпочитает крутиться относительно блокера врага, вместо того чтоб ползти на чекпоинт

YurkovAS: глянул код гоночек и ни чего не понимаю, т.к. большая часть подобрана экспериментальным путем.

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

Uljahn: ну, это вообще классика, в контестах особенно

tutubalin: скоро юбилейный тысячный CoC

YurkovAS: обратную польскую запись получается для этого пазла недели не применить? т.к. > 2 операндов

tutubalin: можно применить

tutubalin: представь, что пробел - это плюс

tutubalin: но вообще так как по сути в выражении только скобки, обратная польская запись сильно упрощается и по сути вырождается в стек

tutubalin: решил задачу недели в стиле функционального программирования :)

AlexDemeo: В задачке https://www.codingame.com/ide/puzzle/ascii-art баг или я туплю? Пример вывода: http://chat.codingame.com/pastebin/54fabbbe-8fe2-4047-a94a-0b532aeb12d2

AlexDemeo: Нашел

tutubalin: переносы строк или пробелы