codecamp

AI人工智能 用约束满足解决现实世界问题

前面的部分讨论了创建约束满足问题。现在,让我们将其应用于现实世界的问题。以下是一些用约束满足解决的现实世界问题的例子:

解决代数关系

借助约束满足问题,我们可以解决代数关系。在这个例子中,我们将尝试解决一个简单的代数关系 *a\2 = b。它将返回在我们定义的范围内的 ab 的值。

完成这个 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

AI人工智能 无信息搜索和有信息搜索的区别
AI人工智能 搜索算法
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

AI人工智能监督学习(回归)

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }