回答編集履歴

4

修正

2021/01/17 12:04

投稿

退会済みユーザー
test CHANGED
@@ -24,19 +24,21 @@
24
24
 
25
25
 
26
26
 
27
- 勘違いしておりました(コメントで交雑ゼロは意図的だということなので)
27
+ 勘違いしておりました(コメントで交雑ゼロは意図的だということなので)
28
-
29
- loop の最後で all_route =next_popとしていますが、
30
28
 
31
29
 
32
30
 
31
+ loop の最後で all_route = next_popとしていますが、
32
+
33
33
  selection()で、トーナメント選択のときにall_routeの要素が使われており
34
34
 
35
- その後のエリート選択で、祖rをそのまま使っているのが原因ではないかと。
35
+ その後のエリート選択で、それをそのまま使っているのが原因ではないかと。
36
36
 
37
37
 
38
38
 
39
- 以下のように、トーナメント選択の時にいったんall_routeを別のリストにコピーして、トーナメント選出はそのコピーしたリストを利用した場合、最短ルートは更新されていきます。
39
+ 以下のように、トーナメント選択の時にいったんall_routeを別のリストにコピーして、トーナメント選出はそのコピーしたリストを利用した場合、
40
+
41
+ エリートは保存されたままとなり、最短ルートは順当に更新されていきます。
40
42
 
41
43
 
42
44
 

3

修正

2021/01/17 12:04

投稿

退会済みユーザー
test CHANGED
@@ -1,23 +1,103 @@
1
- 交雑率(crossover_prob)がゼロとなっているのが問題なのではないでしょうか。
1
+ ~~交雑率(crossover_prob)がゼロとなっているのが問題なのではないでしょうか。~~
2
2
 
3
3
 
4
4
 
5
- かつ、crossover()内で
5
+ ~~かつ、crossover()内で~~
6
6
 
7
- ```
7
+ ~~```~~
8
8
 
9
- check_prob = rnd.randint(1, 100)
9
+ ~~check_prob = rnd.randint(1, 100)~~~~
10
10
 
11
- ```
11
+ ~~```~~
12
12
 
13
- となっているのでcrossover関数内では順序交叉が実行されません。
13
+ となっているのでcrossover関数内では順序交叉が実行されません。~~
14
14
 
15
15
 
16
16
 
17
- 結果、短いルートを通っている個体どうしを交叉し(=ルートを組み替えて)別のルートを生成する、ということができず、
17
+ ~~結果、短いルートを通っている個体どうしを交叉し(=ルートを組み替えて)別のルートを生成する、ということができず、~~
18
18
 
19
- ルートの短縮化を、個体の突然変異(コードでは3%)にのみ頼ることになっていることになります。
19
+ ~~ルートの短縮化を、個体の突然変異(コードでは3%)にのみ頼ることになっていることになります。~~
20
20
 
21
21
 
22
22
 
23
- このため、ルートを短縮化しにくい構造になっているものと思われます。
23
+ ~~このため、ルートを短縮化しにくい構造になっているものと思われます。~~
24
+
25
+
26
+
27
+ 勘違いしておりました(コメントで交雑ゼロは意図的だということなので)
28
+
29
+ loop の最後で all_route =next_popとしていますが、
30
+
31
+
32
+
33
+ selection()で、トーナメント選択のときにall_routeの要素が使われており
34
+
35
+ その後のエリート選択で、祖rをそのまま使っているのが原因ではないかと。
36
+
37
+
38
+
39
+ 以下のように、トーナメント選択の時にいったんall_routeを別のリストにコピーして、トーナメント選出はそのコピーしたリストを利用した場合、最短ルートは更新されていきます。
40
+
41
+
42
+
43
+ ```diff
44
+
45
+ def selection(all_route, evaluate_value, tournament_select_num, tournament_size, elite_select_num, ascending=False):
46
+
47
+ """ トーナメント選択とエリート保存を行う"""
48
+
49
+
50
+
51
+ select_pop = []
52
+
53
+ elite_pop = []
54
+
55
+ + copied_all_route = copy.deepcopy(all_route)
56
+
57
+ # トーナメント選択
58
+
59
+ while True:
60
+
61
+ select = rnd.sample(evaluate_value, tournament_size)
62
+
63
+ select.sort(reverse=ascending)
64
+
65
+ for i in range(tournament_select_num):
66
+
67
+ value = select[i]
68
+
69
+ index = evaluate_value.index(value)
70
+
71
+ - select_pop.append(all_route[index])
72
+
73
+ + select_pop.append(copied_all_route[index])
74
+
75
+
76
+
77
+ # 個体数の半数個選択するまで実行
78
+
79
+ if len(select_pop) >= len(all_route) / 2:
80
+
81
+ break
82
+
83
+
84
+
85
+ # エリート保存
86
+
87
+ sort_evaluate_value = copy.deepcopy(evaluate_value)
88
+
89
+ sort_evaluate_value.sort(reverse=ascending)
90
+
91
+
92
+
93
+ for i in range(elite_select_num):
94
+
95
+ value = sort_evaluate_value[i]
96
+
97
+ index = evaluate_value.index(value)
98
+
99
+ elite_pop.append(all_route[index])
100
+
101
+ return select_pop, elite_pop
102
+
103
+ ```

2

修正

2021/01/17 12:02

投稿

退会済みユーザー
test CHANGED
@@ -16,8 +16,8 @@
16
16
 
17
17
  結果、短いルートを通っている個体どうしを交叉し(=ルートを組み替えて)別のルートを生成する、ということができず、
18
18
 
19
- ルートの短縮化を、最初に生成された個体の突然変異(コードでは3%)にのみ頼ることになっていることになります。
19
+ ルートの短縮化を、個体の突然変異(コードでは3%)にのみ頼ることになっていることになります。
20
20
 
21
21
 
22
22
 
23
- このため、短いルートを持つ個体が生まれにくい構造になっているものと思われます。
23
+ このため、ルートを短縮化しにくい構造になっているものと思われます。

1

修正

2021/01/17 11:09

投稿

退会済みユーザー
test CHANGED
@@ -14,9 +14,9 @@
14
14
 
15
15
 
16
16
 
17
- 結果、短いルートを通っている個体どうしを交叉する=ルートを組み替えてさらに短いルートを生成する、ということができず、
17
+ 結果、短いルートを通っている個体どうしを交叉し(=ルートを組み替えて)別のルートを生成する、ということができず、
18
18
 
19
- ルートの短縮化を、突然変異(コードでは3%)にのみ頼ることになっていることになります。
19
+ ルートの短縮化を、最初に生成された個体の突然変異(コードでは3%)にのみ頼ることになっていることになります。
20
20
 
21
21
 
22
22