谷歌电子表格与SQL查询-寻找最佳组合

谷歌电子表格与SQL查询-寻找最佳组合,sql,google-sheets,combinations,Sql,Google Sheets,Combinations,我有一个谷歌电子表格用于我的游戏信息。它包含两张表-一张用于怪物信息,另一张用于团队信息 怪物信息表包含怪物的攻击值、防御值和法力消耗。它就像一个我可以召唤的怪物数据库 团队工作表执行以下操作: 询问我目前拥有的法力值 计算最多5个我可以召唤的怪物列表(可以少于5个) 每个怪物都有自己的法力消耗,因此总法力消耗不得超过我在第1点给出的法力值 列表应该给我一个组合攻击值最高的团队。召唤多少怪物并不重要。但是每个怪物不能被召唤两次 我一直在考虑使用query()函数,以便使用SQL语句。(这样我就有

我有一个谷歌电子表格用于我的游戏信息。它包含两张表-一张用于怪物信息,另一张用于团队信息

怪物信息表包含怪物的攻击值、防御值和法力消耗。它就像一个我可以召唤的怪物数据库

团队工作表执行以下操作:

  • 询问我目前拥有的法力值
  • 计算最多5个我可以召唤的怪物列表(可以少于5个)
  • 每个怪物都有自己的法力消耗,因此总法力消耗不得超过我在第1点给出的法力值
  • 列表应该给我一个组合攻击值最高的团队。召唤多少怪物并不重要。但是每个怪物不能被召唤两次
  • 我一直在考虑使用query()函数,以便使用SQL语句。(这样我就有希望直接检索列表)

    我在“团队”表中有这些公式

    • A5:=查询(‘怪物信息’!$A$:$D,“按B描述限制5选择A、B、D订单”)
    • B5:=继续(A5,1,2)
    • C5:=继续(A5,1,3)
    • D5:=C5
    • A6:=继续(A5、2、1)
    • B6:=继续(A5,2,2)
    • C6:=继续(A5、2、3)
    • D6:=D5+C6
    这只会得到5个最好的攻击怪物,不考虑法力消耗。我如何做到这一点,使其同时考虑攻击值和法力消耗值?下面的示例中还显示了另一个问题:

    Example: (simplified version, without defense value etc)
    Monster        Attack     Cost
    MonA           1400       50
    MonB           1200       35
    MonC           1100       30
    MonD           900        25
    MonE           500        20
    MonF           400        15
    MonG           350        10
    MonH           250        5
    
    如果我有160法力,那么明显的团队是A+B+C+D+E(5100次攻击)

    如果我有150法力,它将变成+B+C+D+G(4950次攻击)

    如果我有140点法力,它将变成+B+C+D(4600次攻击)

    如果我有130法力,它将变成B+C+D+E+F(使用125法力进行4100次攻击)或A+B+C+F(使用全部130法力进行4100次攻击)

    如果我有120点法力,它将变成B+C+D+E+G(4050次攻击)

    如果我有110法力,它将变成B+C+D+F+H(3850次攻击)

    正如您所看到的,结果中并没有真正的模式


    有没有专家愿意分享他们对这个问题的见解?

    这个问题我已经研究了一个小时,我这里只有一个解决办法。您的问题似乎是一个标准的线性规划任务,应该可以通过“解算器”软件轻松解决。谷歌电子表格中曾经有一个所谓的“解算器”,但不幸的是,它被从最新版本中删除。如果您不坚持使用Google解决方案,您应该在Solver支持的电子表格管理器软件中进行尝试

    我尝试了MS Office(它有一个解算器加载项,安装指南:)

    在运行解算器之前,应该准备一点原始数据集,包括辅助列和单元格

  • 在“Cost”列旁边添加一个新列(假设它是“D”列),并在其下放置每行0或1。本栏将告诉您是否选择怪物加入攻击团队

  • 再添加两列(分别为“E”和“F”)。这些列将分别是攻击和成本的产物。因此,您应该为E2单元编写一个函数:=b2*d2,为F2单元编写一个函数:=c2*d2。通过这种方式,如果选择了一个怪物(记住,这是由D列告诉的),适当的E和F单元格将是非零值,反之则为0

  • 在最后一行下创建一个SUM行,并分别为D、E、F列创建一个summary函数。在我的电子表格中,D10单元格的值如下:=sum(d2:d9),依此类推

  • 我创建了一个电子表格来显示以下步骤:

    在启动解算器之前,请记住将此工作表复制到MS Office工作表中

    现在,您已准备好启动解算器。(数据菜单,MS Office中的解算器)。您可以在此处看到有关使用解算器的视频:

    这并不像看上去那么难,但对于本例,我将描述在哪里写什么:

  • 设置目标:您应该选择“E10”单元格,因为它表示所有攻击点的总和

  • 选中“Max”单选按钮,因为我们希望最大化攻击的价值

  • 通过更改可变单元格:选择“d2:d9”间隔,因为这些单元格表示是否选择了怪物。解算器将尝试调整这些值(0或1),以最大化求和攻击

  • 受制于约束条件:这里我们应该添加一些约束条件。单击“添加”按钮,然后:

    • 首先,我们应该确保d2:d9都是二进制值。所以“单元格引用”应该是“d2:d9”,从下拉菜单中选择“bin”作为二进制

    • 另一个限制应该是所选怪物的总和不应超过5。因此,选择表示所选怪物总和的单元格(D10)并添加“仍然没有人知道如何做到这一点?谢谢你的回复。但很明显,我已经很久没有登录了,所以我不知道这里有回复。如果我没记错的话,我当时就放弃了,我现在没有任何其他场景需要这样做。然而,我并没有想到office中有一个solver附加组件。我想总有一天我会去看看的
      Example: (simplified version, without defense value etc)
      Monster        Attack     Cost
      MonA           1400       50
      MonB           1200       35
      MonC           1100       30
      MonD           900        25
      MonE           500        20
      MonF           400        15
      MonG           350        10
      MonH           250        5