我正在努力通过人工智能:现代方法,以减轻我的自然愚蠢.在尝试解决一些练习时,我遇到了"谁拥有斑马"问题,第5章练习5.13 .这是一个关于SO的主题,但回答主要是针对"如果您可以自由选择解决问题的软件,您将如何解决这个问题?"
我接受Prolog是一种非常适合这类问题的编程语言,并且有一些很好的软件包可用,例如在Python中,如排名靠前的答案所示,也是独立的.唉,这一切都没有帮助我以书中概述的方式"强硬".
本书似乎建议构建一组双重或全局约束,然后实现一些提到的算法以找到解决方案.我遇到了一系列适用于建模问题的约束,我遇到了很多麻烦.我正在研究这个问题,所以我无法接触到教授或TA让我超过驼峰 - 这就是我要求你帮助的地方.
我认为本章中的例子几乎没有相似之处.
我渴望建立双重约束,开始了创建(逻辑等价)25个变量:nationality1
,nationality2
,nationality3
,... nationality5
,pet1
,pet2
,pet3
,... pet5
,drink1
... drink5
等等,其中数字是表示房子的的位置.
这对于构建一元约束是很好的,例如
挪威人住在第一宫:
nationality1 = { :norway }.
但是大多数约束是通过共同的门牌号码组合两个这样的变量,例如
瑞典人有一条狗:
nationality[n] = { :sweden } AND pet[n] = { :dog }
n
显然,在哪里可以从1到5.或者说另一种方式:
nationality1 = { :sweden } AND pet1 = { :dog } XOR nationality2 = { :sweden } AND pet2 = { :dog } XOR nationality3 = { :sweden } AND pet3 = { :dog } XOR nationality4 = { :sweden } AND pet4 = { :dog } XOR nationality5 = { :sweden } AND pet5 = { :dog }
...与本书所倡导的"元组列表"有着截然不同的感觉:
( X1, X2, X3 = { val1, val2, val3 }, { val4, val5, val6 }, ... )
我本身并不是在寻求解决方案; 我正在寻找一个如何以与本书的方法兼容的方式来模拟这个问题的开始.任何帮助赞赏.