Python人工智能
Python人工智能概述——约束满足(扑克牌问题)
Python人工智能概述——博弈、对抗搜索
更新ing
前言
这是在人工智能课程布置的一道小题,我直接采用了暴力破解,但是并不是特别特别的暴力,里面也利用break适当的提高了速度,后续还有八皇后等问题,敬请关注。
一、题目
二、使用步骤
1.思路
开始使用1-4代表要求的10、J、Q、K,想好了最后替代即可,为了便于展示,我将问题约束分别满足,显示使得同一行没有重复数字,再使得同一列没有重复数字,再满足正反对角线的约束,最后替换,输出即可。
2.代码
'''
import itertools
#itertools.product用法
list1 = ['a', 'b']
list2 = ['c', 'd']
for i in itertools.product(list1, list2):
print(i)
'''
'''
#官网定义
def product(*args, repeat=1):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = [tuple(pool) for pool in args] * repeat
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
'''
#我并没有直接import itertools然后使用itertools.product,因为排列组合后是元组,我找到了他的原函数并且修改了'tuple'为'list'
def product(*args, repeat=1):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = [list(pool) for pool in args] * repeat
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield list(prod)
str = [[]]
num = 0
#使得同一行没有重复的数字
for a in range(1,5):
for b in range(1,5):
for c in range(1,5):
for d in range(1,5):
if a != b and a != c and a != d and b != c and b !=d and c != d:
str[num].append(a)
str[num].append(b)
str[num].append(c)
str[num].append(d)
if num == 24:
exit()
num = num + 1
str.extend([[]])
#print(str)
str.pop()#末尾有一个多余的[]
#print(str)
str1 = str[0:6:]
str2 = str[6:12:]
str3 = str[12:18:]
str4 = str[18:24:]
#这里是按顺序排列组合的,您可以通过更改上方的str1、2、3、4来生成不同的结果
#record = product(str1,str2,str3,str4)
record = product(str1,str2,str3,str4)
record = list(record)
#print(record)
i = 0
m = 0
num = 0
final = []
#使得同一列没有重复的数字
for i in record:
num = 0
for a in range(0, 4):
for m in range(a+1,4):
if i[a].index(1) != i[m].index(1) and i[a].index(2) != i[m].index(2) \
and i[a].index(3) != i[m].index(3) and i[a].index(4) != i[m].index(4):
# and i[a][a] != i[m][m]:
num = num + 1
if num == 6:
num = 0
final.append(i)
'''
for m in range(0,4):
print(i[m])
print()
print()
'''
else:
break
transform = []
sign = 0
for i in final:
sign = 0
for a in range(0,4):
for b in range(a+1, 4):
if i[a][a] != i[b][b] and i[a][3-a] != i[b][3-b]:#判断正对角线和反对角线
sign = sign + 1
if sign == 6:
transform.append(i)
for m in range(0,4):
print(i[m])
print()
print()
else:
break
#将1、2、3、4分别替换为10,J,Q,K
for i in range(0,len(transform)):
for j in range(0, 4):
transform[i][j] = ["10" if x == 1 else x for x in transform[i][j]]
transform[i][j] = ["J" if x == 2 else x for x in transform[i][j]]
transform[i][j] = ["Q" if x == 3 else x for x in transform[i][j]]
transform[i][j] = ["K" if x == 4 else x for x in transform[i][j]]
#输出显示
for i in transform:
for j in range(0, 4):
print(i[j])
print()
近期我会陆陆续续发些Python人工智能以及MatlabPTB(心理实验室)和C51单片机相关源码以及资料,全都免费下载,各位可以上手试试。
非常感谢您的观看