《程序员修炼之道--从小工到专家》第1-2章 读书心得

高不成低不就的中手,需要高人的指点,而我们现在就有这个条件得到成长,只要认真地学习、吸收,我们能比其他人更快得成为高手。

应该保持「是的,我还有不少要注意」而不是「大部分我也知道嘛」。

一片漂亮的草坪需要每一天给予一点关心,了不起的程序员也是如此。「kaizen」日本术语表达了持续地做出小改进的概念。每天为提炼你所拥有的技能工作,为把新工具增加到你的技能列表中而工作。几年后,你将会惊奇你的经验得到怎样的发展,你的技能得到怎样的提升。

不要因为过度修饰和过于求精而损坏完好的程序,要知道何时止步

正交性,即 聚散与耦合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的基于遗传算法的第一类生产线平衡问题的Python代码,旨在求解最小工位数。 ``` import random # 初始化问题参数 num_jobs = 20 # 任务数量 processing_times = [[random.randint(1, 10) for j in range(num_jobs)] for i in range(2)] # 随机生成处理时间 # 遗传算法参数 num_generations = 100 # 世代数量 population_size = 50 # 种群数量 mutation_rate = 0.01 # 变异率 # 初始化种群 population = [[random.sample(range(num_jobs), num_jobs) for j in range(2)] for i in range(population_size)] # 每个染色体代表一个任务序列 # 进化 for gen in range(num_generations): # 计算适应度 fitness = [0] * population_size # 每个染色体的适应度 for i in range(population_size): # 计算每个工作站的空闲时间 station_times = [processing_times[0][population[i][0][0]]] for j in range(1, num_jobs): station_times.append(max(station_times[j-1], sum(processing_times[k][population[i][k][j]] for k in range(2)))) # 计算适应度为最大空闲时间 fitness[i] = max(station_times) # 选择 elite_size = int(population_size / 10) # 选择前10%的精英 idx = sorted(range(len(fitness)), key=lambda k: fitness[k]) # 按适应度排序 elite = [population[i] for i in idx[:elite_size]] parents = [population[i] for i in random.choices(range(population_size), k=population_size-elite_size)] # 随机选择父代 # 交叉 children = [] while len(children) < population_size-elite_size: p1, p2 = random.sample(parents, 2) pt = random.randint(1, num_jobs-1) # 随机选择交叉点 c1 = [p1[0][:pt] + p2[0][pt:], p1[1][:pt] + p2[1][pt:]] # 子代1 c2 = [p2[0][:pt] + p1[0][pt:], p2[1][:pt] + p1[1][pt:]] # 子代2 children.extend([c1, c2]) # 变异 for i in range(elite_size, population_size): if random.random() < mutation_rate: idx1, idx2 = random.sample(range(num_jobs), 2) population[i][0][idx1], population[i][0][idx2] = population[i][0][idx2], population[i][0][idx1] # 交换任务顺序 idx1, idx2 = random.sample(range(num_jobs), 2) population[i][1][idx1], population[i][1][idx2] = population[i][1][idx2], population[i][1][idx1] # 交换任务顺序 # 新种群 population = elite + children # 精英和子代组成新种群 # 输出结果 best_fitness = float('inf') best_solution = None for i in range(population_size): # 计算每个工作站的空闲时间 station_times = [processing_times[0][population[i][0][0]]] for j in range(1, num_jobs): station_times.append(max(station_times[j-1], sum(processing_times[k][population[i][k][j]] for k in range(2)))) # 记录最佳解 if max(station_times) < best_fitness: best_fitness = max(station_times) best_solution = population[i] print(f'最小化空闲时间为 {best_fitness}') print('最佳任务序列为:') print(best_solution[0]) print(best_solution[1]) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值