【发布时间】:2014-06-22 07:55:50
【问题描述】:
我正在尝试在clingo 中实现一个程序,该程序解决了其中一个经典谜题,其中您有一系列事实和约束的断言,并且您必须推断出其他事实。问题来了:
五个不同国籍的男人住在五个并排的房子里,每个房子都有不同的颜色;他们都有不同的工作,不同的喜爱动物和喜爱的饮料。我们知道:
- 英国人住在红房子里。
- 西班牙男人最喜欢的动物是狗。
- 日本人是画家。
- 意大利男人喝茶。
- 挪威男子住在左起第一个房子里。 (number_norw = 1)
- 住在温室里的人喝咖啡。
- 绿色房子就在白色房子的右边。 (number_green = number_white + 1)
- 店员喜欢猫。
- 推销员住在黄房子里。
- 牛奶是中心屋最受欢迎的饮品。 (number_milk = 3)
- 挪威人的房子与蓝色的房子相邻。 (number_norw = number_blue ± 1)
- 厨师喜欢果汁。
- 住在医生旁边房子里的男人喜欢狐狸。
- 爱马的男人住在推销员的隔壁。
任务是找出谁喜欢斑马。 所以我提出断言:
% Number (the number of the house, 1 being the leftmost of the block, 5 the rightmost)
number(1..5).
% Color
color(red;green;white;yellow;blue).
% Nationality
nationality(english;spanish;japanese;italian;norwegian).
% Animal
animal(dog;cat;fox;horse;zebra).
% Job
job(painter;clerk;salesman;cook;doctor).
% Beverage
beverage(tea;coffee;milk;juice;coke).
% House
house(X, C, N, A, J, B) :-
number(X),
color(C),
nationality(N),
animal(A),
job(J),
beverage(B).
现在我坚持断言约束;如何编码断言 1. 到 14.?我只需要了解正确的语法,所以如果有人可以通过一两个示例让我走上正确的轨道,我可以弄清楚其余的。 谢谢。
注意请注意,我可以从 5. 和 11. 推断出第二个房子是蓝色的,因为11. number_blue = number_norw ± 1、5. number_norw = 1 和 0 不在可能的数字范围内,但我不想手动添加因为我希望clingo 自己解决它。
【问题讨论】:
-
感谢@imsop 添加“cligo”标签,我自己尝试这样做,但由于缺乏声誉而无法这样做。 :)
标签: zebra-puzzle answer-set-programming clingo