电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python實現簡單遺傳算法

瀏覽:5日期:2022-07-10 18:02:33

ObjFunction.py

import mathdef GrieFunc(vardim, x, bound): ''' Griewangk function ''' s1 = 0. s2 = 1. for i in range(1, vardim + 1): s1 = s1 + x[i - 1] ** 2 s2 = s2 * math.cos(x[i - 1] / math.sqrt(i)) y = (1. / 4000.) * s1 - s2 + 1 y = 1. / (1. + y) return ydef RastFunc(vardim, x, bound): ''' Rastrigin function ''' s = 10 * 25 for i in range(1, vardim + 1): s = s + x[i - 1] ** 2 - 10 * math.cos(2 * math.pi * x[i - 1]) return s

GAIndividual.py

import numpy as npimport ObjFunctionclass GAIndividual: ’’’ individual of genetic algorithm ’’’ def __init__(self, vardim, bound): ’’’ vardim: dimension of variables bound: boundaries of variables ’’’ self.vardim = vardim self.bound = bound self.fitness = 0. def generate(self): ’’’ generate a random chromsome for genetic algorithm ’’’ len = self.vardim rnd = np.random.random(size=len) self.chrom = np.zeros(len) for i in xrange(0, len): self.chrom[i] = self.bound[0, i] + (self.bound[1, i] - self.bound[0, i]) * rnd[i] def calculateFitness(self): ’’’ calculate the fitness of the chromsome ’’’ self.fitness = ObjFunction.GrieFunc( self.vardim, self.chrom, self.bound)

GeneticAlgorithm.py

import numpy as npfrom GAIndividual import GAIndividualimport randomimport copyimport matplotlib.pyplot as pltclass GeneticAlgorithm: ’’’ The class for genetic algorithm ’’’ def __init__(self, sizepop, vardim, bound, MAXGEN, params): ’’’ sizepop: population sizepop vardim: dimension of variables bound: boundaries of variables MAXGEN: termination condition param: algorithm required parameters, it is a list which is consisting of crossover rate, mutation rate, alpha ’’’ self.sizepop = sizepop self.MAXGEN = MAXGEN self.vardim = vardim self.bound = bound self.population = [] self.fitness = np.zeros((self.sizepop, 1)) self.trace = np.zeros((self.MAXGEN, 2)) self.params = params def initialize(self): ’’’ initialize the population ’’’ for i in xrange(0, self.sizepop): ind = GAIndividual(self.vardim, self.bound) ind.generate() self.population.append(ind) def evaluate(self): ’’’ evaluation of the population fitnesses ’’’ for i in xrange(0, self.sizepop): self.population[i].calculateFitness() self.fitness[i] = self.population[i].fitness def solve(self): ’’’ evolution process of genetic algorithm ’’’ self.t = 0 self.initialize() self.evaluate() best = np.max(self.fitness) bestIndex = np.argmax(self.fitness) self.best = copy.deepcopy(self.population[bestIndex]) self.avefitness = np.mean(self.fitness) self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness print('Generation %d: optimal function value is: %f; average function value is %f' % ( self.t, self.trace[self.t, 0], self.trace[self.t, 1])) while (self.t < self.MAXGEN - 1): self.t += 1 self.selectionOperation() self.crossoverOperation() self.mutationOperation() self.evaluate() best = np.max(self.fitness) bestIndex = np.argmax(self.fitness) if best > self.best.fitness: self.best = copy.deepcopy(self.population[bestIndex]) self.avefitness = np.mean(self.fitness) self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness print('Generation %d: optimal function value is: %f; average function value is %f' % ( self.t, self.trace[self.t, 0], self.trace[self.t, 1])) print('Optimal function value is: %f; ' % self.trace[self.t, 0]) print 'Optimal solution is:' print self.best.chrom self.printResult() def selectionOperation(self): ’’’ selection operation for Genetic Algorithm ’’’ newpop = [] totalFitness = np.sum(self.fitness) accuFitness = np.zeros((self.sizepop, 1)) sum1 = 0. for i in xrange(0, self.sizepop): accuFitness[i] = sum1 + self.fitness[i] / totalFitness sum1 = accuFitness[i] for i in xrange(0, self.sizepop): r = random.random() idx = 0 for j in xrange(0, self.sizepop - 1): if j == 0 and r < accuFitness[j]: idx = 0 break elif r >= accuFitness[j] and r < accuFitness[j + 1]: idx = j + 1 break newpop.append(self.population[idx]) self.population = newpop def crossoverOperation(self): ’’’ crossover operation for genetic algorithm ’’’ newpop = [] for i in xrange(0, self.sizepop, 2): idx1 = random.randint(0, self.sizepop - 1) idx2 = random.randint(0, self.sizepop - 1) while idx2 == idx1: idx2 = random.randint(0, self.sizepop - 1) newpop.append(copy.deepcopy(self.population[idx1])) newpop.append(copy.deepcopy(self.population[idx2])) r = random.random() if r < self.params[0]: crossPos = random.randint(1, self.vardim - 1) for j in xrange(crossPos, self.vardim): newpop[i].chrom[j] = newpop[i].chrom[ j] * self.params[2] + (1 - self.params[2]) * newpop[i + 1].chrom[j] newpop[i + 1].chrom[j] = newpop[i + 1].chrom[j] * self.params[2] + (1 - self.params[2]) * newpop[i].chrom[j] self.population = newpop def mutationOperation(self): ’’’ mutation operation for genetic algorithm ’’’ newpop = [] for i in xrange(0, self.sizepop): newpop.append(copy.deepcopy(self.population[i])) r = random.random() if r < self.params[1]: mutatePos = random.randint(0, self.vardim - 1) theta = random.random() if theta > 0.5: newpop[i].chrom[mutatePos] = newpop[i].chrom[ mutatePos] - (newpop[i].chrom[mutatePos] - self.bound[0, mutatePos]) * (1 - random.random() ** (1 - self.t / self.MAXGEN)) else: newpop[i].chrom[mutatePos] = newpop[i].chrom[ mutatePos] + (self.bound[1, mutatePos] - newpop[i].chrom[mutatePos]) * (1 - random.random() ** (1 - self.t / self.MAXGEN)) self.population = newpop def printResult(self): ’’’ plot the result of the genetic algorithm ’’’ x = np.arange(0, self.MAXGEN) y1 = self.trace[:, 0] y2 = self.trace[:, 1] plt.plot(x, y1, ’r’, label=’optimal value’) plt.plot(x, y2, ’g’, label=’average value’) plt.xlabel('Iteration') plt.ylabel('function value') plt.title('Genetic algorithm for function optimization') plt.legend() plt.show()

運行程序:

if __name__ == '__main__': bound = np.tile([[-600], [600]], 25) ga = GA(60, 25, bound, 1000, [0.9, 0.1, 0.5]) ga.solve()

作者:Alex Yu出處:http://www.cnblogs.com/biaoyu/

以上就是python實現簡單遺傳算法的詳細內容,更多關于python 遺傳算法的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 宠物店加盟_宠物连锁店_开宠物店-【派多格宠物】 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | IP检测-检测您的IP质量 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 瓶盖扭矩仪(扭力值检测)-百科| 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 北京亦庄厂房出租_经开区产业园招商信息平台 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 渗透仪-直剪仪-三轴仪|苏州昱创百科 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 济南宣传册设计-画册设计_济南莫都品牌设计公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 起好名字_取个好名字_好名网免费取好名在线打分 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 |