-
Notifications
You must be signed in to change notification settings - Fork 0
/
geneticbody1.py
119 lines (109 loc) · 3.03 KB
/
geneticbody1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#geneticbody.py
import random
import importlib
strlis = ['func = [','\n, ',']']
strarr = ['lambda ',' : ']
def con(n,m):
try:
importlib.reload(cod)
print(tr)
r = 0
pl = random.sample(range(0,100),2*m)
print(cod.func[0](1,2))
for i in range(0,m):
try:
r += abs(cod.func[n](pl[2*i],pl[2*i+1]) - (pl[2*i]+pl[2*i+1]))
except:
return 10**7
return r
except:
return 10**8
#실행 및 평가 함수
grammarli = ['a','b',',','+']
def cre(arr,codearr):
sor = sorted(arr, key = lambda x: x[0])
if sor[0][0] == sor[1][0]:
parent = sor[1][1]
else:
parent = sor[0][1]
parentcode = codearr[parent]
print(parentcode)
evoarr = [parentcode,]
nowcodearr = parentcode[len(strarr[0]):].split(strarr[1])
print(nowcodearr)
le = [len(nowcodearr[0]),len(nowcodearr[1])]
for i in range(2,6):
newcodearr = nowcodearr
part = random.randint(0,1)
deloradd = random.randint(0,1)
if deloradd >= le[part]:
deloradd = 0
seat = random.randint(deloradd, le[part])
if deloradd == 1:
#del
newcodearr[part] = nowcodearr[part][:seat-1] + nowcodearr[part][seat:]
else:
#add
newcodearr[part] = nowcodearr[part][:seat] + random.choice(grammarli)+ nowcodearr[part][seat:]
newcodearr = [strarr[0],newcodearr[0],strarr[1],newcodearr[1]]
newcode = ''.join(newcodearr)
evoarr.append(newcode)
metaevo = strlis[0] + strlis[1].join(evoarr) + strlis[2]
return metaevo
#생성 및 진화 함수
def fix(str):
return
#보정 함수
def rec(par):
try:
coder = open('rec.py','r')
codeall = coder.read()
coder.close()
ind = codeall.rfind('lambda')
oldcode = codeall[ind:]
if oldcode != (par + '/n'):
codea = open('rec.py', 'a')
codea.write(par + '/n')
codea.close()
except:
codew = open('rec.py', 'w')
codew.write(par + '/n')
codew.close()
#기록 함수
def turn():
coder = open('cod.py', 'r')
codestr = coder.read()
codearr = codestr[len(strlis[0]):-1].split(strlis[1])
print(codearr)
val_num = list()
for n in range(0,5):
num = con(n,10)
print(num)
val_num.append((num,n))
evo = cre(val_num,codearr)
print(evo)
codew = open('cod.py','w')
codew.write(evo)
codew.close()
return all(val_num)
#한턴 함수
try:
import cod
except:
codew = open('cod.py','w')
stli =[]
for i in range(0,5):
str = strarr[0] + 'a,b' + strarr[1] + 'a+b'
stli.append(str)
metastr = strlis[0]+strlis[1].join(stli)+strlis[2]
codew.write(metastr)
codew.close()
result = True
t = 0
turn()
'''while result:
print(t)
result = turn()
t+=1
if not result:
print('success')'''