我试图用python写一个简单的生成算法,应该给我提供“ Hello World”.它工作正常,但无法通过“最大迭代”常量给出核心答案.它只是在无限循环中工作.@H_301_2@
@H_301_2@
@H_403_8@import random class GAHello(): POPULATION_SIZE = 1000 ELITE_RATE = 0.1 SURVIVE_RATE = 0.5 MUTATION_RATE = 0.2 TARGET = "Hello World!" MAX_ITER = 1000 def InitializePopulation(self): tsize: int = len(self.TARGET) population = list() for i in range(0,self.POPULATION_SIZE): str = '' for j in range(0,tsize): str += chr(int(random.random() * 255)) citizen: Genome = Genome(str) population.append(citizen) return population def Mutation(self,strng): tsize: int = len(self.TARGET) ipos: int = int(random.random() * tsize) delta: chr = chr(int(random.random() * 255)) return strng[0: ipos] + delta + strng[ipos + 1:] def mate(self,population): esize: int = int(self.POPULATION_SIZE * self.ELITE_RATE) tsize: int = len(self.TARGET) children = self.select_elite(population,esize) for i in range(esize,self.POPULATION_SIZE): i1: int = int(random.random() * self.POPULATION_SIZE * self.SURVIVE_RATE) i2: int = int(random.random() * self.POPULATION_SIZE * self.SURVIVE_RATE) spos: int = int(random.random() * tsize) strng: str = population[i1][0: spos] + population[i2][spos:] if(random.random() < self.MUTATION_RATE): strng = self.Mutation(strng) child = Genome(strng) children.append(child) return children def go(self): popul = self.InitializePopulation() for i in range(0,self.MAX_ITER): popul.sort() print("{} > {}".format(i,str(popul[0]))) if(popul[0].fitness == 0): break popul = self.mate(popul) def select_elite(self,population,esize): children = list() for i in range(0,esize): children.append(population[i]) return children class Genome(): strng = "" fitness = 0 def __init__(self,strng): self.strng = strng fitness = 0 for j in range(0,len(strng)): fitness += abs(ord(self.strng[j]) - ord(GAHello.TARGET[j])) self.fitness = fitness def __lt__(self,other): return self.fitness - other.fitness def __str__(self): return "{} {}".format(self.fitness,self.strng) def __getitem__(self,item): return self.strng[item]
谢谢你的建议.我真的是菜鸟,并且我只是训练和试验这样的算法和优化的东西来探索人工智能方法.@H_301_2@
更新@H_301_2@
运行的地方@H_301_2@
@H_301_2@
@H_403_8@if __name__ == '__main__': algo = GAHello() algo.go()
@H_301_2@
@H_403_8@0 > 1122 Ü<pñsÅá׺Ræ¾ 1 > 1015 ÷zËÔ5AÀ©« 2 > 989 "ÆþõZi±Pmê 3 > 1076 ØáíAÀ©« 4 > 1039 #ÆþÕRæ´Ìosß 5 > 946 ×ZÍG¤'ÒÙË 6 > 774 $\àPÉ 7 > 1194 A®Ä§ö ÝÖ Ð 8 > 479 @r=q^Ü´{J 9 > 778 X'YþH_õÏÆ 10 > 642 z¶$oKÐ{ ... 172 > 1330 ê¸EïôÀ«ä£ü 173 > 1085 ÔOÕÛ½e·À×äÒU 174 > 761 OÕÛ½¤¯£+} 175 > 903 P½?-´ëÎm|4Ô 176 > 736 àPSÈe<1 177 > 1130 ªê/*ñ¤îã¹¾^ 178 > 772 OÐS8´°jÓ£ ... 990 > 1017 6ó¨QøÇ?¨Úí 991 > 1006 |5ÇÐR·Ü¸í 992 > 968 ×5QÍË?1V í 993 > 747 B ªÄ*¶R·Ü$F 994 > 607 `ªLaøVLº 995 > 744 Ìx7eøi;ÄÝ[ 996 > 957 ¹8/ñ^ ¤ 997 > 916 Ú'dúý8}û« [ 998 > 892 ÛWòeTùv6ç® 999 > 916 õg8g»}à³À
@H_301_2@
@H_403_8@0 > 419 Un~?z^Kr??p┬ 1 > 262 Un~?z^Kr?j?↨ 2 > 262 Un~?z^Kr?j?↨ … 15 > 46 Afpdm'Ynosa" 16 > 46 Afpdm'Ynosa" 17 > 42 Afpdm'Ynoia" 18 > 27 Jfpmm↓Vopoa" … 33 > 9 Ielmo▼Wnole" 34 > 8 Ielmo▲Vopld" 35 > 8 Ielmo▲Vopld" … 50 > 1 Hello World" 51 > 1 Hello World" 52 > 0 Hello World!
最佳答案
原文链接:https://www.f2er.com/python/533184.html