如何仅使用Excel创建可靠的游戏机制:解决方案的建模和优化

图片

我们在搜索,而不是迭代


游戏设计基本上是一个搜索过程。 从事设计,我们探索了许多可能的设计配置来解决特定的设计问题。 例如,它可以是一种连接地下城中各个房间的方式,各种游戏代理所拥有的一系列功能和技能,确定战斗系统中各单位效能的“魔幻数字”或我们游戏中将出现的功能组合。

就像AI控制的角色使用寻路系统来导航游戏世界一样,设计师需要导航可能配置的非常高级的空间,进行一些初始配置并对其进行迭代更改。 我们仔细考虑了设计的一个独立方面-战斗系统,游戏世界的一部分,战略中的技术树-并试图找到一种方法来通过更改此配置进行改进。

设计师喜欢使用“迭代”一词来描述这一过程,但是“搜索”一词在这里更为合适。 事实是,当我们创建设计的“迭代”时,我们会尝试开发游戏。 我们对少量修改进行了合理的假设,这些修改将当前的设计配置转换为新的配置,我们认为这将更好地满足设计标准。

这种“迭代”与线性变化完全不同,线性变化通常发生在计算机代码的“迭代”中。 更像是迷宫般的搜寻,有很多急转弯和强制返回。 通常,它们使我们更接近目标,但通常不清楚游戏是否从中得到了改善。 有时,事实证明,设计更改应该改进游戏,具有无法预见的缺陷,因此我们需要将其回滚或重试。

游戏设计是一门极为复杂的学科。 设计就像是一个黑暗的房间,里面有许多尖锐的物体。 安全地沿着远离崎,道路的道路安全行驶非常困难。 在此过程中,几乎总是有痛苦的伤痛在等待着我们,特别是如果您移动得太快的话。 而且,我们有许多用于照亮这个暗室的工具,也很少有明确定义和详细的技术来执行这种设计搜索过程。



由于存在这个暗室,因此我们执行“迭代”-在检查决定之前,我们不知道决定的后果。 换句话说,我们正在寻找 (Will Wright在2004年GDC上的演讲中称其为“在解决方案领域中寻找”)。

因此,设计经常成为性能瓶颈,缺陷的主要来源和游戏开发的最大风险因素。 结果,无数开发团队受制于构思不周的设计决策,创意过程的延误,功能的改变,对目标市场的误解以及其他导致产品质量问题的设计问题。

考虑到与设计实验相关的所有危险,许多发行商和大型开发商如此急于规避风险就不足为奇了,他们宁愿严格遵守已建立且经过充分研究的类型,许可和类型假设。 这就是为什么他们不去承担可能带来未知结果的设计创新的众所周知的风险。 探索黑暗的房间太冒险了。

我们想找到改变这种态度的方法。 不仅仅是避免创新,最好找到提高我们的设计技能,扩展我们的能力并创建强大的工具的方法,这些方法将使设计创新更安全,更有效。

本系列文章


本文将是有关建模解决方案的一系列文章中的第一篇。 建模解决方案是将解决方案分解为正式模型的一组工具,然后可以使用这些工具搜索以找到最理想的结果。

决策的建模和优化通常用于管理,财务,项目计划和许多其他领域,以改善决策过程并解决各种决策问题和优化。 这是通过在可能的替代方案中进行搜索来完成的,这比人们手动选择要快。

尽管具有所有潜在的优势,解决方案的建模和优化,但对于游戏行业的设计师来说,这似乎是一个尚未探索的话题。 在流行的开发人员论坛上对专业设计师进行的一项调查显示,只有25%的受访者至少听说过决策模型,只有8%的人在实践中使用了决策模型。 通过Facebook在设计师之间进行的一项类似调查显示,与同样数量的受访者大致相同的结果。


如果正确使用,建模解决方案可以显着改善设计过程的许多方面:

  • 它可以帮助优化特定设计系统的配置或游戏参数的最佳值。
  • 它可以将决策包含在游戏中的功能组合中,为决策提供启发。
  • 它有助于对玩家可以做出的决策进行建模,尤其是确定主导策略或玩家能够“击败系统”的方式。

在本系列文章中,我将讨论来自所有三种使用类别的示例。

定义


什么是“决策建模”?

简单地说,然后:

决策建模是模拟解决方案并随后自动搜索其计算过程。

我们首先提出某种解决方案,然后尝试选择该解决方案所包含的所有因素,然后将它们嵌入能够准确描述该解决方案的模型中,并指定一组输入变量和一个输出变量。 然后,我们决策变量(或输入变量)的集合搜索最佳解决方案,以创建所有可能的最佳输出。

如果一切都正确完成,那么我们可以寻找比可能的手动或想象中数量更多的解决方案。 尽管我们无法将此系统应用于所有事物,但是对于某些任务,我们可以获得更好的结果,可以更快地计算出它们,并且在某些情况下,我们甚至可以解决无法以其他任何方式解决的问题。

在此过程中,我们还指出了一个或多个条件 ,这些条件被用作确认模型正确性的边界。 这样的条件可能会限制值的范围或传入变量的类型,以及我们模型的任何其他方面。

为什么要建立模型?


如果您玩过Sid Meier的《文明》 ,那么您可能有一天会想知道:“等一下,开始城市发展的最佳方法是什么? 我需要先建纪念碑,然后再建仓库吗? 还是首先需要仓库? 还是先是寺庙,然后是仓库? 哪个决定更好 ? 谁能回答这个问题?”

您还可以回顾实时策略中的战斗机制。 平衡RTS中多个单元的参数是一项复杂的任务。 如果我们拥有一个系统,可以通过回答有关平衡游戏争斗的问题而不用玩每个解决方案的方式来加速解决平衡问题,那该怎么办? 如果我们可以问系统问题怎么办? 例如:“您需要打败几个剑客来击败两个挑夫和三个弓箭手?” 或者:“打败弓箭手的弓箭手和弹弓最便宜的组合是什么?”

实际上,可以创建这样的系统!

如果我们能够以正确的方式对这些设计任务进行建模,那么我们就可以使用自动优化工具来搜索所有可能的答案,以找到最适合我们标准的答案, 而不必玩数千次游戏。

这是一个类似问题的示例-我们将在本系列的后续文章中解决这个示例。

假设我们有一个名为SuperTank的游戏。 在SuperTank中,我们与其他超级战车一起在战场上驾驶巨大的奇妙战车 在每次战斗之前,我们可以为坦克选择特定的武器组合。


我们有100个积分,您可以在设备上花费。 玩家的超级坦克可以携带50吨武器,还具有3个“关键”插槽,用于放置特殊的大功率武器。

游戏具有以下五种武器,玩家可以使用任意数量的每种武器,也可以完全放弃使用:


假设我们需要超级坦克具有最高可能的伤害值(我们假设每秒伤害是指示出来的,而不管武器的速度如何)。 我们还假设所有武器具有相同的射程,射弹轨迹,精确度和发射频率,也就是说,除了表中所示的值以外,其他所有武器都相同。

现在,快速回答多少机枪,火箭,激光等。 需要放在超级坦克上吗? 在不超过重量,价格和关键插槽限制的情况下,哪种或多种武器的哪种组合会给我们带来最大的损害?

尝试手动解决问题或使用计算器。

能做到吗?

如果尝试,请迅速确保它出奇地困难。

也许可以使用复杂的数学方程式来解决它,但是我们是设计师,而数学不是我们的本事。

还考虑答案将如何随其他参数而变化。 如果超级坦克可以容纳60吨而不是50吨,答案会改变吗? 或者,如果不是100笔贷款,而是110笔或90笔? 最佳档位将如何变化? 如果我们有2或4个关键插槽?

现在想象一下,我们有一个系统可以立即计算出任何一组参数(重量,价格,关键插槽)中损坏最大的武器布局。 从表中输入武器的参数,然后输入超级坦克的参数(50吨,100积分,3个关键插槽)就足够了 -我们有最好的设备。

那不是很棒吗?

我们可以使用该系统立即获得各种有用问题的答案:

  • 当超级战车的参数发生变化时,最佳方案将如何变化?
  • 更改武器参数时,最佳装备将如何变化?
  • 对于任何给定的参数(重量,价格,临界槽),超级坦克可以造成的最大伤害是多少?
  • 每种武器的所有四个武器参数(损坏,重量,价格,关键位置)是否适当且平衡?
  • 我们是否拥有过于频繁使用的强大枪支? 如果任何类型的武器都非常有用,以致使用起来总是正确的,那么它将永远是最佳解决方案,因此将没有有意义的选择。 在这种情况下,我们应该从游戏中删除武器,或者更改其平衡,以便在某些情况下不起作用
  • 我们是否很少或从未使用过武器? 与上一段类似-如果某种武器是如此无用,以至于永远不会使用正确的决定,那么也就没有重大选择。 在这种情况下,值得将武器从游戏中移除或更改其平衡,以便在某些情况下使用它是明智的。

所有这些都是非常重要的设计问题,是任何设计师都应该知道的答案。 在平衡SuperTank游戏时,知道这些答案将非常有用。

在短短几段中,我们描述了一个很难手动解决的任务,但是使用Microsoft Excel中内置的工具却可以轻松解决。

在以后的文章中,我们将为该示例构建一个实际的解决方案模型,该模型将回答上述所有问题。

您将看到可以在几分钟内创建的模型将使您解决此难题。 在短时间内,我们将创建一个功能强大的工具,使我们能够快速可靠地探索设计空间。

路线图


在本系列文章中,我们将说明一些更复杂的示例,并创建参考电子表格,以便您仅使用从工具安装的Excel即可自己执行所有这些示例。 这些示例包括:

  • 策略游戏之战的简单例子
  • 一种用于在空间大规模多人游戏(MMO)中优化多个传送“虫洞”相对于彼此和填充扇区的坐标的模型
  • 该模型可确定城市简化模型的税费水平,以便在Sid Meier的《文明》等4倍策略中平衡居民的满意度和税收收入
  • 在大型多人游戏中选择角色类别的咒语和技能的模型
  • 与经典的《猎户座大师》类似,采用4倍策略确定行星殖民地最佳建造顺序的优化模型
  • 团队尝试为游戏找到正确的功能组合的示例,以及帮助他们选择适当折衷方案的决策模型

总的来说,该系列文章将由一些简单的示例组成,这些示例可以在特定的游戏子系统中找到最佳玩家策略,然后继续进行决策模型,以优化游戏系统的参数和优化“功能”组合。

在上述每种情况下,我们都将描述任务,展示如何在Excel中对其建模以及如何使用Excel中的内置求解器工具(俄语版本-“查找解决方案”)进行求解。 在每种情况下,您都会看到,与不使用Solver或类似工具相比,我们可以使它更容易,更快和更可靠。 另外,对于每个示例,我将添加电子表格,以便您可以下载电子表格并自己检查出来,重新创建结果并尝试使用自己的模型。

同样,不要忘记内部表示形式(无论是电子表格,高级语言程序还是其他内容) 都没有关系 。 重要的不是我们在Excel和Solver,Java / C ++ / C#或其他版本中的工作方式,而是我们为任务建模并努力解决的事实。

为什么要使用决策模型?


一些读者现在可能会持怀疑态度。 似乎建立决策模型需要大量工作。 如果我们能够以焦点小组测试和Beta测试的形式进行自定义测试,为什么需要所有这些努力?

首先,我将说建模解决方案并不适用于每个任务 。 有些任务太复杂或太难使用这种技术来建模,此外,设计中的许多方面(例如,美学考虑,游戏作为娱乐的价值和游戏的“感觉”)很难或什至无法进行数字建模。 建模解决方案绝对不能消除对团队测试,beta测试或在项目开发过程中每天玩自己的项目的需求。

但是,即使考虑到了所有这些因素,在本系列文章的最后,您仍然可以清楚地看到,建模和解决方案优化的方法为我们提供了一套独特而强大的工具。 他们可以完全或部分解决许多其他方法无法解决的问题,并为您提供各种其他方法难以解决的设计问题的答案和信息。

与任何其他工具一样,其用户必须确定其适用性。

在许多情况下,决策模型可能无法接受或过于繁琐。 但是,正如您在系列文章中所看到的那样,它们也非常有用,而且在早期阶段甚至在测试阶段之前,我们做出正确的设计决策并消除错误的次数越多,设计系统越可能持久,令人兴奋。毫无疑问

考虑一下典型程序员可以使用的工具。 程序员的工作非常复杂,但是许多工具甚至可以在测试阶段之前就将其简化以帮助发现错误。 他们的编译器不断提醒您输入错误。 他们具有识别软件缺陷的防御性编程实践; 他们进行代码审查,以帮助发现其他人的代码中的缺陷或指出恶意的编程做法; 此外,他们拥有许多性能分析和静态分析工具,可以消除各种性能错误和其他缺陷。

但是设计师没有这种工具。 可以说我们的工作也很复杂,但是我们没有可以告诉我们“语法错误”的编译器。我们既没有分析器,也没有调试工具,也没有静态分析工具。我们无法进行代码审查,因为我们没有任何“代码”。我们编写规范和设计文档,仅此而已;我们可以在团队内交换文档和功能规格,并希望我们的同事能给我们很好的反馈,但是大多数情况下,我们需要将系统放入游戏中以了解其是否有效。

这使得设计具有极大的风险,冗长且昂贵。

就像编程一样,人们容易犯错误,这是过程中不可或缺的一部分,因此我们需要尽可能多的高质量工具来保护自己和我们的项目。

我们距离拥有可帮助设计师探索设计空间的成熟设计工具还很遥远。我们仍然需要遵循编译器,调试器,分析器和静态分析工具在编程中所做的工作。但是,我们已经看到的游戏设计一些特定的求解器和工具的曙光,包括测试可玩版本切的绳,叫割绳子:玩永远(链接); Ludi的抽象游戏设计系统,该系统生成了Yavalath棋盘游戏(link);和我自己的自动助理Evolver,用于平衡City Conquest手机游戏(链接)。

建模解决方案将帮助我们采取更多步骤以达到如此水平的支持,并将使我们能够开始借助自动化工具来补充和扩展设计师自身的才智。如果我们有一个选择:拥​​有或不拥有工具,为什么选择“不拥有”呢?

主要不是电子表格,主要是模型


本系列文章专为设计师(即所有设计师)而设计,无论他们拥有哪种经验:美术,软件,创建故事或棋盘游戏的经验。因此,我们不会复杂化并承诺以下内容:

  • . Microsoft Excel Solver (« »). , Excel, . , , ( ) .

  • (, , ). , : , , , . .


如果您是设计师,那么这一系列文章将为您提供创建自己的解决方案模型所需的所有工具,而无需您或程序员编写代码。如果您是一名程序员,那么本系列文章将为您提供关于使用任何Java语言编程自己的解决方案模型的相当直接的说明,以便您可以从头开始或基于Solver和Excel中已经使用的模板来构建自己的解决方案模型。

这些文章只是一个起点,因此您可以采用此处介绍的概念并自行选择:是在Excel中实现它们,还是选择其他优化工具,还是尝试以高级语言构建自己的求解器。电子表格是一开始的坚实基础,但这种决策模型更有可能成为与您的游戏体系结构集成的更丰富,更复杂的模型的跳板。

说明


在深入探讨建模解决方案之前,我们需要给出一些解释。解决方案的建模和优化不会为游戏设计创建任何完整的系统,我们也不会这样说。将它们视为有助于设计过程某些方面的工具很有用,并且像任何工具一样,它也有很多局限性。

这是您需要了解的一些限制:

  • . , , . , , . , , , , , .

  • (). , . « », , Excel. ( / ), ( ), .

  • . , - , , «» . . , , /, .

  • . , Excel Solver, , , , . Solver , . , , « » . Solver ( Frontline ) , , Solver .

  • 它们不能保证最优性由于我们使用复杂的模型,因此不可能100%地确定我们已经找到了最佳解决方案。有时,我们不得不专注于次优:我们将花费更多的时间进行优化,或者从头开始并再次进行优化,以便我们可以高度肯定地说我们已经找到了最佳解决方案或非常接近最佳解决方案。

最后也是最重要的:

  • 我们需要确保模型参与了必要的任务并非所有任务的重要性都足以要求此类工作,我们需要准确地了解我们的优先级,并避免不必要地专注于优化无用的任务而忽略其他更重要的任务,这可能更为重要。

简而言之,为了使解决方案建模有用,必须满足一些条件。我们应该能够将问题的解决方案嵌入某个离散模型中,并将解决方案的结果表示为单个值。换句话说,我们应该能够使用解决方案模型在一个输出值中表达一组有限的输入数据,以便最小化或最大化输出值可以为我们提供改进的解决方案。

在某些主观方面无法嵌入此模型的情况下,例如美学方面或可用性/可玩性方面,我们将需要将它们与决策模型清楚地分开,或者将决策模型用作第一阶段,或者完全放弃决策模型。

为了能够在电子表格中为解决方案建模,我们还需要限制模型的复杂性。如果我们的游戏执行的操作非常复杂,则可能无法在Excel中重新创建这种复杂性。但是,应该记住,这仅是可以在Excel中构建的模型功能的限制,而不是决策模型本身的限制。在我们自己的游戏引擎中,我们可以构建功能更强大的求解器,我希望本系列文章能够激励您做到这一点。

另一方面,所有这些限制不太可能使决策建模变得毫无用处。即使在解决方案模型中任务过于复杂而无法进行完整优化的情况下,该模型仍然可以帮助我们选择更接近正确配置的许多设计组件,甚至在开发的早期阶段就可以找到并调试许多基本任务。

即使解决方案模型无法找到问题的最佳解决方案,要么是因为任务太复杂,要么是因为它需要美观的方法和其他主观的人为因素,但它仍然可以帮助缩小解决方案的范围,消除僵局并降低问题的复杂性。

最后,即使您决定不使用决策模型,不要尝试优化电子表格或创建自己的求解器,对决策模型的理解仍将帮助您改变设计决策的思路。

本系列文章是一项研究。我们将查看许多游戏设计任务的示例,并探索功能强大的设计工具提供的建模和优化方法。您可能会持怀疑态度,或者决定根本不使用优化,但是我希望您能继续研究并找出我们如何结束本系列。

结论


最后,我们要正确创建设计

许多设计问题是主观的;它们没有“正确”或“错误”的答案。但是在某些情况下,它们肯定在这种情况下,我们需要知道如何获得正确的答案,或者至少了解如何解决“正确”答案的定义并寻找解决方案。

解决方案的建模和优化是功能强大的工具,可在许多情况下为我们提供帮助。我相信这样的工具应该在每个设计师的工具中。适应了它们之后,您将意识到,在更快更可靠地研究游戏设计的暗室时,这些工具具有巨大的未实现潜力。在我们的系列文章中,我们将展示其用途。

第2部分。优化和仿真部署的基础


可以在此处下载本文的电子表格

解决方案模型准备


既然我们已经讨论了解决方案模型,解释了它们的用途,并列出了它们的一些局限性,那么我们想用一个简单的例子来说明基本概念。

但是在执行此操作之前,我们需要引入一些有关结构和格式的规则。与代码一样,如果您不小心,电子表格会很快变成混乱。

简单来说,电子表格中将有四种单元格类型:

  • — , — , . 0 - , . , , . .
  • « » — . , , Tootsie Pop 17 0,25 , « ». .
  • «» — , . .
  • “目标”(或“出口”)是在优化程序运行时我们力求最小化(或最大化)的单元格。在我们的示例中,始终只有一个目标单元格,它始终具有橙色和黑色轮廓。注意:有更强大的求解器支持处理多个目标,但是对于我们的文章而言,它太复杂了。)

当我们运行优化器(Microsoft Excel内置的求解器工具(“求解器”)时),它只会查看我们指定的目标单元格,然后尝试更改决策变量,但是它可以(在我们设置的限制内)或最小化,或最大化此目标单元格的值(我们指定的任何值)。

求解器几乎不了解内部进行的计算,也不知道决策单元和目标单元之间的联系。他只是执行对他可用的几种算法之一,试图通过搜索解决方案单元格的可能值来最小化或最大化目标单元格的值。这样的算法(“ Simplex LP”,“ GRG Nonlinear”,“ Evolutionary”)经过精心设计,比通过蛮力探索可变解决方案的所有可能选择要聪明得多,并且常常能以惊人的效率找到严重问题的答案。

例如,如果我们想知道您需要舔几次才能到达Tootsie Pop的中间,我们可以使用类似的电子表格:


我们可以要求Excel Solver通过将其排序为最小化目标单元格“ Tootsie Pop上剩余的质量”来解决此问题,他将很快通过实验确定黄色溶液单元格的值给出了这样的结果( “要舔几次才能到达Tootsie Pop的中间”,是68。

当然,这样做有点愚蠢,因为从问题的陈述中很明显,答案将是17 / 0.25 = 68。 运行优化器来解决可以通过简单算术解决的问题是没有意义的。

但是,在实践中,我们面临的大多数问题都不会有简单的数学解决方案。 他们将有很多决策变量以非显而易见的方式达到目标,并且对于决策方程的手动数学计算而言,匹配决策变量和输出将过于复杂(同样,在本系列中,我们将谨慎地避免复杂的数学运算)。

我们将专注于任务的描述,并将所有艰苦的工作留给Solver。

示例1:税收


在我们的第一个实际决策模型中,我们将展示确定最佳税率的示例。 没有人喜欢税收,但在这种情况下,我们将不纳税,而是收税; 我希望这会减轻您的痛苦。

想象我们正在创建类似于Sid Meier的《文明》的4倍策略。 我们正在根据城市的规模创建具有一定程度的不满的城市。 “不满意”的居民基本上不愿意合作,我们也不会从他们那里获得收入。 我们还可以尝试通过更改每个城市的税率从城市中获利,但是随着税率的提高,不满程度将成倍增长,因此很高的税率会适得其反。

还假设我们可以在0%到50%的值范围内以10%的增量表示税率。 这是一个截图,显示了与Orion 2的经典4X策略类似的系统:


作为设计师,我们想问一个简单的问题:一般情况下的最佳税率是多少?

这应该是一个简单的任务,因为税率只有6个可接受的值。 我们可以简单地手动测试这6个值中的每个,找到给我们最大收入的一个,然后考虑解决的问题!

(实际上,您可能会找到一个数学方程式来解决此问题,例如在Tootsie Pop的示例中,但它会适得其反,因为我们正在准备此模型,以使其成长为一个更复杂的模型,无法使用方程式进行求解。此外,在本系列文章中,我们避免使用数学。)

让我们首先描述任务,如下所示:

  • 我们的城市规模为12(意味着1200万人)。 这些人被表示为12个单独的“公民”。
  • 每个公民在任何给定时间都可以感到满意或不满意。
  • 满意的公民以税收的形式支付(税率x 10)(例如,如果税率为20%,则每个满意的公民可得到2个货币单位的税收收入)。
  • 不满意的公民不纳税。
  • 无论税率如何,城市中仍有3名不满意的公民仍然不满意。
  • 根据以下公式,会有更多的公民不满意:(人口)x((税率)x(税率))x 3.5,该值四舍五入到最接近的整数。 对于我们的12级城市,这将使我们再增加0个不满意的公民(比例为0%和10%),另外1个不满意的公民(比例为20%),3个另外的不满意的公民(比例为30%),6个不满意的公民(比例为40%)和10个率为50%。

很简单,对吧?

我们将在本文所附电子表格中对此进行描述,如下所示:


您可能会注意到,我们将黄色决策框(税率(0-5))设置为指示税率的间接方式。 而不是直接在决策单元格中指定税率,税率计算单元格从决策单元中获取税级数字并将其乘以10%。 出于逻辑原因间接进行此操作,我们很快就会看到。

现在,我们可以尝试并替换所有可能的税率值。 您可以在Tax Level单元格中简单地输入0到5之间的每个数字,并获得以下信息:


如您所见,有一个最佳税率:30%,可以最大化税收,给出18个货币单位。

让我们自动化系统!


这当然很棒,但是如果我们有六个以上的选择呢? 如果有数百种可能的税率,或者我们需要更改其他决策变量怎么办? 一切都会变得太复杂,以至于无法手动测试这些值。

正如我们将看到的,这正是Solver的用途。

首先,我们将Tax Level单元的值重置为零。 然后,我们将转到Excel的“数据”选项卡,并在磁带右侧的“分析”部分中看到“求解器”按钮(“搜索解决方案”)。


如果看不到它,请转到Excel选项,选择“加载项”类别,并确保在“管理”下拉列表中选择了“ Excel加载项”。 ),单击“执行”,并确保已选中“求解程序加载项”。

单击规划求解按钮后,您将看到一个类似的对话框。


现在,让我们看一下设置“求解器”对话框所涉及的所有步骤。

在“设置目标”字段(“优化目标功能”)中,我们指出了需要优化的内容。 在这种情况下,我们试图获得尽可能多的税收,因此我们将选择代表税收的目标的橙色框,然后单击单选按钮列表中的“ To:Max”。

在“通过更改可变单元格”部分中,选择“解决方案查找器”应计算的单元格。 我们需要确定最佳税率,因此选择黄色的解决方案框(税率(0-5))。 如果一切正常,那么此单元格将被赋值为3,对应于30%的税率,这是我们在手动计算中已经确定的最优值。

最后,我们需要添加一些限制 。 实际上,约束是我们解决方案模型中任何单元格的先决条件,并且Excel Solver将仅关注那些满足指定约束的解决方案。 这样的限制可能会将某些单元格(通常是决策单元格和计算单元格)限制为指定的最小值和/或最大值,并且/或者使Solver将它们作为整数或二进制变量(0或1)进行处理。 约束对于创建正确的模型非常有用,这将受到限制。

求解器至少需要一些限制,才能确定决策单元的边界,换句话说,就是每个单元的最小值和最大值。 要添加限制,您需要单击右侧的“添加”按钮,然后将打开以下对话框:


我们将添加两个约束,一个约束使Tax Level决策单元满足条件> = 0,另一个约束使该决策单元满足<=5。然后,在“求解方法”列表中,选择“进化”(“ Evolutionary”搜索解决方案“),然后单击解决(”查找解决方案“)。

在工作大约30秒钟后,Solver将给我们类似的答案:


哦,有个问题。 Solver收到了正确的收入金额,但是税率不正确。 玩家只能以10%的增量设置税金,但是Solver显然会设置分数税率,而玩家则不能这样做。

您可以通过将税率单元格的值限制为整数来解决该问题。 它只能等于0、1、2、3、4或5,但不能等于中间值。

幸运的是,在规划求解中,这很容易实现。 打开求解器,单击“添加”按钮,选择“征税级别”解决方案单元,然后在中间的下拉列表中选择整数限制:


现在再次运行规划求解,并获得以下信息:


太好了! 不费吹灰之力,我们就能在Solver找到正确的答案。 我们将很快看到,随着任务规模的增加,该工具为我们执行的工作量大大超过了设置它所花费的时间。

成长中的城市


现在,通过稍微复杂化城市模型来扩展任务。

在任何4倍策略中,城市(或星球,殖民地或其他有人居住的单位)都会随着时间增长。 我们将假设该城市的转弯速度不断增长,从1,500,000(150万)居民开始,到1200万居民不断增加。 现在,我们的电子表格将如下所示:


表格的每个新的后续行都描述了游戏的一个过程。

我们还更改了基本不满程度的计算。 现在,它被计算为基本人口水平的一秒(百万),四舍五入。 因此,基本不满将是0,直到城市增长到4号为止,此后它将不随城市的大小线性增长。

和以前一样,我们可以通过更改“税率”值来手动尝试税率。 我们将获得0、102、190、222、144和65单位货币的税收,每种税收级别从0%到50%。

同样,我们可以让求解器解决该问题; 他将很快像以前一样确定最佳税率是30%,这使我们获得了222个货币单位的收入。 求解器对话框如下所示:



可变税率


但是,当然,玩家不会这样玩。 我们模拟的“城市”设置一个税率,并且每次游戏都保持相同。 但是,真正的玩家可以随时设置税率,并且由于城市的发展以及环境的变化,他经常需要调整税率。

如果我们不仅可以确定一个最佳税率,而且还可以计算每一步的最优价值,那不是很好吗?

她将立即让我们知道玩家如何最好地调整税收。

事实证明,这可以做到! 已经以正确的方式建立了解决方案模型,我们可以轻松地实现它。

最大的不同是,我们需要删除“税收级别”决策单元格(0-5),并用整列的“税收级别”单元格代替,如下所示。


现在,我们不再要求Solver优化单个单元格,而是命令他优化整个“税额”列。 求解器对话框如下所示-您可以看到它与以前几乎相同,只是变量和限制现在代替了一个单元格,而在Tax Level列中却代表了整个单元格范围。


Solver实际上证明了税率的变化会改变结果-累积收入现在为232个货币单位。 与相同的税率相比,增长率仅为5%(222比232单位),但这仍然很重要,因为我们知道一些参与者将能够实现这一目标。

仔细研究Solver收到的解决方案,您可以看到它以50%的税率开头,因为1号城市没有足够的人口来引起不满。 在城市增长过程中,该工具将税率从20%更改为30%,具体取决于哪一个会带来更多收入。

此示例的电子表格可在此处下载; 其中,此示例的三个阶段分为电子表格的单独工作表(对于具有永久人口的城市,征税相同,对正在发展的城市,征税相同,对于正在发展的城市,税率可变)。

结论


我们发现的解决方案显示出一些有趣的东西:我们的游戏模拟器的离散性质,将成千上万的人任意组合为离散的“公民”,可以具有一个或两个离散的满足状态,从而将特征引入了模型。 尽管出于可访问性和可玩性的考虑,游戏本身在某种程度上需要进行离散化处理,但精明而狡猾的玩家将能够利用这种人为分散的优势,以获得比不想每次都打扰税率的玩家更高的优势。

这种情况导致一个有趣的问题:这就是我们想要的吗? 玩家的机制是否使他们有必要在每个回合中对税收水平进行微观管理? 我们是否希望让面向电源的游戏玩家以此方式击败系统? 这样的技巧与他们的5%收益相符吗?

我无法回答这些问题。 最后, 是一个确定设计目标的设计师,因此由您决定此系统操作级别是否满足您为游戏设定的目标。

当然,此模型只是一个光秃秃的框架。 在真正的4倍策略中,参与者可以就如何发展城市,建造建筑物以及进行其他影响城市发展,满足程度,税收和生产力的变化做出各种决定。

在该系列的后续文章中,我们将在类似《猎户座大师2》的游戏中为整个行星殖民地建立一个相似但复杂得多的模型。 这个示例将更加复杂,因为我们将能够在每个回合中做出将进一步影响所有这些参数(例如增长和生产率)的决策,也就是说,每个决策都会产生影响后续决策的后果。 但是,我们仍然坚信Solver工具的进化优化器能够应付此任务。

在下一篇文章中,我们将兑现我们的诺言,并在介绍性文章的示例中优化SuperTank的武器购买。

Source: https://habr.com/ru/post/zh-CN429258/


All Articles