我有这个特定的问题,但我不能用Prolog语法表达。我是个新手。
我的有限域:来自70个球的所有10个球的组合
请求的解决方案:10球组合
约束:我有一个包含20个球的列表: set1,set2 ..setN
所选组合不是set1,set2的所有10球组合的成员...setn ( 20个球中的10个球的组合)
谢谢你的帮助
发布于 2018-07-24 19:26:49
这就是我对这个问题的解决方案。
我不知道它是否是最优的。
我在VPS上运行的代码有3000个交叉口。(下面的部分代码只设置了7个交叉点)
我不知道PROLOG是否能解决这个问题?
%use_module(library(clpfd)).
solve_frkeno(B1,B2,B3,B4,B5,B6,B7,B8,B9,B10) :-
between(1, 13, B1),
between(4, 21, B2),
between(8, 29, B3),
between(14, 37, B4),
between(18, 41, B5),
between(27, 50, B6),
between(35, 57, B7),
between(42, 63, B8),
between(50, 68, B9),
between(58, 70, B10),
all_different([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10]),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[5,6,13,16,19,20,22,30,31,34,35,39,40,51,52,56,59,61,65,69],I1),
length(I1,N1),
between(0,6,N1),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[5,8,9,13,14,16,21,24,29,33,35,47,49,52,54,58,59,64,65,68],I2),
length(I2,N2),
between(0,6,N2),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[1,3,6,12,16,21,23,25,28,37,39,40,42,44,48,49,50,58,63,69],I3),
length(I3,N3),
between(0,6,N3),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[4,8,9,14,21,24,26,28,36,45,46,52,54,57,59,60,61,62,63,67],I4),
length(I4,N4),
between(0,6,N4),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[9,11,13,16,19,20,25,27,28,29,34,39,41,48,49,50,53,63,64,65],I5),
length(I5,N5),
between(0,6,N5),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[4,5,9,12,19,29,30,32,33,34,35,38,42,45,49,57,58,60,62,70],I6),
length(I6,N6),
between(0,6,N6),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[2,3,6,12,13,15,16,19,26,29,30,40,43,51,52,53,58,64,67,69],I7),
length(I7,N7),
between(0,6,N7),https://stackoverflow.com/questions/49534682
复制相似问题