实现要求:
- 在前一天实现功能的基础上,利用‘繁衍’下一代的记忆功能,逐渐逼近生存的最优温度条件;
- 绘制曲线尝试描述生物数量随温度变化的改变;
完整代码:
# !usr/bin/env python3
# -*- coding:utf-8 -*-
"""
@author : 24nemo
@date : 2022年03月16日
"""
import random
import matplotlib.pyplot as plt
class Creature(object):
def __init__(self):
self.downTemp = random.randint(0, 85)
self.upTemp = self.downTemp + 15
self.age = 0
self.live = True
def born(self, downTemp):
self.downTemp = random.randint(downTemp - 10, downTemp + 10)
self.upTemp = self.downTemp + 15
def time_lapse(self, resource, currentTemp):
if currentTemp > self.upTemp or currentTemp < self.downTemp:
self.live = False
return 0, None
if self.age >= 10:
self.live = False
return 0, None
if resource > 0:
son_1 = Creature()
son_1.born(self.downTemp)
return 2, son_1
else:
return 1, None
def getPreferTemp(self):
return (self.downTemp + self.upTemp) / 2
def time_lapse(currentTemp, epoch_set):
resource = 10000 - len(num_creature)
for epoch in range(epoch_set):
new_son = []
for i in num_creature:
state, son = i.time_lapse(resource, currentTemp)
if state == 2:
new_son.append(son)
resource -= 1
else:
pass
count_dead = 0
for i in range(len(num_creature) - 1, 0, -1):
if num_creature[i].live == False:
del num_creature[i]
count_dead += 1
dead_num.append(count_dead)
for i in new_son:
num_creature.append(i)
print(len(num_creature))
sum = 0
for i in num_creature:
sum = sum + i.getPreferTemp()
sum = sum / len(num_creature)
preferTemp.append(sum)
print(sum)
num_creature = []
for i in range(5000):
num_creature.append(Creature())
dead_num = []
preferTemp = []
xlabel = range(60)
linearTemp = []
for i in range(30, 70):
time_lapse(i, 2)
linearTemp.append(i)
for iii in range(20):
time_lapse(69, 2)
linearTemp.append(69)
plt.plot(xlabel, preferTemp)
plt.plot(xlabel, linearTemp)
plt.show()
结果展示:
在这里插入图片描述