将这段代码降低重复率:def muSol(model): sol_list=copy.deepcopy(model.sol_list)#先将初始种群进行复制,然后清空,方便填入新个体 model.sol_list=[] while True: f1_index = int(random.randint(0, len(sol_list) - 1))#在种群中随机选择一个索引 f1 = copy.deepcopy(sol_list[f1_index])#将索引对应的个体深拷贝 m1_index=random.randint(0,len(model.demand_id_list)-1)#随机产生个体的两个索引 m2_index=random.randint(0,len(model.demand_id_list)-1) if m1_index!=m2_index:#如果两个索引不同,则产生一个随机数小于变异率的话将两个索引对应的值进行交换操作 if random.random() <= model.pm: node1=f1.node_id_list[m1_index] f1.node_id_list[m1_index]=f1.node_id_list[m2_index] f1.node_id_list[m2_index]=node1 model.sol_list.append(copy.deepcopy(f1)) else:#如果相同,则把f1这个个体深拷贝到新种群中 model.sol_list.append(copy.deepcopy(f1)) if len(model.sol_list)>model.popsize:#直到新种群中个体数量超过popsize(种群规模) break
时间: 2024-04-03 18:33:16 浏览: 71
可以使用函数参数和内部函数的方式来降低代码重复率,重构后的代码如下:
```python
import copy
import random
def muSol(model):
def swap_nodes(f1, m1_index, m2_index):
# 如果两个索引不同,则产生一个随机数小于变异率的话将两个索引对应的值进行交换操作
if random.random() <= model.pm:
node1 = f1.node_id_list[m1_index]
f1.node_id_list[m1_index] = f1.node_id_list[m2_index]
f1.node_id_list[m2_index] = node1
model.sol_list.append(copy.deepcopy(f1))
else:
# 如果相同,则把f1这个个体深拷贝到新种群中
model.sol_list.append(copy.deepcopy(f1))
sol_list = copy.deepcopy(model.sol_list) # 先将初始种群进行复制,然后清空,方便填入新个体
model.sol_list = []
while True:
f1_index = int(random.randint(0, len(sol_list) - 1)) # 在种群中随机选择一个索引
f1 = copy.deepcopy(sol_list[f1_index]) # 将索引对应的个体深拷贝
m1_index, m2_index = random.sample(range(len(model.demand_id_list)), 2) # 随机产生个体的两个索引
if m1_index != m2_index:
swap_nodes(f1, m1_index, m2_index)
else:
# 如果相同,则把f1这个个体深拷贝到新种群中
model.sol_list.append(copy.deepcopy(f1))
if len(model.sol_list) > model.popsize:
# 直到新种群中个体数量超过popsize(种群规模)
break
```
可以看到,我们把重复的代码抽象成了内部函数 `swap_nodes`,并使用 `random.sample` 函数来避免重复的代码。代码重构后可读性更好,更加简洁。
阅读全文