【问题标题】:AI - How to concisely generate all possible results based on rules [closed]AI - 如何根据规则简明扼要地生成所有可能的结果 [关闭]
【发布时间】:2015-02-09 19:50:09
【问题描述】:

我有一个问题:一个房间可以容纳 13 人,一个 9 人,另一个 4 人。房间一开始都是空的 0 0 0 可以填满,或者一个房间的内容可以转移到另一个房间.因此,对于像 13 0 0 这样的情况,13 可以填满第三个房间,使其成为 9 0 4。依此类推。我想生成所有不同的可能性(跟随每一代,直到我达到 END 或我已经生成的状态。我已经使用很多 If Else 语句实现了这个......我可以生成这个的最简洁的方法是什么?

【问题讨论】:

  • 向我们展示你的代码,根据问题的措辞,我还建议codereview.stackexchange.com 进行广泛的代码审查。
  • 这听起来像是递归的好例子。

标签: java if-statement artificial-intelligence generator rules


【解决方案1】:

您可以定义一个名为 State 的类,其中包含三个房间的状态,例如,您可以执行类似 State st = new State(13, 0, 0) 的操作。状态构造者也可以验证状态,以保证第一个房间只能容纳 13 人,第二个房间 9 人,第三个房间 4 人。

然后你可以实现一个名为expand的函数,签名为:

List<State> expand (State st)

这个函数接收一个状态并返回一个可以从接收到的状态生成的状态列表。

要做的事情:

我想产生所有不同的可能性(跟随每一代 直到我到达 END 或我已经生成的状态

有很多方法可以做到这一点,这取决于你想得到什么样的数据?你想要一组状态来引导你到你想要的状态吗?还是只想知道状态是可达的?

编辑: 好的,既然你想获得所有可达的状态,你可以创建另一个函数,比如:

List<State> getReachableStates(State root)

现在您可以通过递归方式或迭代方式来实现它。 这是迭代的: 此方法包含扩展状态列表和扩展状态列表,初始包含您作为参数接收的根状态。然后,当您有一个要扩展的状态时,您可以对从要扩展的状态列表中删除的状态调用 expand。 调用 expand 后,将扩展状态添加到已处理状态列表中,并将调用 expand 的结果添加到处理列表中。 结束时,返回展开状态的列表。

【讨论】:

  • 我想生成所有可达状态,这意味着我必须考虑将部分房间转移到另一个房间的各种情况,另外,任何时候房间 = 0,它都可以更改为 max (作为一个可能的举动)
猜你喜欢
  • 2011-01-26
  • 2015-01-19
  • 2022-10-08
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2019-05-22
相关资源
最近更新 更多