Random Walk
来源:互联网 发布:led散热模拟软件 编辑:程序博客网 时间:2024/06/06 00:28
import math, random, pylab
#matplotlib-1.0.1.win32-py2.7.exe
#numpy-1.6.0b2-win32-superpack-python2.7.exe
class Location(object):
def __init__(self, x, y):
self.x = float(x)
self.y = float(y)
def move(self, xc, yc):
return Location(self.x+float(xc), self.y+float(yc))
def getCoords(self):
return self.x, self.y
def getDist(self, other):
ox, oy = other.getCoords()
xDist = self.x - ox
yDist = self.y - oy
return math.sqrt(xDist**2 + yDist**2)
class CompassPt(object):
possibles = ('N', 'S', 'E', 'W')
def __init__(self, pt):
if pt in self.possibles: self.pt = pt
else: raise ValueError("in CompassPt.__init__")
def move(self, dist):
if self.pt == 'N': return (0, dist)
elif self.pt == 'S': return (0, -dist)
elif self.pt == 'E': return (dist, 0)
elif self.pt == 'W': return (-dist, 0)
else: raise ValueError("in CompassPt.move")
class Field(object):
def __init__(self, drunk, loc):
self.drunk = drunk
self.loc = loc
def move(self, cp, dist):
oldLoc = self.loc
xc, yc = cp.move(dist)
self.loc = oldLoc.move(xc, yc)
def getLoc(self):
return self.loc
def getDrunk(self):
return self.drunk
class Drunk(object):
def __init__(self, name):
self.name = name
def move(self, field, time = 1):
if field.getDrunk() != self:
raise ValueError("Drunk.move called with drunk not in field")
for i in range(time):
pt = CompassPt(random.choice(CompassPt.possibles))
field.move(pt, 1)
def performTrial(time, f):
start = f.getLoc()
distances = [0.0]
for t in range(1, time + 1):
f.getDrunk().move(f)
newLoc = f.getLoc()
distance = newLoc.getDist(start)
distances.append(distance)
return distances
#assert False
drunk = Drunk('Homer Simpson')
for i in range(3):
f = Field(drunk, Location(0, 0))
distances = performTrial(500, f)
pylab.plot(distances)
pylab.title("Homer's Random Walk")
pylab.xlabel("Time")
pylab.ylabel("Distance from Origin")
pylab.show()
#assert False
- Random Walk
- random walk
- random walk
- hdu4487 Maximum Random Walk
- D - Maximum Random Walk
- About Random Walk
- random walk DEMO
- Random Walk分割算法
- 随机漫步(random walk)
- hdu4579 Random Walk
- Hdu 4487 Maximum Random Walk
- hdu 4487 Maximum Random Walk
- hdu 4487 Maximum Random Walk
- Program work 2. Random walk
- POJ 2714 : Random Walk - 贪心
- HDU 4487 Maximum Random Walk
- 《挑战》例题4.1 Random Walk
- 挑战 Random Walk[高斯消元&&期望]
- 网络爬虫开发
- 求助
- translation:Achieving of Chinese Display in the embedded graphical user interface of uC/GUI in Two
- Uboot-2011.3 移值到友善2440上。第一步可以一RAM中跑起来了
- 在linux下修改oracle的sys和system的密码以及默认密码
- Random Walk
- 镜之边缘修改器原理
- No entity found for query令人兴奋又让人头疼的问题
- 三十岁前小有成就的秘密
- Actionscript 3 语言特点
- 适用于 Windows Mobile 的自适应应用程序
- 豆丁网
- 工作中的一些思考
- 算法网站、博客汇集