artificial intelligence - para - ¿Los juegos son las aplicaciones más complejas/impresionantes?
aplicaciones para niños de 8 a 10 años (30)
Los juegos sin duda abarcan una amplia gama de tecnología informática, desde optimizaciones de hardware a bases de datos, inteligencia artificial, matemáticas avanzadas, lo que sea.
Es difícil establecer un punto de referencia para la complejidad, no estoy seguro de si existe alguno. Si lo piensas bien, las cosas que son triviales para nosotros hoy fueron problemas realmente difíciles de resolver hace unos pocos años, así que la complejidad es un objetivo en movimiento y todos estamos construyendo sobre eso.
Si tuviéramos que analizar lo que implica leer su pregunta, la enormidad de los problemas a resolver es asombrosa: imagínese la complejidad del software que se utilizó para fabricar los componentes electrónicos de su máquina, mi máquina y todas las otras máquinas en Entre.
Imagínese la cantidad de complejidad involucrada en hacer que las computadoras pasen información mutuamente confiable.
Imagine lo que le llevó al sistema operativo administrar todo este hardware, para que los navegadores evolucionen hasta el punto en que puedan mostrar información de diseño compleja en la pantalla ...
Todo esto es asombroso para mí.
Podría apuntar a una aplicación particularmente compleja, pero si lo piensa, probablemente siempre haya otra que se vea lo suficientemente simple en la superficie, pero puede verse como aún más compleja cuando se tiene todo en cuenta.
Estaba pensando hoy sobre cuál podría ser la aplicación más compleja / impresionante jamás escrita. Entonces comencé a pensar en lo que me siento cómodo y uso las bases de datos cotidianas.
Luego entré en el campo de lo desconocido (para la mayoría de nosotros, creo), el gobierno . Solo puedo imaginar la complejidad de las aplicaciones de la NASA que les permiten comunicarse con los rovers en Marte.
Pero luego comencé a pensar en cosas que he estado usando todos los días desde que era niño, juegos . Al no ser un desarrollador de juegos, esto me llevó a la imaginación una gran cantidad de preguntas sobre la IA y la complejidad computacional que supera cualquier cosa que se me ocurra.
¿Los juegos son las aplicaciones más complejas / impresionantes?
Los sistemas de control de tráfico aéreo son tolerantes a fallas, críticos de seguridad, alta disponibilidad y distribuidos. No hay tiempo de inactividad, el sistema debe funcionar las 24 horas del día, los 365 días del año, incluso durante las actualizaciones del sistema. En realidad, no hay nada que sea terriblemente complejo desde el punto de vista informático (sin IA, por ejemplo, porque quiere que el sistema sea predecible), pero desde el punto de vista del sistema no hay mucho más que deba ejecutarse en ese nivel. Incluso el software de misión espacial solo necesita ejecutarse mientras la misión lo haga.
No sé cómo se quiere elegir medir la ''complejidad'' o ''impresionanteidad'', pero algunos programas que se pueden tener en su escritorio (como Office o Visual Studio) son probablemente más ''complejos'' que cualquier videojuego, según la mayoría de las medidas .
(Creo que VS en estos días es como 50 millones de líneas de código, aunque no necesariamente soy un recurso confiable aquí).
Yo diría que definitivamente no.
Los juegos modernos son ciertamente impresionantes, aunque su tecnología de software y hardware está muy rezagada con respecto al estado del arte en la academia, la industria y el ejército. Después de todo, están diseñados para funcionar con hardware doméstico bastante común. Estoy seguro de que el ejército entrena a su gente en simulaciones más realistas.
Desde un punto de vista computacional, los juegos tampoco son tan interesantes. Los juegos modernos (por ejemplo, Fallout 3, GTA4) ciertamente parecen sorprendentes por su "mundo abierto" y su historia extremadamente larga, pero eso no tiene nada que ver con la tecnología, sino con el valor de la producción. Los juegos populares ahora requieren un elenco y una inversión más grandes que algunas películas de Hollywood. Así que, seguro, tienes un modelo de Nueva York en lugar de un bloque, pero ¿y qué?
Incluso los MMORPGS no son tan impresionantes. Sí, tienen muchos agentes que interactúan. Sin embargo, las aplicaciones empresariales que incluyen agentes automatizados tienen mucho más agentes, operan más rápido y tienen mayores requisitos de confiabilidad.
Finalmente, diría que, con la excepción de los algoritmos de vanguardia que se prueban usando juegos como el ajedrez, ya que estos sirven como puntos de referencia, el juego AI no es tan avanzado. Una vez más, los militares (y las compañías financieras) tienen aplicaciones mucho más inteligentes.
Depende de lo que quieras decir con complejidad.
Desde un punto de vista de algoritmo, y desde un punto de vista de optimización de bajo nivel, y ciertamente desde un punto de vista matemático, entonces ciertamente los juegos son más complicados que VS o un sistema operativo.
Aunque desde el punto de vista del tamaño del código, de la interacción de muchos componentes diferentes punto de vista y de la necesidad de admitir (y depurar) una multitud de permutaciones de configuraciones, entonces diría que un sistema operativo es más complicado.
Los juegos no son tan impresionantes desde el punto de vista de la complejidad. Supongo que estabas pensando en juegos estilo FPS que sin duda cautivaron con su capacidad de gráficos. En lo que respecta a la computación, sin duda hacen mucho, pero en su mayoría son solo muchos algoritmos probados y comprobados que se ejecutan en un número cada vez mayor de polígonos y mapas de texturas de mayor resolución.
Simular un entorno físico tampoco es tan difícil; siempre que desee que el entorno obedezca las leyes de la física conocidas porque la mayoría de esas cosas son un tanto básicas y bien entendidas.
Las misiones de Mars Rover son una hazaña impresionante. Sin asignación de memoria dinámica, depurando el código mientras se estaba ejecutando, en Marte , y cargando una solución para un error, sobre la marcha. En términos de robustez, diría que se acerca a tomar el pastel.
No, los juegos no son tan especiales. Por supuesto, al igual que cualquier otro gran proyecto de programación, hay una gran cantidad de objetivos en conflicto y muchos compromisos para hacer, pero al final, los juegos tienen la ventaja de que hay muy pocos requisitos . Si está escribiendo una base de datos, debe cumplir con las propiedades ACID. No debe perder datos, sin importar cuándo y cómo desconectarlos. Si está escribiendo un sistema operativo, se aplica algo similar, debe ser estable como una roca sin importar lo que le haga. Un juego también tiene que cumplir con muchas expectativas, pero muy pocas son absolutamente esenciales. Está bien simular la mayoría de los efectos gráficos. Está bien simular la simulación mundial en áreas que el jugador no está observando.
Y no es el fin del mundo si tu juego también falla ocasionalmente. Los grandes juegos AAA son complejos, sí, pero no son las aplicaciones más complejas que existen. No de lejos.
El desarrollo del juego abarca una amplia gama de conjuntos de habilidades y tecnología, sin duda, pero también tienen un gran margen de maniobra, y se les permite comprometer la mayoría de los requisitos. Está bien si solo podemos alcanzar este framerate en ese hardware. Está bien si tenemos que deshabilitar las sombras suaves para mejorar el rendimiento. Está bien que la IA se falsifique según "lo que parece convincente".
Crear un gran juego de alto presupuesto es una tarea enorme, sin dudas al respecto. Y es posible que sea el tipo de aplicación más compleja si se considera por la amplitud de la tecnología, las profesiones y las habilidades involucradas en su creación. Pero en cuanto a la programación, o en términos de complejidad computacional o algo por el estilo, nah, no es tan especial.
No.
Si consideramos todo el software como "aplicaciones", diría que los sistemas operativos son (para el sistema operativo no son aplicaciones sino, bueno, sistemas)
Si incluye juegos masivos en línea, yo diría que sí. Tendrían que utilizar todo lo que un sistema a gran escala necesitaría (sistema distribuido, coordinación de esos sistemas, grandes cantidades de datos, transacciones / confiabilidad para asegurar que los inventarios permanezcan correctos, etc.), todo bajo requisitos de desempeño muy ajustados (EVE Online es el principal uno en el que estoy pensando).
Sin embargo, quizás no sea la IA más impresionante. Todavía tengo que encontrarme con una IA en un juego que no se pudo descifrar en un par de días.
Un ejemplo: en un momento Outlook interactuó con 10 millones de líneas de código. Ningún desarrollador de juegos en su sano juicio se acercaría a eso, ya que nunca funcionaría lo suficientemente rápido.
Creo que los motores que las aplicaciones ejecutan en la parte superior serían complejos. Probablemente no haya muchas líneas (como un sistema operativo), pero es muy complejo, ya que necesitaría manejar todos los elementos y escenarios que el diseñador debería implementar y ejecutar de manera óptima.
Ya que estás hablando de juegos, muchos desarrolladores de juegos compran motores y escriben contra eso. Algunos de estos motores están escritos de forma tan abierta que se usan para varias aplicaciones que se ven y se sienten totalmente diferentes.
Creo que los programas que de alguna manera controlan el mundo real son bastante impresionantes, especialmente si controlan un sistema grande.
Las computadoras de dirección en el Gripen Fighter, que es un avión aerodinámicamente inestable a velocidades subsónicas. La tarea de las computadoras es hacer que sea estable y hacer uso de las fuerzas inestables para poder tener un mayor rendimiento de giro.
Un amigo mío trabaja en Jeppesen con un sistema para programar tripulaciones de aerolíneas para las principales aerolíneas. Deben tomar diferentes reglas de trabajo para diferentes países y lograr programar las tripulaciones para que puedan entrar y salir de sus turnos cerca de casa . Bastante impresionante, creo ...
Existe una gran cantidad de software de gestión de riesgos (y otro software basado en el análisis estadístico) que es más impresionante para mí. Es ''una cosa para crear un mundo falso (impresionante por derecho propio) pero intentar predecir lo que el mundo real va a hacer es mucho más difícil.
La mayoría de los juegos modernos, gráficos y orientados, como programas, no son particularmente impresionantes o complejos (pueden ser juegos complejos, pero los conceptos para programarlos no lo son).
Los analizadores de lenguaje natural para algunos juegos basados en texto me parecen impresionantes.
La enorme masividad en los datos o las líneas de código puede ser impresionante, pero cualquier marca dada establecida allí será superada en breve. La complejidad de la implementación puede ser extrema (por ejemplo, la gran cantidad de interacciones de todas las API que Microsoft ha puesto en Windows a lo largo de los años), pero no existe una necesidad subyacente de toda esa complejidad. ¿Cuáles son los programas que tienen una complejidad subyacente e inevitable?
Por encima de todo, diría que las siguientes aplicaciones involucran código mucho más complicado y mucho más código de bajo nivel que el juego promedio:
- 3D Studio MAX
- El software utilizado para simular la física y los accidentes para el diseño automotriz
- Software meteorológico utilizado para modelar el clima y crear pronósticos
- Software OCR de alta gama
Si incluye el proceso de desarrollo, los juegos ciertamente están ahí.
Te diré lo que creo que es más único sobre los programas de juegos, y lo que para mí los hace tal vez los más impresionantes ... es cómo los errores afectan a los productos en general. Si tiene un error en decir, Outlook (hah), hay un par de formas diferentes de abordarlo (voy a simplificar aquí):
- Corrige el error.
- Ofrezca al usuario una solución alternativa si existe otra forma de lograr lo mismo.
- Simplemente deja el error tal como está, envíalo y no te preocupes por eso.
Con la mayoría de los juegos, especialmente todo lo que es multijugador, a menudo no tienes la opción de # 2 o # 3. Los jugadores buscan formas de explotar los juegos, por lo que si dejas un error que pueda aprovecharse, lo será. Por lo tanto, la tolerancia para los errores en los juegos es en realidad mucho menor que en la mayoría de los software de negocios / productividad, debido al potencial abusivo.
Para mí, esta es una de las principales cosas que hace que un sistema de juego grande y complejo como WoW o Everquest sea realmente impresionante. La duración a la que la gente irá a abusar de las lagunas en un juego es bastante sorprendente, y está muy bien documentada. Este es un marcado contraste con productos como Photoshop o software ofimático, donde mientras haya alguna manera de lograr lo que debe hacer, el hecho de que algunos de los otros flujos de trabajo se rompan no es necesariamente un error de misión crítica. ..al menos tiene el potencial de ser ignorable. Eso simplemente no es un lujo que los desarrolladores de juegos tienen.
Ahora ... en comparación con cosas como Air Traffic Control o el software de vuelo Airbus, los juegos no tienen en ningún lado ese tipo de restricciones de vida en línea ... esa es toda una clase de desafíos.
Creo que hay ejemplos interesantes de códigos "impresionantes" en el mundo de los juegos. El lugar para buscar es juegos para hardware fijo como consolas de juegos y plataformas informáticas domésticas más antiguas. El software que debe buscar son los títulos que salieron al final de la vida de esas plataformas.
Por ejemplo, Elite en la BBC Micro incluyó un juego de combate espacial 3D, una simulación de mercado y un mapa de todo un universo en 32KB. Más tarde, el mismo juego se apretó en un NES. Esta hazaña incluye codificación del lenguaje ensamblador optimizado a mano en el que se considera que vale la pena gastar un día para recortar un byte.
Puede encontrar trabajos igualmente impresionantes en todas las plataformas de 8 y 16 bits. También mira las demos de sonido y gráficos de la escena de Amiga.
El conductor de todo esto es que no se puede simplemente resolver el problema con más hardware. Los consumidores no podían actualizar el hardware y exigían juegos cada vez más sofisticados.
Además, estos juegos son impresionantes porque fueron escritos para dispositivos que inicialmente no estaban diseñados para juegos. Algo tan simple como "desplazamiento suave en 8 direcciones" se consideró una característica importante para un juego, porque el hardware no lo soportaba directamente y los programadores tenían que ser realmente listos para lograrlo.
Es posible que esos días hayan terminado. Tal vez alguien empuje la PS3 o la Xbox360 para hacer algo alucinante, pero parece que puedes vender juegos sin tener que forzar todo este hardware, por lo que la presión comercial para hacerlo no es tan alta. Todo lo que obtiene son pequeñas mejoras en la calidad gráfica, o entornos más grandes, o entornos más detallados.
Cada vez más, incluso los dispositivos portátiles son demasiado poderosos para generar ese tipo de codificación impresionante de bajo nivel. No necesita mezclar bits para escribir un juego 3D en un teléfono moderno.
Por lo tanto, busque otros lugares donde el hardware sea limitado. El Mars Rover es un buen ejemplo.
No estoy en desacuerdo con ninguna de las respuestas que ya se encuentran aquí, pero me parece muy interesante que cuando las personas piensan en "la complejidad de los juegos" piensan en GTA o MMORG. Pienso en ir y ajedrez.
Los juegos populares pueden ser computacionalmente intensivos con muchos gráficos, pero eso no es HARD per se. Ir, por otro lado, es un problema informático intratable.
Además, si está tomando la definición técnica de "complejidad", entonces esta NO es una pregunta subjetiva.
Alguien mencionó el software de control de tráfico aéreo. Estoy bastante seguro de que es increíblemente complicado y confiable, pero para mí tiene que ser el sistema global de emisión de boletos de avión, amadeus, creo que se llama.
Con cientos de miles de vuelos, destinos y opciones de precios, es increíble que pueda atender solicitudes en tiempo real, básicamente, a todo el mundo.
He escrito un poco de software que calculó los precios de las habitaciones de un hotel. Esto no era para una gran cadena ni nada, solo un hotel, ni siquiera tan grande. y el código que tomó todas las diferentes variables y reglas y devolvió el precio fue ... enorme y bastante complejo.
Ampliarlo a todos los vuelos que operan ahora y en el futuro debe ser en mi opinión la cosa más complicada que existe.
¿Los juegos son las aplicaciones más complejas / impresionantes?
¿Complejo? No
¿Impresionante? Depende Hay muchos tipos de impresionantes.
Por ejemplo, en tolerancia y corrección de fallas, es probable que sea un código para aplicaciones médicas o aeroespaciales.
En escalabilidad, diría Google o Amazon.
Pero en lo que los juegos se destacan, es obtener el máximo rendimiento del hardware disponible. Con otras aplicaciones suele haber un punto en el que tienes suficiente potencia de hardware para que no te importe, pero en los juegos siempre puedes mejorar el rendimiento, mejorar la inteligencia artificial, etc. Por lo tanto, el rendimiento será una alta prioridad en el futuro previsible. En esta categoría, los juegos son muy impresionantes.
realmente me pregunto que nadie mencionó la fortaleza enana todavía :)
fortaleza enana en realidad es bastante impresionante. puede carecer de gráficos brillantes, pero hace muchas cosas impresionantes en la generación y simulación de mundo abierto.
Respuesta corta: Sí. Aunque estoy respondiendo a esta pregunta: "Hoy estaba pensando en cuál podría ser la aplicación más compleja / impresionante que se haya escrito". en lugar de cuál es el más complejo / impresionante.
Imagine tratar de desarrollar un juego que modele todo el universo y le permita jugar con [x] superpoderes. Efectivamente, puedes convertir un juego en una simulación de CUALQUIER complejidad, hasta tan complicada como toda la física conocida y luego lanzando elementos no físicos a la mezcla. Los videojuegos, por su propia naturaleza, pueden ser tan simples o tan complejos como desee.
En mi opinión esa es la belleza del desarrollo de juegos. Puede crear un mundo al nivel de detalle que desee. Cualquier cosa que puedas imaginar, podrías convertirte en un juego. Teóricamente
Además de algunas excelentes sugerencias anteriores, me gustaría señalar que Uniview es bastante impresionante.
En cuanto al código complejo y "brillante", yo diría que deberías mirar el premio Loebner (sp?). Es un concurso para desarrollar una máquina de turing conversacional. Este es un proyecto muy complejo e interesante donde el objetivo es escribir código que pueda mantener una conversación con un ser humano real sin ser reconocido como una máquina.
Hay muchas capas para esto, lingüística, memoria, gramática y sintaxis, auto-reprogramación. Básicamente es una mini IA, y si llego a la lotería me gustaría pensar que pasaría mucho tiempo trabajando en ello.
¿A quién bromeo? Me pasaría todo el día en el parque acuático, borracho. Pero estaría pensando en esto todo el tiempo.
He trabajado un poco en el código de una de las estaciones terrestres satélite de la NASA. El trabajo del sistema es realizar un seguimiento electrónico de todos los satélites de la NASA y controlarlos. Puede que no parezca mucho, pero si un sistema se bloquea mientras está en el medio de comandar un satélite, puede enviar miles de millones de dólares de los contribuyentes girando al sol. Así que la tolerancia a fallas y la redundancia integradas en esa configuración pondrían a Blizzard celoso. IIRC, había en algún lugar cerca de 50 servidores, el más importante de los cuales tenía un repuesto caliente listo para hacerse cargo en menos de un segundo si la primaria falla. Cada uno de esos sistemas a su vez tiene un par de sistemas redundantes listos para hacerse cargo si ambos fallan. Todavía tengo que ver cualquier juego tan complicado (o impresionante, a su manera) como eso.
Cada una de esas estaciones terrestres interactúa entre sí en tiempo real (tanto electrónicamente como mediante interacciones humanas), junto con todos los satélites, por supuesto, y el transbordador cuando está allá arriba, y varios terminales de tierra que procesan datos orbitales, y podría por lo tanto, se consideran meras partes un sistema aún más grande y complejo, que la NASA llama TDRSS . Aquí hay un diagrama muy conceptual que encontré en línea :
El "Complejo White Sands" se encuentra físicamente en el extremo sur de Nuevo México, cerca de Los Cruces. Como puede ver dentro de su bloque, hay tres terminales de tierra enteros como el que describí, todos conectados en red y a los satélites. Además, hay otros dos más remotos (no estoy seguro de dónde están).
Respuesta corta: No.
Respuesta larga: los juegos en realidad no son tan complicados. Depende de lo que estés hablando cuando dices "juegos", pero los dos contendientes para los juegos más complejos serían los juegos en 3D y los juegos en línea (particularmente los juegos masivos en línea).
La complicación en los juegos en 3D proviene de tomar un modelo de un mundo y renderizarlo en 3D y hacer que se comporte de una manera "realista" (dentro de las reglas del mundo). Crear un entorno visual y auditivo a partir de eso no es realmente tan difícil. Es prácticamente todo el álgebra lineal y es un campo maduro de la informática.
El verdadero truco está en hacer que el proceso funcione en tiempo real. Con el paso de los años, los programadores de juegos han tenido que hacer MUCHOS intercambios entre el realismo y el rendimiento (por ejemplo, si puedes crear un algoritmo de rendimiento que genere árboles de aspecto realista que en realidad valga mucho dinero). Por lo tanto, los juegos han mejorado (visualmente) a lo largo de los años a medida que aumentaba la potencia informática y gráfica.
Ahora algunos programadores de juegos han hecho innovaciones reales en este campo que les han ganado (con razón) mucho dinero. John Carmack (id Software: Doom y Quake) y Tim Sweeney (Unreal) me vienen a la mente.
Sin embargo, el costo real al hacer juegos es el contenido. Solo ve los créditos para un juego moderno de FPS (tirador en primera persona) y normalmente verás tan solo 6 programadores, pero habrá entre 30 y 50 artistas. El contenido no es complejo (desde el punto de vista del software). Simplemente lleva mucho tiempo.
En cuanto a los juegos en línea, recuerdo cuando salió Everquest y la gente deliró sobre lo difícil que fue. Bzzzt, mal. Para aquellos (como yo) que estaban familiarizados con el desarrollo de MUD (mazmorras multiusuario) hasta los 90 (y posiblemente 80), arquitectónicamente un servidor Everquest no era tan complicado.
Lo mismo ocurre con World of Warcraft o cualquiera de estos otros juegos.
Si quiere hablar de complejo, ¿qué tal el sistema operativo Windows XP funciona con 40 millones de líneas de código ? Dios sabe cuántos tiene Vista. ¿O qué hay del kernel de Linux?
Ahora en el gobierno, el ejército y el sector privado encontrarás otras aplicaciones que literalmente tienen miles de años invertidos en ellos.
Son complejos, sí. Son muy impresionantes, sí.
Pero existen sistemas que son comparables a los juegos. Los administradores de bases de datos son muy complejos e impresionantes. Mathematica es otra buena pieza de SW. Hay muchos ejemplos. Definitivamente algunos juegos están arriba en la parte superior.
Realmente depende de cómo medimos la complejidad, qué aspectos estamos viendo. Ciertamente hay una gran cantidad de tecnología impresionante que impulsa los videojuegos en estos días.
Creo que algunos de ustedes pueden disfrutar esto: John Carmack en la NASA aceptando el primer premio por su trabajo en un módulo lunar.
John Carmack (Armadillo Aerospace) en la sede de la NASA
Según Carmack, la hazaña fue simple:
El trabajo que hago en videojuegos es mucho más complicado que el trabajo aeroespacial.
Eche un vistazo a algunas de las aplicaciones de física desarrolladas por el Departamento de Energía :
Hay aplicaciones allí que hacen:
- simulaciones climáticas
- energía de fusión
- dinámica molecular
- dinámica de fluidos
- cromodinámica cuántica .
Estos son algunos de los problemas computacionales más intensos que existen, y millones de horas de CPU se dedican a ellos cada año en varios centros de supercomputación . Estos son códigos altamente paralelos, y la comprensión de la física y cómo asignarla eficientemente a redes y procesadores ( por ejemplo, con MPI ) es tremendamente compleja.
Se espera que las máquinas con millones de núcleos en 2012 ejecuten algunas de estas cosas.