修改以下代码为打乱变异def mutation(generation, p_m): new_generation = [] for DNA in generation: for j in range(len(DNA)): if random.random() < p_m: DNA[j] = (DNA[j] + 1) % 2 new_generation.append(DNA) return new_generation
时间: 2024-03-10 19:43:28 浏览: 25
修改后的代码如下:
```
def mutation(generation, p_m):
new_generation = []
for DNA in generation:
mutated_DNA = DNA.copy()
if random.random() < p_m:
random.shuffle(mutated_DNA)
new_generation.append(mutated_DNA)
return new_generation
```
修改的部分包括:
1. 对于每个DNA序列,先将其复制到一个新的序列中,避免直接修改原序列;
2. 在外层循环中,如果需要进行变异,则打乱新的序列中的基因顺序;
3. 将修改后的DNA序列加入新的代际中。
相关问题
修改以下代码为换位变异def mutation(generation, p_m): new_generation = [] for DNA in generation: for j in range(len(DNA)): if random.random() < p_m: DNA[j] = (DNA[j] + 1) % 2 new_generation.append(DNA) return new_generation
修改后的代码如下:
```
def mutation(generation, p_m):
new_generation = []
for DNA in generation:
mutated_DNA = []
for j in range(len(DNA)):
if random.random() < p_m:
mutated_DNA.append((DNA[j] + 1) % 2)
else:
mutated_DNA.append(DNA[j])
new_generation.append(mutated_DNA)
return new_generation
```
修改的部分包括:
1. 在内层循环中,对于每个基因位,如果需要变异,则将其值取反后加入新的DNA序列中;
2. 将修改后的DNA序列加入新的代际中。
请帮我修改以下函数:def mutation(generation, p_m): new_generation = [] for DNA in generation: new_DNA = DNA.copy() if random.random() < p_m: for m in range(len(new_DNA) - 1): for n in range(len(new_DNA)): if m < n: new_DNA[m: n+1] = random.shuffle(new_DNA[m: n+1]) new_generation.append(new_DNA) else: continue return new_generation
以下是修改后的函数:
```
import random
def mutation(generation, p_m):
new_generation = []
for DNA in generation:
new_DNA = DNA.copy()
if random.random() < p_m:
m = random.randint(0, len(new_DNA) - 1)
n = random.randint(m + 1, len(new_DNA))
new_DNA[m: n] = random.sample(new_DNA[m: n], n - m)
new_generation.append(new_DNA)
return new_generation
```
修改说明:
1. `random.shuffle()` 函数没有返回值,它直接打乱列表中的元素顺序,因此不能将其赋值给 `new_DNA[m: n+1]`,应该改用 `random.sample()` 函数。
2. 在第 6 行的 `else` 子句中,`continue` 是多余的,可以省略。
3. 在第 7-12 行的双重循环中,每次随机生成 `m` 和 `n`,代表要打乱的 DNA 片段的起始位置和结束位置,然后使用 `random.sample()` 函数打乱该片段中的元素顺序。注意,这里的 `n` 是不包含在片段中的,因此应该使用 `new_DNA[m: n]`。
4. 修改后的函数返回的是一个完整的新一代 DNA 列表,因此应该将 `new_generation.append(new_DNA)` 放在 `if` 语句之外。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)