Optimicé el JUEGO de ALVA MAJO
Optimicé el JUEGO de ALVA MAJO
Nuestra flipante cruzada por jugar al tres en raya da comienzo en este video...
Ya hablando en serio.
¿Tic-Tac-Toe? ¿Tres en Raya? Realmente no importa como le digas, todos sabemos que Alva Majo tiene una novela visual en desarrollo, su próximo juego y mi siguiente objetivo.
Por mas raro que suene, este video nació simplemente por que casualidad di con una curiosa formula intentando calcular algo hace tiempo.
No funciono, pero las estrellas se alinearon y aquí estamos, desmintiendo mitos y optimizando movimientos perfectos de 0.5s a 0.001s.
Y lo mejor de todo, con un poderoso sistema de minimax.
-----------------------------
- Twitter: / eterdelta
- GitHub: github.com/Ete...
- itch.io: eterdelta.itch...
----------------------------
Soy EterDelta, desarrollador indie de videojuegos, artista, y quien sabe cuantas cosas más... 🤔
Me dedico a subir contenido inútil a este canal. ¿Quieres perder el tiempo viendo devlogs raros y aprender sobre programación? Pues llegaste al lugar correcto.
-----------------------------
- ¡Si te ha gustado el video, recuerda dejar tu apoyo y seguirme en mis redes sociales, nos vemos!
-----------------------------
Music:
- "Rampage (Ephixa Remix)" by Dex Arson
• Dex Arson - Rampage ( ...
- "Ahead of the Curve" by Creo
• Creo - Ahead of the Curve
- "Round 3" by Dex Arson
• Dex Arson - Round 3
creativecommon...
Пікірлер: 132
¡Hola, veo en los comentarios muchas dudas sobre que Alva ignoro los movimientos que llevan el juego a estados inválidos! 👀 *Después de un breve análisis con él. ¡Hemos llegado a la forma de dar con su número usando la formula!* ¡Adjunto un Gist en Python donde pueden comprobar el resultado del video, el de él, y todo! - gist.github.com/EterDelta/f89ff53acba8eea2cf31707ddda1b65e
@CharlesLakes2001
Ай бұрын
Hola, la solución propuesta se puede optimizar más usando programación dinámica. Hay estados que se pueden generar a partir de diferentes secuencia pero producen el mismo estados entonces en vez de calcular nuevamente esas posibilidades se puede usar programación dinámica para optimizar. Según mis cálculos en el peor caso solo hay que calcular 2×3^9 estados.
@Momuzzz
Ай бұрын
La diferencia en las cantidades no se debe a que Alva está ignorando las partidas espejadas y/o rotadas?
El número de movimientos que sacas al principio está mal porque no tienes en cuenta que el juego se acaba cuando alguien hace una línea de 3, y la versión corregida que has puesto en un comentario también está mal porque no estás considerando el orden de los movimientos para determinar los estados inválidos. Si ambos jugadores juegan un turno después de que alguno de ellos haya ganado, lo consideras estado válido. Sobre la optimización, si la funcionalidad no es la misma entonces no es realmente una optimización, solo otra forma de hacerlo. Con el mixmax el rival jugaría perfecto siempre, cosa que no pasa en mi juego. Aunque se podría adaptar para que busque otros movimientos, al no tener datos de cada rama no podrías, por ejemplo, elegir el movimiento con más posibilidades de provocar un empate de entre los 3 con más posibilidades de que ganes tú. Tal vez luego resulte inútil tener ese tipo de información, pero si la quieres tener, optimizar de esta manera no funciona.
@EterDelta
Ай бұрын
El número de movimientos está mal lo veas por donde lo veas. El script que pase también tiene en cuenta el orden. ¡De resto, completamente entendible! Como menciono en el video, con tantas ideas en tu juego, el sistema actual sirve y basta. Quizás en un futuro podrías considerar refactorizarlo. ¡Mucho éxito con el proyecto!
@AlvaMajo
Ай бұрын
@@EterDelta El script que has pasado no tiene en cuenta el orden y cuenta este estado como válido decenas o cientos de veces independientemente de cómo se llegue a él, pese a que solo sería válido si el último movimiento es el centro: xox oxo xox
@EterDelta
Ай бұрын
@@AlvaMajo Ah, ahora creo que entiendo tu punto. Es más específico de lo que parece. ¡Sí, con eso da 549,945! *Lo curioso es que se puede seguir usando la formula para hallarlo* 👀 ¡Actualicé el script y el comentario fijado para que la gente pueda verificar tu resultado!
@FactoryTrashcension
10 күн бұрын
@@AlvaMajo Ya es algo personal eh, ahora me han entrado ganas de remirar el vídeo a ver si realmente es imposible optimizarlo jaja
@juanpablomijares4224
16 сағат бұрын
Tremendo razonamiento matemático en el comentario del niño que no le gustan las matemáticas.
Ver aplicada la matemática que aprendo en la facultad es lo que mas me gusta, y lo explicas mejor que guinxu
En resumen, aplicaste la técnica de "Ramificación y poda", buen video.
@jpanian
Ай бұрын
Ojalá hubier aplicado programación dinámica para optimizarlo aún más. Alguien debería a atreverse a optimizar la optimización
@anomalyfiledetected1872
Ай бұрын
@@jpanianacaso quieres que explote el universo
@CharlesLakes2001
Ай бұрын
@@jpanian Lo malo es que no tenemos acceso al código fuente pero la implementación con dp no es tan compleja y solo usaría 2x3^9 operaciones. Si tenemos en cuenta que 1e8 ops toma más o menos 1s sería mucha la optimización jsja
Brodeeeeerrrr que hermoso es que las matematicas se usen tan a profundidad en el desarrollo de un videojuego . Buen video .
Esperemos que Alva Majo lo vea :)
@elpeluca
Ай бұрын
si lo ve tal ves le de igual
@Alnidru
Ай бұрын
@@elpeluca Suele interactuar en videos de este estilo para dar su punto de vista
@elpeluca
Ай бұрын
@@Alnidru me refería a aplicar la optimización, ya que no habrá un impacto real en el juego pasar de 0.5 a 0.01
@Alnidru
Ай бұрын
@@elpeluca Ah, eso si que no lo hará, pero si entro a un video que hablaba de las cuestiones que el comento en su video sobre Godot, y el porque no funcionan para él o porque seguía viendolo como una funcionalidad imcompleta
@Diegodeodo
Ай бұрын
@@elpeluca a Alva le llegará al webo al final dirá que 1s o 1ms no es crucial es su juego xd
2:20 por fin alguien que utilizó las permutaciones. Y Alva complicándose la vida.
No te entiendo amigo pero esta muy wapo
no se de matematicas pero te creo porque tu voz suena como me imagino a alguien que sepa de matematicas suene
@barius7163
Ай бұрын
jajaja nmms si
Muy buen video e interesante, eres un gran ejemplo de la importancia de conocer y adentrarse un poco mas en la recursividad, arboles e implementación algoritmos de búsqueda, ya que como se aprecia en el video, se vuelven una alternativa mas corta que puede favorecer mucho en el rendimiento de un juego o una aplicación en general y sin mencionar la importancia de la matematica y estadística que implementaste. Para mi este video es como si le hubieras dado una cachetada a mi yo de la universidad cuando decía "Esto de que me sirve en la vida" en ese entonces cuando recién veíamos estos temas y ninguno de nosotros nos gusta.
Amigo me declaro fan de tu trabajo estos temas de optimización son fascinantes, ojala Alva lo vea
El "problema" de esto es que elegira perfecto. Lo ideal seria quizas configurarlo para que se equivoque, para asi modificar la dificultad.
@5Freddys11
Ай бұрын
Sin embargo, la solución sería buscar una ruta dentro del árbol, que es lo que (creo) Alba Mayo propone de cualquier forma en su vídeo de iteraciones 🤔
@mew6941
Ай бұрын
Sólo seria poner una probabilidad de que el enemigo no elija la rama optima, o para no perjudicar el rendimeinto, que en x ramas enemigas siempre se elija la primera, asi tendrias un parametro para modificar la dificultad.
@cyumus
Ай бұрын
Para eso simplemente modificas la función de evaluación y cambias la forma que tiene de comportarse a la hora de buscar el mejor movimiento.
Lo bueno de la implantación del algoritmo minimax es que puedes alterar la función de evaluación para simular diferentes tipos de comportamientos para los diferentes personajes del juego. De este modo queda un código limpio donde se reutiliza la función de búsqueda y solo se aplica una u otra función de evaluación.
Una gran muestra de lo que se puede hacer con algoritmia y combinatoria. Un video muy bueno, explicas muy bien. :D
Al parecer la cantidad de movimientos que dice Alva (549,945) es hasta encontrar un ganador, el valor 986,409 estaría considerando movimientos más allá de la condición de victoria del juego 🤔
@xHydra
Ай бұрын
Exactamente, ha vuelto a caer en el mismo error que dijo alva, no es la cantidad de jugadas si no la cantidad de jugadas que llevan a victorias o a empate. A ese número que ha sacado habría que descontarle los tableros completos cuando el estado 1 y 2 forman una linea diagonal, horizontal o vertical antes de estar completos, y te daría el número de alva.
@EterDelta
Ай бұрын
Es un buen punto... 🤔 Aun así, quitando los movimientos mas allá de la victoria, sigue sin dar 549,945. *(Mas info en el comentario fijado)* Lo mas probable es que se haya inventando algún filtro del que no habla en su video, y en el código es bastante difícil de identificar.
@ginko3353
Ай бұрын
@@EterDelta Interesante, revisando el código de python puesto en el comentario fijado creo que hay un problema, cuando no se filtran posibles tableros está correcto (986,409 tableros sin contar el tablero vacío), pero cuando se filtra por tableros válidos, por ejemplo, se puede encontrar contabilizado múltiples veces el tablero: [[1, 2, 1], [2, 1, 2], [1, 2, 1]] El cual no es válido dado que el jugador 1 estaría ganando 2 veces (una por cada diagonal).
@paulorodriguezruiz5434
Ай бұрын
@@ginko3353 Pero esa situación si es posible en un juego, claro que el jugador 2 tiene que ser trenendo manco pero si se puede llegar a dar. Aqui una posible partida con ese final (Con el ejemplo de matrices que usaste) [1,0,0] [0,0,0] [0,0,0] [1,2,0] [0,0,0] [0,0,0] [1,2,1] [0,0,0] [0,0,0] [1,2,1] [0,0,0] [0,0,0] [1,2,1] [2,0,0] [0,0,0] [1,2,1] [2,0,0] [1,0,0] [1,2,1] [2,0,2] [1,0,0] [1,2,1] [2,0,2] [1,0,1] [1,2,1] [2,0,2] [1,2,1] [1,2,1] [2,1,2] [1,2,1] O sea (Tomando 1 como x, 2 como o y 0 como vacío) x o x o x o x o x
Qué gusto da ver a alguien que realmente sabe hablar de estos conceptos.
Segun lo que entendi hizo una ia tan buena que no dejaria ganar al jugador como dijo no es lo que busca alva si no lo que buscas optimizacion pero hacerla que el jugador no gane lo veo exagerado pero los numeros no mienten
Esto si es CS señores 🙏
Jajaja no entendí mucho, pero que cool creer que sí
Que bonitas son las mates y estructuras de datos, buen video
Es increíble como lo optimizaste
Tremenda optimisacion, y usando el poder de las matemáticas
no he visto el video pero se que sera un 20/10 y god
XD la música de Carcano en el inicio
@5Freddys11
Ай бұрын
👹👹👹
Segun alva majo la separacion de codigo es un mito XD
Explicando mates con dubpstep de fondo
Ala verga, estuvo bien salvaje bro!, 100/100!
Alva tiene que ver esto, esta super genial!!!!!!!!
Ojalá Alva lo vea. Así no lo vaya a aplicar por que sea una diferencia mínima, igual podría darse cuenta de algo nuevo que podría servirle a futuro.
Dale un pescado a un hombre y comera por un día, dale ese mismo pescado a este hombre y lo optimizara para que el pescado le dure 10 años . 🗿
musica de Creo nice
Ahora niveles de dificultad 🗿
Aprendí bastante en este video, nuevo sub
El tac del final debería ser un jefe secreto
@AragamiMusic
Ай бұрын
Igual sería bastante aburrido luchar contra él, después de todo es el tres en raya
eter, te tomo de inspiración eres muy buen creador de contenido :D, ojala algún día podamos conocernos
de puro matematicas 💪🏿
Felicidades, muy buen vídeo. Pero, entiendo que lo que se requiere es que cada persona juegue el tik-tak-toe de una forma diferente (como la tuerta) XD. Igual, los conceptos aplicados son de agradecer y la forma de explicar es muy buena.
Seus vídeos são muito interessante. Irei me inscrever
HA VUELTO
me hacias falta con tus videos
MUSICA DE CREO EN UN VIDEO LETS GOOOOOOOOOOOOOOOO
Subió vídeo mi desarrollador indie favorito watefok O_o
Como es que aprendiste tantos algoritmos complejos (o al menos para mi)?
hmmm y si pruebas eliminando rotaciones y reflexiones qué pasa? por ejemplo, estos dos tableros son el mismo en realidad y no tiene sentido calcular ambas ramas: ❎🅾⬛ ⬛⬛⬛ ⬛⬛⬛ ⬛❎🅾 ⬛⬛⬛ ⬛⬛⬛ (reflexión en el eje vertical)
@XaviIntheHouse
Ай бұрын
No son los mismos tableros reflejados, ni rotadod. El primero tiene 2 horizontales, 2 verticales y 2 diagonales en total 6 posibilidades de ganar. Y el otro 2 horizontales, 2 horizontales y 1 diagonal en total 5 posibilidades de ganar. Pero si seria interesante hacerlo porque el algoritmo al inicio calcula 9*8 tableros, despues 8*7 tables, hasta llegaf a 1*0, o sea, (9*8+8*7+7*6+6*5+5*4+4*3+3*2+2*1+1*0). Mientras mas se juega menos tiene que calcular menos. Si eliminamos las reflexiones habría que decidir como reflejamos arriba-abajo o izquierda-derecha o quizas ¿ambas?, bueno cualquiera que sea la reflexión se pueden reflejar 6 casillas...(9-6/2)(8-6/2) = (6)(5) el primer movimiento (5)(4) el segundo, 4*3 el tercero, 3*2 el cuarto y 2*1 el quinto y finalmente 1*0. O sea 6*5+5*4+4*3+3*2+2*1+1*0. El "problema" de hacer esto es que habria que cuando sea una reflexion hay que sobreescribir el tablero y depende como se lo haga podria llevar un proceso de (6*5+...+1*0)/2 de veces para reflejar el tablero y sumando eso da (3/2)*(6*5+...+1*0). Aunque creo que eso sigue siendo mucho menor que (9*8+...+1*0) Y solo aplicando una reflexion Si le aplicamos las dos juntas seria (9-8/2)*(8-8/2)+...+(1*0) 5*4+4*3+3*2+2*1+1*0 y asi mismo hay que aplicar reflejos cuando se calcula la jugada que en el peor de los casos necesitara reflejarse dos veces de derecha-izquierda y arriba-abajo. 4 si o si se reflejaran 2 veces, 4 solo 1 y 1 ninguna vez seria 4*2 + 4*1 + 1*0 = 12 12*(5*4+4*3+3*2+2*1+1*0), menor que aplicando solo un reflejo Y esto lo hace mas eficiente y ocupa menos memoria pasando de 2*(9!) tableros a 2*(4!), pero con la complejidad que ahora 3 casillas tienen que llevar si esta reflejado(iz-der, arrib-abaj) y el valor que hay en esos reflejos Pero creo que en PC actuales estas optimizaciones no causaran un gran impacto. No se no soy un experto hablo desde mi total ignorancia
@demian2234
Ай бұрын
@@XaviIntheHouse Tanto texto para estar mal, son el mismo tablero pero con una reflexión horizontal y una inversión de jugadores. Se pueden mapear a un mismo elemento y evitar redundancias.
para cuando un juego en un carácter de Word
9:56 TERRARIA REFERENCIA???!!!!!!!
Fue excelente!! Ahora, sin desmerecer el maravilloso trabajo que hiciste.. para el juego y el jugador realmente impacta ese medio segundo de diferencia? O qué se está salvando realmente de fondo? Saludos!! Gran video.
Videazo
el codigo de Alva es Spagueti eso no hay quien lo discuta. tema aparte un juego como el que el pretende hacer no necesita grandes optimizaciones. nunca se empieza diseñando con el rendimiento en mente, se optimiza solo si es necesario. despues de detectar algun problema de rendimiento.
Para los que tengan dudas. En un comentario en el vídeo de Alva ya lo dije pero insultó y ridiculizó (soy un afortunado jajajaj). No es lo mismo contar el número de jugadas que el número de tableros posibles, ya que dos secuencias de jugadas distintas pueden dar lugar al mismo tablero. De hecho, el número de jugadas es muuucho mayor. ¿Por qué Alva y Guinxu discrepan?, pues porque guinxu está tomando 9! Que es el número de secuencias de 9 jugadas. Exactamente 9 jugadas. Guinxu no esta contando la posición del tablero tras 8 jugadas, ni 7, ni 6, etc... Alva si lo está contando (no sé de dónde carajo saca el número pero el razonamiento sí las cuenta).
por eso estudien matematicas pq son interesantes y muy utiles
tan pocas vistas y tantos factos que te tiraste xd
haber optimiza el minecraft haber si muy muy
@sixd930
Ай бұрын
No es lo mismo bro, ni el propio mojang puede optimizar Minecraft así como así y le estás pidiendo eso a un desarrollador indi XD
@5Freddys11
Ай бұрын
1 millón de likes y que optimice la versión Java 🧐🙏
@user-uc1wl5mx2q
Ай бұрын
Pa que si ya existe el optifine
Ese final xdd
*Mi cerebro* 🤯
Alva no le sabe a las mates xD por eso hizo todo a mano
AL FIN VOLVIÓ YIPPEEEEEEEEEEE🥳🥳
deberias poner el titulo en milisegundos, creo que se veria mejor. de 500ms a 10ms
siiiiiiiiiiiii, nuevo videoooooo
No entendi absolutamente nada, pero me gusta
Como extrajiste del .exe el prollecto de Godot eso no es posible
@REESIX1
Ай бұрын
yo creo que solo pidió el codigo fuente... si lo piensas, es más probable que lo haya pedido a alva que lo haya extraido via-ingeniería inversa.
@AlejandroGCode
Ай бұрын
@@REESIX1 se tendrían que conoser y tener confianza que no lo ba a publicar después ya que Alva dijo que no quería documentarlo
3:50 es posible que Alva haya ignorado los resultados donde el juego termina antes de los 9 movimientos? me parece que ese ese el problema, si jugamos los dos al tic tac toe y ambos intentamos hacer una linea vertical hacia abajo, tu empiezas desde arriba a la izquierda y yo desde arriba a la derecha, entonces el juego terminará a los 5 movimientos, los movimientos a partir del 5to no son válidos porque el juego ya terminó.
No todas las jugadas son válidas. Hay combinaciones que nunca se darían porque la partida termina antes.
Joder, sí es teoría de juegos 🚬
Ahora optimiza Yandere Simulator porfa 🥺
como inspeccionaste el codigo de la demo?
Carcano
No entendi nada XD
Amaizing !!!
Yo digo que su juego necesita ser más divertido, el tic tac necesita variaciones o algo
y que nos comprueba que no eres una subcuenta de alva
ay wee mi mente
Que como que uso matemáticas? :0
Uy, justo en el ego de Alva
@paulorodriguezruiz5434
Ай бұрын
Las mates lo volvieron a hacer. :''c
Viendo la calidad técnica y didáctica de estos vídeos sigo diciendo que Alva y Guinxu son técnicamente mediocres la verdad... Sin ánimo de ofender pero Guinxu tanto que adula las matemáticas y a la hora de usarlas le da pereza diseñar algoritmos que le automaticen el trabajo...
@rasucrudo7755
Ай бұрын
Le da pereza por que alva majo no le paga😂
@informagico6331
Ай бұрын
@@rasucrudo7755 ni en sus propios juegos, Guinxu pone los colliders a mano cuando podría hacer un generador de colisiones para ahorrar memoria
No me gustó la elección de la música la verdad...
:0
Firstt
Me facin como usas matemáticas para resolverlo, y me encantaría aprender más de ella para aplicarla en mi vida diaria como programador. ¿Dónde puedo aprender más de optimización?
@5taro