DLS 深度受限搜索 狼羊 过河 问题 python 实现

本文介绍了使用深度受限搜索(DLS)算法解决经典的狼羊过河问题。通过设定操作方法(action)并在递归过程中检查每个节点的可行性和深度限制,确保找到符合条件的解决方案。此外,还提供了代码示例来展示如何输出所有可能的解决方案路径。
摘要由CSDN通过智能技术生成

深度受限搜索(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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值