如何在GProlog中优化包装问题的解决方法

时间:2018-11-30 09:58:00

标签: prolog clpfd packing

我是GProlog的初学者,我有一个关于正方形包装问题的学校项目(将子正方形包装在主正方形中)。

bool_to_int(B, I) :-
B -> I = 1; I = 0.

sum_size([], [], _, 0).
sum_size([X|Xs], [T|Ts], V, S) :-
    sum_size(Xs, Ts, V, S2),
    bool_to_int(X #=< V #/\ V #< X + T, I),
    S #= S2 + T * I.

这是我代码的独立部分,其目的是通过检查对齐的平方和是否等于给定常数(此处称为S)来优化平方堆积问题的求解。 Xs是打包成主正方形的子正方形的X轴位置,Ts是大小的大小。

这是我的这段代码问题:

sum_size([0, 0, 1, 2, 2, 2], [2, 1, 1, 1, 1, 1], 0, 3).
-> true

在此示例中,主正方形为3x3。因此,这是将所有子正方形打包在主正方形中的预期答案:[0,0,1,2,2,2]是有效坐标。

现在,我希望GProlog通过编写以下代码为我解决问题:

length(L, 6), sum_size(L, [2, 1, 1, 1, 1, 1], 0, 3).
-> no

我不明白为什么答案是“否”,而不是给我可能的L值。

0 个答案:

没有答案