47

我今天在想什么可能是有史以来最复杂/最令人印象深刻的应用程序。所以我开始思考我每天都习惯和使用的数据库

然后我进入了未知领域(我猜对我们大多数人来说),政府。我只能想象 NASA 应用程序的复杂性,这些应用程序允许他们与火星上的漫游者通信。

但后来我开始思考我从小就每天都在使用的东西,游戏。作为一名游戏开发者,这让我想到了大量关于人工智能和计算复杂性的问题,这些问题超出了我的想象。

游戏是最复杂/最令人印象深刻的应用程序吗?

4

30 回答 30

49

简短的回答:没有。

长答案:游戏实际上并没有那么复杂。这取决于您在说“游戏”时所谈论的内容,但最复杂游戏的两个竞争者将是 3D 游戏和在线游戏(尤其是大型在线游戏)。

3D 游戏的复杂性来自于获取一个世界模型并将其渲染为 3D,并使其以“现实”(在世界规则内)的方式运行。从中创建视觉和听觉环境实际上并不难。它几乎都是线性代数,是计算机科学的一个成熟领域。

真正的诀窍在于使该过程实时高效。多年来,游戏程序员不得不在真实性和性能之间做出很多权衡(例如,如果你可以制定一个性能算法,生成看起来很逼真的树,而这些树实际上很值钱)。因此,随着计算和图形能力的提高,这些年来游戏自然会变得更好(视觉上)。

现在一些游戏程序员在这个领域做出了真正的创新,他们(正确地)赚了很多钱。John Carmack (id Software: Doom and Quake) 和 Tim Sweeney (Unreal) 浮现在脑海中。

然而,制作游戏的真正成本是内容。只需查看现代 FPS(第一人称射击)游戏的制作人员名单,您通常会看到只有 6 个程序员,但会有 30-50 多名艺术家。内容并不复杂(从软件的角度来看)。这只是耗时。

至于网络游戏,我记得 Everquest 刚出来的时候,人们都对它的难度赞不绝口。呜呜呜,错了。对于那些(像我一样)熟悉 90 年代(可能还有 80 年代)MUD(多用户地下城)开发的人来说,从架构上讲,Everquest 服务器并没有那么复杂。

魔兽世界或任何其他游戏也是如此。

如果你想谈谈复杂,那么运行这些东西的 Windows XP 操作系统呢?估计有4000 万行代码?天知道Vista有多少。或者Linux内核呢?

现在,在政府、军队和私营部门,您会发现其他应用程序已经投入了数千年的时间。

于 2009-02-14T02:34:27.327 回答
42

空中交通管制系统具有容错性、安全性、高可用性和分布式特性。没有停机时间,系统必须一年 365 天,每天 24 小时运行,即使在系统升级期间也是如此。实际上并没有任何计算上非常复杂的东西(例如,没有人工智能,因为你希望系统是可预测的),但从系统的角度来看,在那个级别上运行的东西并不多。即使是太空任务软件也只需要在执行任务时运行。

于 2009-02-14T02:41:49.447 回答
25

我为 NASA 的一个卫星地面站编写了一些代码。该系统的工作是以电子方式跟踪和控制美国宇航局的所有卫星。这听起来可能不多,但如果系统在您指挥卫星的过程中崩溃,您可以将数十亿纳税人的钱送入太阳。因此,该设置中内置的容错性和冗余性会让暴雪嫉妒。IIRC,大约有 50 台服务器,其中更重要的是有一个热备件准备好在主服务器发生故障时在不到一秒的时间内接管。这些系统中的每一个又都有一对冗余系统准备好在两者都发生故障时接管。我还没有看到任何游戏如此复杂(或以它自己的方式令人印象深刻)。

这些地面站中的每一个都与彼此实时交互(包括电子交互和人类交互),当然还有所有卫星本身,还有航天飞机在那里,以及处理轨道数据的各种地面终端,并且可以因此被认为只是一个更大、更复杂的系统的一部分,NASA 称之为TDRSS这是我在网上找到的一个非常概念的图:

替代文字
(来源:nasa.gov

“白沙综合体”实际位于新墨西哥州南部,靠近洛斯克鲁塞斯。正如你在它的区块内看到的那样,有三个完整的地面终端,就像我描述的那样,全部联网在一起并连接到卫星。另外还有两个远程的(我不确定它们在哪里)。

于 2009-02-27T19:17:17.487 回答
10

游戏当然涵盖了非常广泛的计算技术,从硬件优化到数据库、人工智能、高等数学,应有尽有。

很难为复杂性建立一个基准,我不确定是否真的存在。如果你仔细想想,今天对我们来说微不足道的事情在几年前真的很难解决,所以复杂性是一个不断变化的目标,我们都在它之上构建。

如果我们必须分析仅阅读您的问题所涉及的内容,那么要解决的问题之多是惊人的:想象一下用于为您的机器、我的机器和所有其他机器制造电子元件的软件的复杂性之间。
想象一下让计算机可靠地相互传递信息所涉及的复杂性。
想象一下操作系统管理所有这些硬件、浏览器发展到可以在屏幕上显示复杂布局信息的程度……
这一切都让我感到震惊。

你可以指出一个特别复杂的应用程序,但如果你仔细想想,可能总有另一个表面上看起来很简单,但如果你把所有事情都考虑进去的话,可能会被认为更加复杂。

于 2009-02-14T02:32:54.070 回答
7

我会说绝对不。

现代游戏当然令人印象深刻,尽管它们的软件和硬件技术远远落后于学术界、工业界和军方的最新技术。毕竟,它们旨在在足够常见的家用硬件上运行。我确信军队会在更真实的模拟中训练他们的人民。

从计算的角度来看,游戏也没有那么有趣。现代游戏(例如《辐射 3》、《GTA4》)当然因其“开放的世界”和极其漫长的故事而显得令人惊叹,但这与技术无关,而是与生产价值有关。现在流行的游戏比一些好莱坞电影需要更多的演员和投资。所以当然,你有一个纽约的模型而不是一个街区,但那又怎样?

即使是 MMORPGS 也没有那么令人印象深刻。是的,他们有许多交互代理。但是,包含自动化代理的企业应用程序拥有更多的代理、运行速度更快并且具有更高的可靠性要求。

最后,我要说的是,除了使用国际象棋等游戏测试的尖端算法(因为这些作为基准)之外,游戏人工智能并不是那么先进。同样,军事(和金融公司)有更智能的应用程序。

于 2009-02-14T02:46:48.220 回答
7

看看能源部开发的一些物理应用程序:

那里有一些应用程序可以做到:

这些是存在的一些计算最密集的问题,每年在各个 超级计算中心 都有数百万的 CPU 小时用于解决这些问题。这些是高度并行的代码,理解物理以及如何将其有效地映射到网络和处理器(例如使用MPI)是非常复杂的。

预计到 2012 年,拥有数百万个内核的机器将运行其中的一些功能。

于 2009-02-27T19:31:46.063 回答
6

从复杂性的角度来看,游戏并不是那么令人印象深刻。我假设您正在考虑 FPS 风格的游戏,它们的图形功能肯定会令人惊叹。就计算而言,它们确实做了很多工作,但主要是在不断增加的多边形数量和更高分辨率的纹理贴图上运行的大量久经考验的算法。

模拟物理环境也不是那么难。前提是您希望环境遵守已知的物理定律,因为其中大部分内容都有些基本且易于理解。

火星探测器任务是一项令人印象深刻的壮举。没有动态内存分配,在 Mars 上运行时调试代码,并即时上传错误修复。就稳健性而言,我想说这几乎是蛋糕。

于 2009-02-14T04:34:08.740 回答
5

我会告诉你我认为游戏程序最独特的地方,以及对我来说最令人印象深刻的可能是什么……是错误如何影响整体产品。如果您在 Outlook 中遇到错误(哈哈),有几种不同的方法可以解决它(我将在这里过度简化):

  1. 修复错误。
  2. 如果有另一种方法可以完成同样的事情,请给用户一个解决方法。
  3. 只需将错误保留原样,随它一起发布,不要担心。

对于大多数游戏,尤其是任何多人游戏,您通常无法选择#2 或#3。玩家寻找利用游戏的方法,所以如果你留下一个可以被利用的错误,它就会。因此,由于存在滥用的可能性,游戏中错误的容忍度实际上远低于大多数商业/生产力软件。

对我来说,这是让像《魔兽世界》或《无尽的任务》这样的大型复杂游戏系统真正令人印象深刻的主要因素之一。人们滥用游戏漏洞的程度非常惊人,而且有据可查。这与 Photoshop 或办公软件等产品形成了鲜明对比,只要有某种方法可以完成您需要做的事情,其他一些工作流程可能被破坏的事实并不一定是关键任务缺陷。 ..它至少有可能被忽略。这并不是游戏开发者所拥有的奢侈品。

现在……与空中交通管制或空中客车飞行软件之类的东西相比,游戏在任何地方都没有那种在线生活限制……那完全是另一类挑战。

于 2009-02-27T18:32:54.893 回答
5

我并不反对这里已经给出的任何答案,但我发现当人们想到“游戏的复杂性”时,他们会想到 GTA 或 MMORG,这很有趣。我想到围棋和国际象棋。

流行的游戏可能是计算密集型的,需要大量图形,但这本身并不难。另一方面,围棋是一个计算上难以解决的问题。

此外,如果您采用“复杂性”的技术定义,那么这不是一个主观问题。

于 2009-03-16T14:13:23.110 回答
3

我不知道您想如何选择衡量“复杂性”或“令人印象深刻”,但在大多数情况下,您桌面上可能拥有的某些软件(如 Office 或 Visual Studio)可能比任何视频游戏都更“复杂” .

(我认为现在的 VS 就像 5000 万行代码,虽然我在这里不一定是可靠的资源。)

于 2009-02-14T02:36:18.073 回答
3

不,游戏并不是那么特别。当然,与任何其他大型编程项目一样,存在大量相互冲突的目标,需要做出许多妥协,但最终,游戏的优势在于需求很少。如果您正在编写数据库,那么它必须满足 ACID 属性。无论何时以及如何拔下插头,它都不能丢失数据。如果您正在编写一个操作系统,类似的情况也适用,无论您对它做什么,它都必须是坚如磐石的。一款游戏也必须不负众望,但绝对必要的却寥寥无几。可以伪造大多数图形效果。可以在玩家没有观察到的区域伪造世界模拟。

如果您的游戏偶尔崩溃,这也不是世界末日。大型 AAA 游戏很复杂,是的,但它们并不是现有的最复杂的应用程序。远没有。

当然,游戏开发涵盖了广泛的技能组合和技术,但他们也有很大的余地,并且可以在大多数要求上妥协。如果我们只能在那个硬件上达到这个帧率就可以了。如果我们必须禁用软阴影以提高性能,那也没关系。可以根据“看起来令人信服”来伪造AI。

毫无疑问,制作大型高预算游戏是一项艰巨的任务。如果考虑到创建它所涉及的技术、专业和技能的广度,它可能是最复杂的应用程序类型。但是在编程方面,或者就计算复杂性或类似的东西而言,不,它并不是那么特别。

于 2009-02-14T04:04:12.183 回答
3

我真的很奇怪还没有人提到矮人要塞:)

矮人要塞其实是相当可观的。它可能缺乏闪亮的图形,但它在开放世界生成和模拟方面做了很多令人印象深刻的事情。

于 2009-07-01T09:14:01.433 回答
2

我认为在游戏世界中有一些“令人印象深刻”的代码的有趣例子。要看的地方是固定硬件的游戏,例如游戏机和较旧的家用计算平台。要查找的软件是在这些平台生命结束时出现的标题。

例如,BBC Micro 的 Elite 将 3D 太空格斗游戏、市场模拟和整个宇宙的地图塞进了 32KB。后来,同样的游戏被塞进了 NES。这一壮举涉及手工优化的汇编语言编码,其中认为花一天时间减少一个字节是值得的。

您可以在所有 8 位和 16 位平台上找到同样令人印象深刻的作品。还可以查看 Amiga 场景中的声音和图形演示。

所有这一切的驱动因素是你不能简单地用更多的硬件来解决问题。消费者无法升级硬件,并且要求更复杂的游戏。

此外,这些游戏令人印象深刻,因为它们是为最初不是为游戏设计的设备编写的。像“平滑 8 向滚动”这样简单的东西被认为是游戏的主要功能,因为硬件并不直接支持它,程序员必须非常聪明才能实现它。

那些日子可能已经结束了。也许有人会推动 PS3 或 Xbox360 做一些令人难以置信的事情,但似乎你可以在不大力推动这种硬件的情况下销售游戏,因此这样做的商业压力并不大。您所获得的只是图形质量的小幅改进、更大的环境或更详细的环境。

越来越多的手持设备功能太强大,无法进行这种令人印象深刻的低级编码。在现代手机上编写 3D 游戏无需费心费力。

所以,寻找其他硬件有限的地方。火星探测器就是一个很好的例子。

于 2009-03-16T14:39:27.727 回答
2

这实际上取决于我们如何衡量复杂性,我们正在关注哪些方面。如今,肯定有大量令人印象深刻的技术为视频游戏提供动力。

我想你们中的一些人可能会喜欢这个:美国宇航局的约翰·卡马克(John Carmack)因在月球着陆器上的工作而获得一等奖。

美国宇航局总部的约翰·卡马克(犰狳航空航天公司)

根据卡马克的说法,这个壮举很简单:

我在电子游戏中所做的工作实际上航空航天工作要复杂得多。

于 2011-08-09T04:54:46.977 回答
1

这取决于您所说的复杂性。

从算法的角度来看,从底层优化的角度来看,当然从数学的角度来看,游戏肯定比 VS 或操作系统更复杂。

尽管从代码大小的角度来看,从许多不同组件的交互角度来看,以及从需要支持(和调试)多种配置排列的角度来看,那么我会说操作系统更复杂。

于 2009-02-14T03:44:13.883 回答
1

在我的脑海中,我会说以下应用程序都涉及比普通游戏更复杂的代码和更多的低级代码:

  • 3D 工作室 MAX
  • 用于模拟汽车设计的物理和碰撞的软件
  • 用于模拟天气和创建预报的气象软件
  • 高端OCR软件
于 2009-02-27T19:42:39.047 回答
0

如果您包括大型在线游戏,我认为是的。他们必须利用大型系统所需的一切(分布式系统、协调这些系统、大量数据、事务/可靠性以确保库存保持正确等),所有这些都满足非常严格的性能要求(EVE Online 是主要的我正在考虑的一个)。

不过,也许不是最令人印象深刻的人工智能。我还没有在几天内无法弄清楚的游戏中遇到人工智能。

于 2009-02-14T02:29:48.633 回答
0

不。

如果我们将所有软件视为“应用程序”,我会说操作系统是(因为操作系统不是应用程序,而是系统)

于 2009-02-14T04:21:05.620 回答
0

一个例子:在某一时刻,Outlook 与数十万行代码进行了交互。任何理智的游戏开发者都不会接近这一点,因为它永远不会运行得足够快。

于 2009-02-14T17:14:48.240 回答
0

如果你包括开发过程,游戏肯定在那里。

于 2009-02-27T19:37:47.547 回答
0

我认为运行应用程序的引擎会很复杂。可能不是很多行(如操作系统),但非常复杂,因为它需要处理设计师需要投入的所有元素和场景并以最佳方式运行。

由于您在谈论游戏,因此许多游戏开发人员会购买引擎并对此进行反对。其中一些引擎的编写是如此公开,以至于它们被用于几个外观和感觉完全不同的应用程序。

于 2009-02-27T19:41:39.860 回答
0

有很多风险管理软件(以及其他基于统计分析的软件)给我留下了更深刻的印象。创造一个假世界(本身就令人印象深刻)是一回事,但试图预测现实世界将要做什么要困难得多。

于 2009-02-27T19:42:16.617 回答
0

我认为以某种方式控制现实世界的程序非常令人印象深刻,特别是如果它们控制一些大型系统

  • Gripen Fighter中的转向计算机是亚音速时空气动力学不稳定的飞机。计算机的任务是使其稳定并利用不稳定的力量来获得更大的转弯性能。

  • 我的一个朋友在 Jeppesen 工作,负责为主要航空公司安排机组人员。它必须为不同的国家制定不同的工作规则,并设法安排工作人员,以便他们希望能在离家近的地方上下班。我认为相当令人印象深刻...

于 2009-02-27T19:50:14.023 回答
0

有人提到空中交通管制软件——我很确定它非常复杂和可靠,但对我来说,它必须是全球航空公司票务系统——我认为它被称为 amadeus。

拥有数十万个航班和目的地以及定价选项,令人难以置信的是,它可以实时服务于基本上整个世界的请求。

我写了一些软件来计算酒店的房价。这不是大型连锁店或其他任何东西,只是一家酒店 - 甚至没有那么大。采用所有不同变量和规则并返回价格的代码......巨大且相当复杂。

在我看来,将其扩展到现在和未来运营的所有航班一定是最复杂的事情。

于 2009-06-19T13:47:13.970 回答
0

游戏是最复杂/最令人印象深刻的应用程序吗?

复杂的?不

感人的?依靠。印象深刻的有很多种。

例如,在容错性和正确性方面,它可能是用于医疗或航空航天应用的代码。

在可扩展性方面,我会说谷歌或亚马逊。

但是,游戏擅长的事情是从可用的硬件中获得最大的性能。对于其他应用程序,通常会有足够的硬件能力不关心它,但在游戏中你总是可以做出更好的渲染、更好的 AI 等。所以在可预见的未来,性能将是重中之重。在这个类别中,游戏非常令人印象深刻。

于 2009-06-25T14:03:11.060 回答
0

简短的回答:是的。尽管我正在回答这个问题:“我今天在想什么可能是有史以来最复杂/最令人印象深刻的应用程序。” 而不是哪个最复杂/最令人印象深刻的。

想象一下,试图开发一款模拟整个宇宙的游戏,并允许你使用 [x] 个超级大国来玩它。实际上,您可以将游戏变成任何复杂性的模拟,最复杂的是所有已知的物理,然后将非物理加入其中!就其本质而言,视频游戏可以像您想要的那样简单或复杂。

在我看来,这就是游戏开发的美妙之处。你可以创建一个你想要的任何细节级别的世界。你能想象到的任何东西,都可以变成游戏。理论上。

于 2009-12-16T20:58:27.853 回答
0

除了上面的一些很好的建议,我想指出Uniview相当令人印象深刻。

于 2010-07-23T12:48:49.147 回答
0

它们很复杂,是的。他们非常令人印象深刻,是的。

但是有一些系统可以与游戏相媲美。数据库管理器非常复杂且令人印象深刻。Mathematica 是另一个不错的软件。有很多例子。肯定有一些游戏在顶部。

于 2010-07-23T12:56:56.947 回答
0

至于复杂和“闪亮”的代码,我会说你应该看看 Loebner(sp?) 奖。这是一场为开发对话式图灵机而举办的竞赛。这是一个非常复杂且有趣的项目,其目标是编写可以与真人对话而不会被识别为机器的代码。

这有很多层面,语言学、记忆、语法和句法、自我重新编程。它本质上是一个迷你人工智能,如果我中了乐透,我想我会花很多时间来研究它。

我在开玩笑,我会在水上乐园度过一整天,喝醉了。但我会一直在这些东西。

于 2010-07-23T13:58:47.013 回答
-1

大多数现代的、面向图形的游戏,作为程序,并不是特别令人印象深刻或复杂(它们可能是复杂的游戏,但编程它们的概念不是)。

我发现一些基于文本的游戏的自然语言解析器令人印象深刻。

数据或代码行的绝对海量可能令人印象深刻,但在那里设置的任何给定标记都将很快被超越。实现的复杂性可能是极端的(例如,Microsoft 多年来在 Windows 中投入的所有 API 的无数交互),但根本不需要所有这些复杂性。哪些程序具有潜在的、不可避免的复杂性?

于 2009-02-27T23:07:32.800 回答