AI人工智能 用约束满足解决现实世界问题
前面的部分讨论了创建约束满足问题。现在,让我们将其应用于现实世界的问题。以下是一些用约束满足解决的现实世界问题的例子:
解决代数关系
借助约束满足问题,我们可以解决代数关系。在这个例子中,我们将尝试解决一个简单的代数关系 *a\2 = b。它将返回在我们定义的范围内的 a 和 b 的值。
完成这个 Python 程序后,您将能够理解用约束满足解决问题的基础知识。
请注意,在编写程序之前,我们需要安装一个名为 python-constraint 的 Python 包。您可以使用以下命令安装它:
pip install python-constraint
以下步骤展示了一个使用约束满足解决代数关系的 Python 程序:
使用以下命令导入 constraint 包:
from constraint import *
现在,创建一个名为 problem() 的模块对象,如下所示:
problem = Problem()
现在,定义变量。请注意,这里我们有两个变量 a 和 b,我们将它们的范围定义为 10,这意味着我们将在前 10 个数字中找到解决方案。
problem.addVariable('a', range(10))
problem.addVariable('b', range(10))
接下来,定义我们要应用于这个问题的特定约束。请注意,这里我们使用的约束是 *a\2 = b。
problem.addConstraint(lambda a, b: a * 2 == b)
现在,使用以下命令创建 getSolution() 模块的对象:
solutions = problem.getSolutions()
最后,使用以下命令打印输出:
print (solutions)
您可以观察到上述程序的输出如下:
[{'a': 4, 'b': 8}, {'a': 3, 'b': 6}, {'a': 2, 'b': 4}, {'a': 1, 'b': 2}, {'a': 0, 'b': 0}]
幻方
幻方是将不同的数字(通常是整数)排列在一个正方形网格中,其中每行、每列以及对角线上的数字相加都等于同一个数,这个数称为幻常数。
以下是生成幻方的简单 Python 代码的分步执行过程:
定义一个名为 magic_square 的函数,如下所示:
def magic_square(matrix_ms):
iSize = len(matrix_ms[0])
sum_list = []
以下代码显示了计算列和的代码:
for col in range(iSize):
sum_list.append(sum(row[col] for row in matrix_ms))
以下代码显示了计算行和的代码:
sum_list.extend([sum (lines) for lines in matrix_ms])
以下代码显示了计算对角线和的代码:
dlResult = 0
for i in range(0,iSize):
dlResult +=matrix_ms[i][i]
sum_list.append(dlResult)
drResult = 0
for i in range(iSize-1,-1,-1):
drResult +=matrix_ms[i][i]
sum_list.append(drResult)
if len(set(sum_list))>1:
return False
return True
现在,给出矩阵的值并检查输出:
print(magic_square([[1,2,3], [4,5,6], [7,8,9]]))
您可以观察到输出将是 False,因为它们的和不相等。
print(magic_square([[3,9,2], [3,5,7], [9,1,6]]))
您可以观察到输出将是 True,因为它们的和相等,这里的幻常数是 15。