用代码实现论文《Talent vs Luck: The Role of Randomness in Success and Failure》中的模型
该论文中的模型是一个基于代理模型的随机演化模型,其主要代码实现如下:
- 定义代理类 Agent,包含属性 'talent' 和 'success',分别表示代理的天赋和成功次数。
class Agent:
def __init__(self, talent):
self.talent = talent
self.success = 0
- 定义演化函数 evolve,实现代理的随机演化过程,包括随机选择代理、计算成功概率、根据成功概率随机更新代理的 'success' 属性。
def evolve(agents):
agent = random.choice(agents)
p = agent.talent / sum(a.talent for a in agents)
if random.random() < p:
agent.success += 1
- 定义模拟函数 simulate,用于进行一定轮数的模拟,并返回代理的成功次数列表。
def simulate(num_agents, num_iterations):
agents = [Agent(random.random()) for _ in range(num_agents)]
success_counts = []
for i in range(num_iterations):
for _ in range(num_agents):
evolve(agents)
success_counts.append([a.success for a in agents])
return success_counts
- 运行模拟函数并绘制结果图表。
num_agents = 1000
num_iterations = 100
success_counts = simulate(num_agents, num_iterations)
for i in range(num_agents):
plt.plot(range(num_iterations), [sc[i] for sc in success_counts], 'b-', alpha=0.1)
plt.plot(range(num_iterations), [sum(sc)/num_agents for sc in success_counts], 'r-', label='average')
plt.xlabel('iterations')
plt.ylabel('success counts')
plt.legend()
plt.show()
原文地址: https://www.cveoy.top/t/topic/nlzX 著作权归作者所有。请勿转载和采集!