机器人的运动范围(python实现)

题目描述:

地上有一个 m 行和 n 列的方格。一个机器人从坐标 (0, 0) 的格子开始移动,每一次只能向左右上下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 k 的格子。

例如,当 k 为 18 时,机器人能够进入方格 (35,37),因为 3+5+3+7=18。但是,它不能进入方格 (35,38),因为 3+5+3+8=19。请问该机器人能够达到多少个格子?

解题思路:

回溯法。判断当前的格子是否满足坐标条件并且没有访问过,如果满足,计数加1,并在当前格子下继续判断上下左右四个格子是否满足条件。

def moving(m,n,i,j,threshold):
    global vector
    global sum
    if i>=0 and i<m and j>=0 and j<n and getsum(i)+getsum(j)<threshold and vector[i*n+j]==0 :
        sum +=1
        vector[i*n+j]=1
        moving(m,n,i-1,j,threshold)
        moving(m,n,i+1,j,threshold)
        moving(m,n,i,j-1,threshold)
        moving(m,n,i,j+1,threshold)
    return sum

def getsum(n):
    sum = 0
    while n>0:
        sum=sum+n%10
        n=n/10
    return sum

m = 50
n = 50
threshold = 18
vector = [0 for index in range(m*n)]
sum = 0
num = moving(m,n,0,0,threshold)
print(num)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器⼈python路径规划_基于Q-learning的机器⼈路径规划系统 (matlab) 0 引⾔ Q-Learning算法是由Watkins于1989年在其博⼠论⽂中提出,是强化学习发展的⾥程碑,也是⽬前应⽤最为⼴泛的强化学习算法。Q- Learning⽬前主要应⽤于动态系统、机器⼈控制、⼯⼚中学习最优操作⼯序以及学习棋类对弈等领域。 1 项⽬概述 Q学习在机器⼈路径规划领域有较为⼴泛的应⽤,由于其只需要与环境进⾏交互,且仅需感知当前状态和环境即可对下⼀步动作进⾏决策。 本研究以 MATLAB为基础,设计基于Q学习的最短路径规划算法,并考虑智能体的斜 向运动,更加符合实际情况。同时使⽤DQN⽹络对Q 值更新进⾏⼀定的优 化,使得Q值表能够更加符合实际应⽤。 本次研究的具体步骤如下: 设计⼀个有障碍物的地图,⽤户可以修改障碍物布局,可以指定起点和终点; 使⽤MATLAB编程实现Q-learning算法,⽤于机器⼈规划最短路径,学习算法参数可以由⽤户设置; 使⽤⽤可视化界⾯演⽰Q值变化过程及最短路径探测过程。 2 Q-learning算法思想 Q-Learning算法是⼀种off-policy的强化学习算法,⼀种典型的与模型⽆关的算法。算法通过每⼀步进⾏的价值来进⾏下⼀步的动作。基于 QLearning算法智能体可以在不知道整体环境的情况下,仅通过当前状态对下⼀步做出判断。 Q-Learning是强化学习算法中value-based的算法,Q是指在某⼀时刻的某⼀状态下采取某⼀动作期望获得的收益。环境会根据智能体的动 作反馈相 应的回报,所以算法的主要思想就是将状态与动作构建成⼀张Q值表,然后根据Q值来选取能够获得最⼤的收益的动作。 3 算法步骤 (⼀)Q-学习步骤 初始化Q值表。构造⼀个n⾏n列(n为状态数)的 Q值表,并将表中的所有值初始化为零。 基于当前Q值表选取下⼀个动作a。初始状态时,Q值 均为零,智能体可有很⼤的选择空间,并随机选择下⼀步动作。随着迭代次数增 加,Q值表不断更新,智能体 将会选择回报最⼤的动作。 计算动作回报。采⽤动作a后,根据当前状态和奖励,使⽤Bellman ⽅程更新上⼀个状态的Q(s, t)。 NewQ(s,a) = (1 α)Q(s,a) + α(R(s,a) + γmaxQ (s ,a )) 其中, NewQ(s,a)——上⼀个状态s和动作a的新Q值 Q(s,a)——当前状态s和动作a的Q值 R(s,a)——当前状态s和动作a的奖励r maxQ (s ,a )——新的状态下所有动作中最⼤的Q值 重复步骤3,直到迭代结束,得到最终的Q值表。 根据Q值表选择最佳路径。 (⼆)算法改进 避免局部最优 Q-learning本质上是贪⼼算法。如果每次都取预期奖励最⾼的⾏为去 做,那么在训练过程中可能⽆法探索其他可能的⾏为,甚⾄会进 ⼊"局部 最优",⽆法完成游戏。所以,设置系数,使得智能体有⼀定的概率采取 最优⾏为,也有⼀定概率随即采取所有可采取的⾏动。 将⾛过的路径纳⼊ 记忆库,避免⼩范围内的循环。 增加斜向运动 将斜向运动的奖励值设置为 2/ 2 ,取近似值0.707,可以避免出现如机器 ⼈先向左上⽅移动再向左下⽅移动⽽不选择直接向左移动两格 的情况。设 置为此值是根据地图的两格之间的相对距离确定的。 4 MATLAB实现代码 %% 基于Q-learning算法的机器⼈路径规划系统 clear %% ⾸先创造⼀个机器⼈运动的环境 % n是该运动运动环境的矩阵environment(n,n)的⾏列⼤⼩ n = 20; % 新建⼀个全为1的n*n维environment矩阵 environment = ones(n,n); %下⾯设置环境中的障碍物,将其在矩阵中标为值-100(可⾃⾏设置障碍物) environment(2,2:5)=-100; environment(5,3:5)=-100; environment(4,11:15)=-100; environment(2,13:17)=-100; environment(7,14:18)=-100; environment(3:10,19)=-100; environment(15:18,19)=-100; environment(3:10,19)=-100; environment(3:10,7)=-100; environment(9:19,2)=-100; environment(15:17,7)=-100; environment(10,3:7)=-100; environment(13,5:8)=-100; environment(6:8,4)=-100; environment(13:18,4)=-100; environment(6
仿生机器人平衡算法的控制实现,可以使用Python语言来进行。以下是一些可能用到的库和步骤: 1. 安装必要的Python库,如numpy、matplotlib、scipy等。 2. 编写控制算法,比如PID控制器等,用来控制机器人的平衡。 3. 通过传感器获取机器人的姿态信息,比如倾斜角度等。 4. 根据传感器获取的信息,使用控制算法对机器人进行控制,使其保持平衡。 5. 可以使用turtle库来模拟仿生机器人运动,将控制算法与机器人运动结合起来。 下面是一个简单的示例代码,实现了一个基于PID控制器的倒立摆平衡控制: ```python import numpy as np import matplotlib.pyplot as plt # 定义PID控制器参数 Kp = 50 Ki = 0.5 Kd = 20 # 定义仿真时间和时间步长 t = np.arange(0, 10, 0.01) # 定义控制目标 theta_d = np.ones(len(t)) * np.pi / 4 # 定义初始状态 theta = np.zeros(len(t)) theta[0] = np.pi / 2 omega = np.zeros(len(t)) # 定义误差和积分误差 e = np.zeros(len(t)) e_int = np.zeros(len(t)) # 进行控制 for i in range(1, len(t)): # 计算误差和积分误差 e[i] = theta_d[i] - theta[i-1] e_int[i] = e_int[i-1] + e[i] # 计算控制量 u = Kp * e[i] + Ki * e_int[i] + Kd * (e[i] - e[i-1]) # 计算下一时刻的状态 omega[i] = omega[i-1] + u theta[i] = theta[i-1] + omega[i] # 限制角度范围 if theta[i] > np.pi: theta[i] -= 2 * np.pi elif theta[i] < -np.pi: theta[i] += 2 * np.pi # 绘制结果 plt.plot(t, theta_d, '--', label='Reference') plt.plot(t, theta, label='Response') plt.xlabel('Time') plt.ylabel('Angle') plt.legend() plt.show() ``` 这段代码可以模拟一个倒立摆的运动,使用PID控制器进行控制,使其保持平衡。可以根据实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值