【发布时间】:2021-11-06 12:53:48
【问题描述】:
我试图制作一个进化模拟器。所以我先从一个生物开始。但是,这家伙并没有走向食物,而是前后左右。 那么,这有什么问题??? 我的代码中有两个模块,一个是主要的,另一个是我的 Think-made。它们都在下面给出。请看看有什么问题。 主模块=>
import turtle,random,Think,time
world=turtle.Screen()
world.setup(400,400)#O(0,0),X(180,0),X'(-185,0),Y(0,185),Y'(0,-180)
def growfood():
food=turtle.Turtle()
food.color("green")
food.shape("circle")
food.shapesize(0.4)
food.penup()
food.speed(0)
food.goto(random.randint(-185,180),random.randint(-180,185))
return food
class Creature:
body=None
brain=Think.neuron()
def __init__(self):
self.body=turtle.Turtle()
#self.body.penup()
self.body.color("blue")
self.body.shape("square")
self.body.shapesize(0.5)
def move(self,y,x,dely,delx):
self.body.goto(self.body.xcor()+x*5,self.body.ycor()+y*5)
ny=(food.ycor()-self.body.ycor())-dely
nx=(food.xcor()-self.body.xcor())-dely
self.brain.adjust(dely, delx, ny/5, nx/5, y, x)
def locatefood(self):
delx=food.xcor()-self.body.xcor()
dely=food.ycor()-self.body.ycor()
return dely,delx
def think(self):
dely,delx=self.locatefood()
y,x=self.brain.think(dely,delx)
print("(x,y)=("+str(x)+","+str(y)+")")
self.move(y,x,dely,delx)
crt=Creature()
food=growfood()
run=0
while run<120:
world.update()
crt.think()
if crt.body.distance(food)<15:
food=growfood()
time.sleep(1)
思考模块=>
from math import tanh
from random import random
class neuron:
biasy,biasx=1,1
lr=1
weighty,weightx,weightby,weightbx=random(),random(),random(),random()
def adjust(self,dely,delx,ny,nx,y,x):
#adjust y
erry=ny-y
self.weighty+=erry*dely*self.lr
self.weightby+=erry*self.biasy*self.lr
#adjust x
errx=nx-x
self.weightx+=errx*delx*self.lr
self.weightbx+=erry*self.biasx*self.lr
def think(self,dely,delx):
y=dely*self.weighty+self.biasy*self.weightby
x=delx*self.weightx+self.biasx*self.weightbx
y=tanh(y)
print(y)
if y>0:
y=1
elif y<0:
y=-1
else:
y=0
x=tanh(x)
print(x)
if x>0:
x=1
elif x<0:
x=-1
else:
x=0
return y,x
谢谢你:)
【问题讨论】:
-
这是我的第一个问题,所以我在创建一个好问题方面没有经验。所以可能会有错误,代码中或多或少有一些缩进。很抱歉给您带来不便。再次感谢您:)
-
请确保构造一个minimal reproducible example。请注意,所有这三个词都很重要:它应该只是一个示例,您不应该发布整个实际代码,而应该创建一个简化的示例来演示您的问题。此外,它应该是minimal,即它不应该包含任何不是绝对需要证明问题的东西。 (大多数初学者问题可以用不到 5 行简单的代码来演示。)它应该是reproducible,这意味着如果我复制并粘贴并运行代码,我应该会看到与你完全相同的问题见。
-
欢迎来到 Stack Overflow!请修正缩进,你的问题会好很多!代码必须是minimal, reproducible example;否则,我们很难为您提供帮助。有关更多信息,请参阅how to ask。 help center 应该包含您提出好问题、写好答案以及成为 SO 的好成员所需知道的一切。
-
感谢您的建议。但是如果我不给出完整的代码,它怎么能重现呢?我真的很感激所有的建议。 :)
标签: python linear-regression turtle-graphics python-turtle evolutionary-algorithm