深度受限搜索(DLS)简单地说就是深度有限搜索(DFS)+深度限制(limit)
DLS伪代码
实例:狼羊 过河 问题
3只羊和3头狼在河岸A,想要过河抵达河岸B。它们只有一艘船并且船上必须有1-2只生物。当
任意一边的狼的数量大于羊时,羊会被吃光(fail)。初始状态为(3,3,1,0,0,0),意为3头羊
,3头狼和一艘船在河岸A,而河岸B没有羊,没有狼,也没有船。算法程序要达成的目标是(
0,0,0,3,3,1),意为3头羊,3头狼和一艘船都从河岸A抵达了河岸B。请用深度受限搜索(
Depth-Limited-Search)完成这份python程序,受限深度为15。
思路:
action是所有的操作方法,递归的时候在每个节点都要判断从它延伸的其他以下节点是否符合所需要的操作。然后再加上递归的深度限制,就可以解决。
代码1:
# -*- coding: utf-8 -*-
# Python版本:3.6
# 已探索集合
_explored = []
action = [[0, -1, 0], [0, -2, 0], [-1, 0, 0], [-2, 0, 0], [-1, -1, 0], [0, 1, 1], [0, 2, 1], [1, 0, 1], [2, 0, 1], [1, 1, 1]]
# 节点数据结构
class Node:
def __init__(self, state, parent, action):
self.state = state
self.parent = parent
self.action = action
def main():
global _explored
src_state=[3,3,1,0,0,0]
dst_state=[0,0,0,3,3,1]
limit=15
result = depth_limited_search(src_state, dst_state, limit)
if result == "failure" or result == "cutoff":
print('from src_state: %s to dst_state %s search failure' % (src_state, dst_state))
else:
print('from src_state: %s to dst_state %s search success' % (src_state, dst_state))
path = []
while True:
path.append(result.