Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 694df6d

Browse files
committed
significantly reduced code footprint
1 parent 4f223b7 commit 694df6d

File tree

1 file changed

+31
-77
lines changed

1 file changed

+31
-77
lines changed

crossover.py

Lines changed: 31 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,43 @@
11
import random
22

33
def cycle_crossover(A, B):
4+
data = [A, B]
45
n = len(A)
56
child = [None] * n
6-
case = random.choice([0,1])
7-
if(case == 0):
8-
# the first cycle
9-
child[0] = A[0]
10-
cycle = [A[0]]
11-
n = B.index(A[0])
12-
child[n] = A[n]
13-
cycle.append(A[n])
7+
c = random.choice([0,1])
8+
# the first cycle
9+
child[0] = data[c][0]
10+
cycle = [data[c][0]]
11+
n = data[1-c].index(data[c][0])
12+
child[n] = data[c][n]
13+
cycle.append(data[c][n])
14+
15+
while(cycle[-1] != cycle[0]):
16+
n = data[1-c].index(cycle[-1])
17+
child[n] = data[c][n]
18+
cycle.append(data[c][n])
19+
20+
while(None in child):
21+
i = child.index(None)
22+
child[i] = data[1-c][i]
23+
cycle = [data[1-c][i]]
24+
n = data[c].index(data[1-c][i])
25+
child[n] = data[1-c][n]
26+
cycle.append(data[1-c][n])
1427
while(cycle[-1] != cycle[0]):
15-
n = B.index(cycle[-1])
16-
child[n] = A[n]
17-
cycle.append(A[n])
28+
n = data[c].index(cycle[-1])
29+
child[n] = data[1-c][n]
30+
cycle.append(data[1-c][n])
31+
c = 1-c
32+
33+
return child
1834

19-
while(None in child):
20-
i = child.index(None)
21-
child[i] = B[i]
22-
cycle = [B[i]]
23-
n = A.index(B[i])
24-
child[n] = B[n]
25-
cycle.append(B[n])
26-
while(cycle[-1] != cycle[0]):
27-
n = A.index(cycle[-1])
28-
child[n] = B[n]
29-
cycle.append(B[n])
30-
31-
if None not in child:
32-
break
33-
i = child.index(None)
34-
child[i] = A[i]
35-
cycle = [A[i]]
36-
n = B.index(A[i])
37-
child[n] = A[n]
38-
cycle.append(A[n])
39-
while(cycle[-1] != cycle[0]):
40-
n = B.index(cycle[-1])
41-
child[n] = A[n]
42-
cycle.append(A[n])
4335

44-
return child
36+
A = ['A', 'B', 'C', 'T', 'D', 'E', 'F', 'G', 'Z', 'R', 'Y', 'Q', 'M', 'N']
37+
B = ['R', 'A', 'M', 'N', 'D', 'G', 'B', 'F', 'E', 'C', 'T', 'Y', 'Z', 'Q']
4538

46-
if(case == 1):
47-
# the first cycle
48-
child[0] = B[0]
49-
cycle = [B[0]]
50-
n = A.index(B[0])
51-
child[n] = B[n]
52-
cycle.append(B[n])
53-
while(cycle[-1] != cycle[0]):
54-
n = A.index(cycle[-1])
55-
child[n] = B[n]
56-
cycle.append(B[n])
57-
58-
while(None in child):
59-
i = child.index(None)
60-
child[i] = A[i]
61-
cycle = [A[i]]
62-
n = B.index(A[i])
63-
child[n] = A[n]
64-
cycle.append(A[n])
65-
while(cycle[-1] != cycle[0]):
66-
n = B.index(cycle[-1])
67-
child[n] = A[n]
68-
cycle.append(A[n])
69-
70-
if None not in child:
71-
break
72-
i = child.index(None)
73-
child[i] = B[i]
74-
cycle = [B[i]]
75-
n = A.index(B[i])
76-
child[n] = B[n]
77-
cycle.append(B[n])
78-
while(cycle[-1] != cycle[0]):
79-
n = A.index(cycle[-1])
80-
child[n] = B[n]
81-
cycle.append(B[n])
82-
83-
return child
84-
85-
A = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'Z', 'Y', 'Q']
86-
B = ['A', 'D', 'G', 'B', 'F', 'E', 'C', 'Y', 'Z', 'Q']
39+
#A = [1,2,3,4,5,6,7,8,9,10]
40+
#B = [5,6,7,8,9,10,1,2,3,4]
8741

8842
print(cycle_crossover(A, B))
8943

0 commit comments

Comments
 (0)