LINUX.ORG.RU
ФорумTalks

Задача. Игра 2048. Слепой метод

 ,


0

1

Имеется желание разработать наиболее выигрышную стратегию для игры 2048 (если не знаете, то можете сыграть тут: http://game2048.ru/) при слепой игре.
Т.е. у игрока нет никакой возможности анализировать состояние плиток. Представьте что в игру играет слепой негр в тёмной комнате.
На данный момент метод последовательного нажимания право-вниз-лево-вверх даёт почти 100% появление плитки номиналом 128 и где-то 60% — 256.
Очень хотелось бы довести этот показатель до 1024.
Есть какие-то умные идеи?

★★☆
Ответ на: комментарий от Siado

После 100500 прогонов человек смотрит на «итого».
Сейчас самый офигенный вариант это «право-лево-низ"х30+„вверх-низ“.
Суть — максимальная сумма по итогам многих игр.
Этот вариант иногда доходит до 512.
128 бывает в 95% случаев.
P.S. Вариант < 128 это полный провал.
Алгоритм обязан делать 128 всегда. Иначе это навоз с опилками, а не алгоритм.

P.P.S. Кстати пишется слитно.

Stahl ★★☆
() автор топика
Последнее исправление: Stahl (всего исправлений: 1)
Ответ на: комментарий от Stahl

Алгоритм обязан делать 128 всегда. Иначе это навоз с опилками, а не алгоритм.

Алгоритм работающий как генератор случайных чисел - это генератор случайных чисел.

Не более того.

Serg_HIS
()
Ответ на: комментарий от Stahl

Никто не говорит что этот алгоритм не выдаст значение 2048.

Вопрос в том, что нужно получить на выходе?

Эффективность или вероятность получения 2048 за обозримое число лет?

Serg_HIS
()
Ответ на: комментарий от Serg_HIS

Эффективность или вероятность получения 2048

Почему ИЛИ? Эффективность я и оцениваю по вероятности возникновения больших чисел.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Siado

К стати. А как в слепую понять победил или проиграл? =)

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

lolset
()
Ответ на: комментарий от Stahl

Есть такая штука - белый шум.

Обычно, генераторы случайных чисел, дают последовательность близкую к белому шуму.

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

Забавно, что и сами компрессоры тоже дают последовательность близкую к белому шуму.

Поигравшись дни, недели, месяцы (некоторые и годы), почитав несколько книжек по математике, физике и алгоритмам, обычно в 99% случаев, люди приходят к выводу, что белый шум нельзя скомпрессировать (в универсальном случае), про везение речи не идёт, если например один из миллиардов вдруг случится, что небольшие куски шума будут совпадать с генератором шума компрессора например.

Вот тема про это http://forum.ixbt.com/topic.cgi?id=40:515 Сбасибо Володе Рыбинкину или Рябинкину (он так и не расколося как на самом деле :) ), поразвлекал нас на славу!

В общем виде твой подход к задаче выглядит так:

Ты хочешь наложить на чей-то генератор шума свой генератор шума, который выдаст не шум а точно и определённо 2048 с вероятностью очень далёкой от нуля и достаточно сильно приближенной к единице. в твоём случае, достаточно сильно - это наверное примерно 0,000001.

А теперь сядь, выпей пива и подумай.

Могу дать подсказку.

Твой подход досстаточно часто будет срабатывать с полями более 4х4 например 8х8 наверное таки уже будет случаться в обозримом будущем. так как для игры на таком поле, 2048 - это рядовое промежуточное значение, в то время как для 4х4 это одно из крайних значений, второе ещё гараздо менее вероятное 4096 (не факт а предположение), я его сам чуть не набрал, но забил пытаться, так как оно не стоит столько потраченного времени.

Serg_HIS
()
Ответ на: комментарий от Serg_HIS

И? Почитай тред — кто-то уже приводил статистику по различным слепым методам. И статистика разная.
И каким боком тут белый шум и прочие генераторы шума?
Масштабов для случайностей тут не так уж много.
А мой алгоритм и вовсе предопределён.
И кстати вариант со случайным выбором направления смещения даёт наихудший результат.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Почитай тред — кто-то уже приводил статистику по различным слепым методам. И статистика разная.

И что? Кто-то уже собрал 2048 слепым методом?

И кстати вариант со случайным выбором направления смещения даёт наихудший результат.

У тебя есть возможность не случайного выбора? Лукавишь однако!

То что по возможности (никогда) нельзя двигать в одном из них (удобном для угла зрения игрока), мне напимер вверх, направлени, это факт. Только в случае когда случается «попа» и нет больше куда двигать (и это только на твой страх и риск, в большинстве случаев игра накрывается... сам знаешь то слово, которое здесь писать нельзя).

Именно в этом и заключается главная стратегия игры.

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

В слепую хрен тебе такое получиться.

Serg_HIS
()
Ответ на: комментарий от Serg_HIS

Кто-то уже собрал 2048 слепым методом?

А кто-то ставил такую задачу? Задача — собирать плитки большого номинала с большой вероятностью.

В слепую хрен тебе такое получиться.

А оно, блин, получается. Удивительно, да?

и нет больше куда двигать

Вот поэтому я иногда делаю движение вверх-вниз. Всё просто.

Stahl ★★☆
() автор топика
Ответ на: комментарий от lolset

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

Думаю тут проблема в лени ТС.

Там то и распознавать как два байта переслать.

Все числа (притом только числа) находятся в ожидаемых местах, всегда одним шрифтом и нет никаких шумовых помех для чтения.

Уверен что ТС хочет написать алгоритм на «пару» строчек типа:

int whatCanIDo = (rand()/(RAND_MAX/100))

while(1){

if (whatCanIDo == 0) {moveUp()};

if (whatCanIDo > 0 && whatCanIDo < 33) {moveRight()};

if (whatCanIDo > 33 && whatCanIDo <66) {moveLeft()};

if (whatCanIDo > 66 && whatCanIDo <99) {moveDown()};

if (whatCanIDo == 33) {drinkBeer()};

if (whatCanIDo == 66) {smoke()};

if (whatCanIDo == 100) {drinkBeer(); smoke()};

}

Надеюсь ТСу понравится мой вариант алгоритма для слепой игры :)

Serg_HIS
()
Ответ на: комментарий от Stahl

А оно, блин, получается. Удивительно, да?

Не получается у тебя 2048, не загоняйся.

Я тебе открою большую тайну!

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

Удивительно, да?

Serg_HIS
()
Ответ на: комментарий от Stahl

А 512 получается.

Молодец, можешь пойти купить себе пива и сигарет.

Serg_HIS
()
Ответ на: комментарий от Stahl

А 512 получается.

А ещё у тебя получается:

4,8,16,32,64,128 и 256

Я угадал? ;)

Serg_HIS
()
Ответ на: комментарий от Stahl

Я так понимаю, что ты статистику не ведёшь.

Давай подскажу как это делается для случая с этой игрой и твоим методом.

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

Самый простой вариант в твоём случае - это подсчитывать количество проигрышей с каждым из номинавл максимальным в этой игре.

Составлять графики надесь ты умеешь.

Выведи экспоненциальный закон по этим даным, затарся пивом и сигаретами и с грустью смотри как далеко в космос уходит кривая идущая к 2048 (а может даже и к 1024);

Serg_HIS
()
Ответ на: комментарий от Stahl

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

Serg_HIS
()
Ответ на: комментарий от Stahl

К стати да...

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

вобщем если начинать со средненго положения то у меня в последовательности (низ, право, низ, лево, низ, право, низ, лево, ...) получилось очень отчетливо собирать 512 примерно раз из пяти.

Потратил на изобретение и сбор статистики примерно минут 10. провел игр 10.

Serg_HIS
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.