我有以下列表
Cards: [B1 G1 O1 R1 G2 G3 R4]
Sets: [G1 G2 G3]
Sets: [B1 G1 O1 R1]
一组可以是相同颜色但连续的卡片 或价值相同但颜色不同的卡片
我的排序算法快要结束了,这是我遇到麻烦的地方。
目标是玩尽可能多的纸牌。我创建的AI可以找到集合。我的问题是我不确定如何使用算法来帮助AI做出正确的决定。
如果首先播放最大的Set[B1 G1 O1 R1]
,则它将无法播放Set[G1 G2 G3]
。
当然,如果它先播放set[G1 G2 G3]
,那么它将能够播放[B1 O1 R1]
当我到达这么小的列表时。如何计算AI的最佳路径?任何帮助将不胜感激..
答案 0 :(得分:0)
这是一种指数爆炸的方法,因此仅适用于一小部分卡片。这可能对您来说就足够了,或者可能为找到更好的解决方案指明了方向,所以我想我会写出来的。
创建一个图形,其节点是可以创建的集合。因此,在您的情况下,节点为:
{G1,G2,G3} {G1,G2} {G2,G3} {B1,G1,O1,R1} {B1,G1,O1} {B1,G1,R1}, {B1,O1,R1} {G1,O1,R1} {B1,G1} {B1,O1} {B1,R1} {G1,O1} {G1,R1} {O1,R1}
如果这两个集合是兼容的选择,即它们没有交集,则现在将两个具有边缘的节点连接起来。因此您图形中的边缘是
{G1,G2,G3} -- {B1,O1,R1}
{G1,G2,G3} -- {B1,O1}
{G1,G2,G3} -- {B1,R1}
{G1,G2,G3} -- {O1,R1}
{G1,G2} -- {B1,O1,R1}
{G1,G2} -- {B1,O1}
{G1,G2} -- {B1,R1}
{G1,G2} -- {O1,R1}
{G2,G3} -- everything after it
{B1,G1,O1,R1} -- nothing after it
same for all the 3 element subsets from there on
{B1,G1} -- {O1,R1}
{B1,O1} -- {G1,R1}
{B1,R1} -- {G1,O1}
您现在的目标是在该图中找到最大的集团,集团是相互兼容的集合...集团中的每对节点之间都有一条边。您可以使用一些库来查找最大的集团,但它或多或少归结为蛮力搜索(CLIQUE是NP困难的)。一个库至少可以为您节省一些打字时间。实际上,您想要的是最大集团,集团的值是节点权重的总和,其中节点的权重是集合中与该节点相对应的元素数。集团图书馆将为您找到最大的集团。
可能有更好的方法,但这就是我目前所拥有的。