Prolog - 在列表排列中获得最佳值

问题描述 投票:0回答:1

在 Prolog 中,我有一个包含 12 个字符串的简单列表。我还有一个规则列表,这些规则一起为该列表分配分数。因此,根据这些元素在我的列表中的放置方式,它们可能会也可能不会违反规则。

我需要找到给我最高分的列表的排列。我怎样才能做到这一点?

这是我所拥有的:

compute(InitialSettings, NewSettings, NewSettingsScore):-
    perm(InitialSettings, NewSettings),
    check_bonds(NewSettings, NewSettings, -1, 0, NewSettingsScore).

我省略了

check_bonds
里面的代码,因为它与问题无关,只会让问题变得更复杂。基本上我需要遍历所有排列并找到具有最高
NewSettingsScore
的排列。有什么办法可以做到这一点吗?预先感谢!

prolog
1个回答
0
投票

一个非常简单的解决方案应该是生成所有排列,然后选择相关分数最高的排列。在SWI中你可以写

assign_score(_L,1).
solve(L,Best):-
    findall(LO,permutation(L,LO),LP),
    maplist(assign_score,LP,Ls),
    max_list(Ls,Best).

为了简单起见,我假设所有列表都有相同的分数,因为我不知道它们是如何计算的。 你得到:

?- solve([1,2,3],B).
B = 1.

它可以轻松扩展以获取最高分的列表。 此外,根据分数计算,您可以在评估某些列表时修剪它们,从而加快过程。

© www.soinside.com 2019 - 2024. All rights reserved.