Python课设

在做这次课设之前搜索了很多自规避游走的算法,但是作者水平及实力有限,并且当时有一些自己的想法,因此本文主要是对作者的想法进行一个记录,程序相对简单,因此理解起来应该没什么困难,希望对接下来学习自规避算法的同学有一些启发,如果有错误也请各位大佬指正。

实验题目

题目:(使用turtle仿真:自我规避随机游走)
(a)在一个网格中的自我规避游走是一条从一点到另一点的路径,并且这条路径不会经过同一个点两次。自我规避游走在物理、化学和数学中有很多的应用。它可以用来模拟链状实体,例如溶剂和高分子聚合物。编写一个Turtle程序显示一条随机路径,该路径从中心点开始在边界上的某点结束。或者在死点处结束(即该点被其他已经经过的4个点包围)。假设这个网格的大小是16*16。
(b)再编写一个仿真程序来显示随着网格大小的扩大,路径在死点结束的概率将会提高。程序模拟网络大小从10变化到50。对于每一种网格大小,仿真10000次自我规避游走然后显示在死点结束的概率,输出如下所示。
For lattice of size 10, the probability of dead-end paths is 10.57%
For lattice of size 11, the probability of dead-end paths is 14.09%
……
For lattice of size 49, the probability of dead-end paths is 94.22%
For lattice of size 50, the probability of dead-end paths is 94.33%

1. 概述

首先进行需求分析,根据题目我判断大体上首先要有网格,其次在网格的基础上实现随机游走,之后通过算法规避以前所走的格子,因此我用了坐标以及数组。总体来说有点像贪吃蛇的限制,撞墙及撞自身都不行,但相对来说还是比较简单的,因此并没有参考贪吃蛇的算法仅仅是在注释中简单提了一下。贪吃蛇的代码CSDN中有很多大佬都写过,在此也不再细说。

2. 算法描述

规避算法主要分为三部分:首先要确定在随意游走时不会回头,其次是确定在这一步是以前走过的格子后退回之前的格子在随机一步,在次判断是否在死点处,若在死点处则结束。定义了三个函数,turn函数确定了之后朝哪个方向前进和图形的绘制,采用了固定的方向以便进行坐标的确定,主要参数是随机变化的sept,self_avoid_xy实现了坐标的在原坐标基础上的确定新坐标,self_avoid_postions实现的是将原坐标加进数组postions中来储存路径和判断新的坐标是否在原坐标数组中以便进行自避免随机游走,以上方法都是为了方便自定义随机游走算法的函数,自定义随机游走的正题思路是先确定一个方向的随机游走,之后再对sept进行限制,使他不能进行回头,走到已走过的点,用last变量储存之前随机的sept,之后随机一个sept,若满足回头情况(last == 0 and sept == 3 or last == 3 and sept == 0 or last == 1 and sept == 2 or last == 2 and sept == 1)则不进行画图进行下一组,若满足撞墙情况(m == 400 or m == -400 or n == 400 or n == -400),则程序结束,若满足该步是已走节点(bool = list in postions ,bool == True),则将坐标退回到前一个状态然后进行下一组,当坐标相邻三点都走过则程序自动停止。

上代码(部分注释代码用于调试)

import random
import turtle
import numpy as np#函数
def turn(sept):if sept == 0:turtle.seth(0)turtle.pendown()turtle.forward(50)elif sept == 1:turtle.seth(90)turtle.pendown()turtle.forward(50)elif sept == 2:turtle.seth(-90)turtle.pendown()turtle.forward(50)else:turtle.seth(180)turtle.pendown()turtle.forward(50)def self_avoid_xy(sept, m, n):if sept == 0:m = m + 50elif sept == 1:n = n + 50elif sept == 2:n = n - 50else:m = m - 50return m, ndef self_avoid_postions(postions, x, y, num):postions.insert(num, [x, y])return postions#表格部分
turtle.setup(900, 850, 0, 0)
y = 400
x = -400
turtle.penup()
turtle.speed("fastest")
turtle.pensize(5)
turtle.pencolor("yellow")
turtle.goto(-400, 400)
for i in range(17):turtle.pendown()turtle.forward(800)turtle.penup()y = y-50turtle.goto(-400, y)
turtle.penup()
turtle.right(90)
turtle.goto(-400, 400)
for i in range(17):turtle.pendown()turtle.forward(800)turtle.penup()x = x+50turtle.goto(x, 400)
turtle.penup()#贪吃蛇部分
turtle.goto(0, 0)
turtle.color("black")
turtle.speed(5)
turtle.home()
sept = 0
m = 0
n = 0
avoid = -1
postions = [[0, 0]]
num = 0
for i in range(100):#print("下一组")last = septsept = random.randint(0,  3)#print(last, sept)if last == 0 and sept == 3 or last == 3 and sept == 0 or last == 1 and sept == 2 or last == 2 and sept == 1:#避免回头sept = lastcontinueelse:m, n = self_avoid_xy(sept, m, n)#print(m, n)#print(postions)if m == 400 or m == -400 or n == 400 or n == -400:print("gameover")turn(sept)breakelse:list = [m, n]#print(list)#print(list in postions)bool = list in postionsif bool == True:#print(sept)if sept == 0:m = m - 50elif sept == 1:n = n - 50elif sept == 2:n = n + 50else:m = m + 50sept = last#print("true")#avoid = sept#print(avoid)continueelse:#print("第i组", i)#print(last)#print(sept)#if avoid == sept:#   sept = last#   num = num + 1#   continue#else:#print("我画了")avoid = avoid + 1turn(sept)num = num + 1count = i-avoid#count = count/iprint("For lattice of size ", i, "the probability of dead-end paths is")print(count, "%")#print("我放了")postions = self_avoid_postions(postions, m, n, num)turtle.done()

结果


参考

Csdn:python 学习笔记(三)—turtle库的使用
Python试验指导书(2020-06-08)

关于Python自规避游走相关推荐

  1. Python实现随机游走详细解释

    Python实现随机游走 1.单一的500步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现. 注:需要python的内置函数random,不需安装,直接导入即可 import rando ...

  2. python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)

    什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...

  3. [转载] 随机游走和随机重启游走_网络动画API的随机游走

    参考链接: 随机游走(Python实现) 随机游走和随机重启游走 I'm currently writing a demo that will use a small repeated random ...

  4. python勾股定理_Python学习第128课——在Python中实现醉汉随机游走

    [每天几分钟,从零入门python编程的世界!] 这节我们在2D平面内实现随机游走.我们先把原理搞清楚,用代码实现这个原理. 原理分析: 我们想像在2D平面内有一个x轴和y轴组成的坐标系,有一个人他是 ...

  5. python游走代码_介绍一个全局最优化的方法:随机游走算法(Random Walk)

    1. 关于全局最优化求解 全局最优化是一个非常复杂的问题,目前还没有一个通用的办法可以对任意复杂函数求解全局最优值.上一篇文章讲解了一个求解局部极小值的方法--梯度下降法.这种方法对于求解精度不高的情 ...

  6. matlab 指定区域随机游走_了解随机游走模型和移动平均过程(Python)

    在本文中,我将介绍两个能够对时间序列进行建模的模型:随机游走和移动平均过程. 随机游走模型 随机游走模型由以下公式表示: 换句话说,当前时刻t的位置是前一时刻(t-1)的位置与噪声(用z表示)之和.这 ...

  7. 通过Python爬虫,发现60%女装大佬游走在cosplay领域…

    用 Python 爬取 2000 张女装大佬图片,发现 60% 都游走在 cosplay 边缘. 本文来自作者 -- 蓝桥云课作者「梦想橡皮擦」的投稿. 目标数据源分析 本次待抓取的目标地址为: ht ...

  8. python写交易系统_鳄鱼线交易系统Python版 摘要 做过交易的人大概会有一种体会,有时候价格波动很有规律,但更多时候它呈现出随机游走的不稳定状态。正是这种不稳定才是市... - 雪球...

    来源:雪球App,作者: 发明者量化,(https://xueqiu.com/8152775789/149279000) 摘要 做过交易的人大概会有一种体会,有时候价格波动很有规律,但更多时候它呈现出 ...

  9. python二维随机游走_利用python进行时间序列分析——从随机游走到GARCH模型(二)...

    Autoregressive Models - AR(p) 当因变量能由它的多个滞后项表示就叫做自回归性.公式如下: 当我们描述模型的阶数,比如,AR模型的阶数为怕p,p代表在这个模型里用的滞后数量. ...

  10. Python随机游走模型

    Python数据分析3 Python随机游走模型 Python随机游走模型 from random import choice class RandomWalk():def __init__(self ...

最新文章

  1. Flutter ------- WebView加载网页
  2. event.stopPropagation和event.preventDefault有什么区别?
  3. 记一次订单号的重复事故
  4. FreeImage加速保存图像
  5. educoder 使用线程锁(lock)实现线程同步_性能:Lock的锁之优化
  6. 判断比较器Comparator和Comparable的升序降序问题
  7. 【模块】ESP32CAM arduino程序下载方法及注意事项避坑笔记
  8. 一篇文章带你飞,轻松弄懂 CDN 技术原理
  9. 为什么复制粘贴时html,关于javascript:为什么你应该停止复制和粘贴
  10. 广州专科计算机学校录取分数线,广州大专多少分能录取?高考分数170分能上广州大专?...
  11. 第一阶段冲刺 第三天
  12. 思科模拟器叫什么_扫盲!通过型号快速识别思科路由器,交换机,服务器等设备...
  13. 浅析阿里数据技术架构(下)大规模分布式知识图谱
  14. vue网页分享生成二维码微信扫一扫进行分享
  15. 电脑无线网卡安装不了驱动怎么办?
  16. 数的“平方”速算秘诀,超实用的技巧,3秒出答案
  17. https 请求需要证书,忽略安全证书
  18. 华为鸿蒙Matepad 11,你值得拥有的学习、娱乐、办公利器
  19. XAMPP简介、安转、使用
  20. 基于VBS的恶搞/表白程序

热门文章

  1. acdream 1401 Lempel-Ziv Compression
  2. 网页设计常用色彩搭配表 - 配色表
  3. torch.chunk
  4. 【Tpshop商城使用】
  5. 【成功】qlv转MP4,超简单方法
  6. 微信小程序wx:for 循环中item的keng
  7. SAP系统PP模块常用事务代码
  8. shell脚本清理网宿cdn缓存
  9. wordpress图像大小_为WordPress优化图像
  10. 在https://m.baidu.com/百度搜索框中输入文字点击搜索,出现如下错误:Message: element not interactable.