遗传算法解决函数最大化问题的完整Python实现

遗传算法(Genetic Algorithm,简称GA)是一种模拟生物进化过程的启发式优化算法。它通过模拟自然选择、交叉和变异等基因操作,来搜索问题的最优解。

遗传算法的基本思想是通过模拟生物的遗传机制来搜索解空间。算法维护一个种群,其中每个个体都代表问题的一个可能解。通过不断进行选择、交叉和变异操作,优秀的个体逐渐被筛选出来,并且逐代进化,最终找到问题的最优解。

下面是一个使用遗传算法解决函数最大化问题的Python代码示例:

import numpy as npclass GeneticAlgorithm:def __init__(self, population_size, num_generations, crossover_rate, mutation_rate):self.population_size = population_sizeself.num_generations = num_generationsself.crossover_rate = crossover_rateself.mutation_rate = mutation_ratedef optimize(self, fitness_func, num_variables, variable_range):population = self.initialize_population(num_variables, variable_range)for generation in range(self.num_generations):fitness_values = self.calculate_fitness_values(population, fitness_func)best_individual = population[np.argmax(fitness_values)]print("Generation:", generation, "Best Fitness:", fitness_func(best_individual))new_population = [best_individual]while len(new_population) < self.population_size:parent1 = self.select_individual(population, fitness_values)parent2 = self.select_individual(population, fitness_values)child1, child2 = self.crossover(parent1, parent2)child1 = self.mutate(child1, variable_range)child2 = self.mutate(child2, variable_range)new_population.extend([child1, child2])population = new_populationbest_individual = population[np.argmax(fitness_values)]best_fitness = fitness_func(best_individual)return best_individual, best_fitnessdef initialize_population(self, num_variables, variable_range):population = []for _ in range(self.population_size):individual = np.random.uniform(low=variable_range[0], high=variable_range[1], size=num_variables)population.append(individual)return populationdef calculate_fitness_values(self, population, fitness_func):fitness_values = []for individual in population:fitness_values.append(fitness_func(individual))return np.array(fitness_values)def select_individual(self, population, fitness_values):probabilities = fitness_values / np.sum(fitness_values)selected_index = np.random.choice(range(len(population)), p=probabilities)return population[selected_index]def crossover(self, parent1, parent2):if np.random.rand() < self.crossover_rate:crossover_point = np.random.randint(1, len(parent1))child1 = np.concatenate((parent1[:crossover_point], parent2[crossover_point:]))child2 = np.concatenate((parent2[:crossover_point], parent1[crossover_point:]))else:child1 = parent1child2 = parent2return child1, child2def mutate(self, individual, variable_range):for i in range(len(individual)):if np.random.rand() < self.mutation_rate:individual[i] = np.random.uniform(low=variable_range[0], high=variable_range[1])return individual# Example usage
def fitness_func(x):return -np.sum(x**2)ga = GeneticAlgorithm(population_size=50, num_generations=100, crossover_rate=0.8, mutation_rate=0.1)
best_individual, best_fitness = ga.optimize(fitness_func, num_variables=5, variable_range=(-5, 5))print("Best Individual:", best_individual)
print("Best Fitness:", best_fitness)

示例中使用一个简单的函数 fitness_func 来评估个体的适应度。遗传算法的参数包括种群大小(population_size)、迭代代数(num_generations)、交叉率(crossover_rate)和变异率(mutation_rate),可以根据具体问题进行调整。

程序输出如下:

Generation: 0 Best Fitness: -10.995211741266354
Generation: 1 Best Fitness: -10.995211741266354
Generation: 2 Best Fitness: -10.995211741266354
Generation: 3 Best Fitness: -10.995211741266354
Generation: 4 Best Fitness: -10.995211741266354
Generation: 5 Best Fitness: -10.995211741266354
Generation: 6 Best Fitness: -10.995211741266354
Generation: 7 Best Fitness: -10.995211741266354
Generation: 8 Best Fitness: -10.995211741266354
Generation: 9 Best Fitness: -10.995211741266354
Generation: 10 Best Fitness: -10.995211741266354
Generation: 11 Best Fitness: -10.995211741266354
Generation: 12 Best Fitness: -10.995211741266354
Generation: 13 Best Fitness: -10.995211741266354
Generation: 14 Best Fitness: -10.995211741266354
Generation: 15 Best Fitness: -10.995211741266354
Generation: 16 Best Fitness: -10.995211741266354
Generation: 17 Best Fitness: -10.995211741266354
Generation: 18 Best Fitness: -10.995211741266354
Generation: 19 Best Fitness: -10.995211741266354
Generation: 20 Best Fitness: -10.995211741266354
Generation: 21 Best Fitness: -10.995211741266354
Generation: 22 Best Fitness: -10.995211741266354
Generation: 23 Best Fitness: -10.995211741266354
Generation: 24 Best Fitness: -10.995211741266354
Generation: 25 Best Fitness: -10.995211741266354
Generation: 26 Best Fitness: -10.995211741266354
Generation: 27 Best Fitness: -10.995211741266354
Generation: 28 Best Fitness: -10.995211741266354
Generation: 29 Best Fitness: -10.995211741266354
Generation: 30 Best Fitness: -10.995211741266354
Generation: 31 Best Fitness: -10.995211741266354
Generation: 32 Best Fitness: -10.995211741266354
Generation: 33 Best Fitness: -10.995211741266354
Generation: 34 Best Fitness: -10.995211741266354
Generation: 35 Best Fitness: -10.995211741266354
Generation: 36 Best Fitness: -10.995211741266354
Generation: 37 Best Fitness: -10.995211741266354
Generation: 38 Best Fitness: -10.995211741266354
Generation: 39 Best Fitness: -10.995211741266354
Generation: 40 Best Fitness: -10.995211741266354
Generation: 41 Best Fitness: -10.995211741266354
Generation: 42 Best Fitness: -10.995211741266354
Generation: 43 Best Fitness: -10.995211741266354
Generation: 44 Best Fitness: -10.995211741266354
Generation: 45 Best Fitness: -10.995211741266354
Generation: 46 Best Fitness: -10.995211741266354
Generation: 47 Best Fitness: -10.995211741266354
Generation: 48 Best Fitness: -10.995211741266354
Generation: 49 Best Fitness: -10.995211741266354
Generation: 50 Best Fitness: -10.995211741266354
Generation: 51 Best Fitness: -10.995211741266354
Generation: 52 Best Fitness: -10.995211741266354
Generation: 53 Best Fitness: -10.995211741266354
Generation: 54 Best Fitness: -10.995211741266354
Generation: 55 Best Fitness: -10.995211741266354
Generation: 56 Best Fitness: -10.995211741266354
Generation: 57 Best Fitness: -10.995211741266354
Generation: 58 Best Fitness: -10.995211741266354
Generation: 59 Best Fitness: -10.995211741266354
Generation: 60 Best Fitness: -10.995211741266354
Generation: 61 Best Fitness: -10.995211741266354
Generation: 62 Best Fitness: -10.995211741266354
Generation: 63 Best Fitness: -10.995211741266354
Generation: 64 Best Fitness: -10.995211741266354
Generation: 65 Best Fitness: -10.995211741266354
Generation: 66 Best Fitness: -10.995211741266354
Generation: 67 Best Fitness: -10.995211741266354
Generation: 68 Best Fitness: -10.995211741266354
Generation: 69 Best Fitness: -10.995211741266354
Generation: 70 Best Fitness: -10.995211741266354
Generation: 71 Best Fitness: -10.995211741266354
Generation: 72 Best Fitness: -10.995211741266354
Generation: 73 Best Fitness: -10.995211741266354
Generation: 74 Best Fitness: -10.995211741266354
Generation: 75 Best Fitness: -10.995211741266354
Generation: 76 Best Fitness: -10.995211741266354
Generation: 77 Best Fitness: -10.995211741266354
Generation: 78 Best Fitness: -10.995211741266354
Generation: 79 Best Fitness: -10.995211741266354
Generation: 80 Best Fitness: -7.064365256135209
Generation: 81 Best Fitness: -7.064365256135209
Generation: 82 Best Fitness: -7.064365256135209
Generation: 83 Best Fitness: -7.064365256135209
Generation: 84 Best Fitness: -7.064365256135209
Generation: 85 Best Fitness: -7.064365256135209
Generation: 86 Best Fitness: -7.064365256135209
Generation: 87 Best Fitness: -7.064365256135209
Generation: 88 Best Fitness: -7.064365256135209
Generation: 89 Best Fitness: -7.064365256135209
Generation: 90 Best Fitness: -7.064365256135209
Generation: 91 Best Fitness: -7.064365256135209
Generation: 92 Best Fitness: -7.064365256135209
Generation: 93 Best Fitness: -7.064365256135209
Generation: 94 Best Fitness: -7.064365256135209
Generation: 95 Best Fitness: -7.064365256135209
Generation: 96 Best Fitness: -7.064365256135209
Generation: 97 Best Fitness: -7.064365256135209
Generation: 98 Best Fitness: -7.064365256135209
Generation: 99 Best Fitness: -7.064365256135209
Best Individual: [-0.03032724  1.23763913 -1.2927741   0.5056739   1.89861105]
Best Fitness: -7.064365256135209

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一篇英语文章分享:I have a dream. 争取早日阅读论文自由.

我有一个梦想》&#xff08;英文&#xff1a;I have a dream&#xff09;是美国黑人民权运动领袖马丁路德金于1963年8月28日在华盛顿林肯纪念堂发表的纪念性演讲。 《我有一个梦想》是马丁路德金在美国黑人受种族歧视和迫害由来已久的背景下&#xff0c;为了推动美国国内黑人争…

Redis面试题9

Redis 持久化的方式有哪些&#xff1f;它们有什么区别&#xff1f; Redis 提供了两种持久化方式&#xff1a;RDB 和 AOF&#xff1b; RDB&#xff08;Redis Database&#xff09;是一种快照式持久化方式&#xff0c;它可以在指定的时间间隔内自动将数据集保存到硬盘上的文件中&…

【语义解析:连接自然语言与机器智能的桥梁】

语义解析&#xff1a;连接自然语言与机器智能的桥梁 语义解析技术可以提高人机交互的效率和准确性&#xff0c;在自然语言处理、数据分析、智能客服、智能家居等领域都有广泛的应用前景。特别是在大数据时代&#xff0c;语义解析能够帮助企业更快速地从大量的数据中获取有用的…

龍运当头--html做一个中国火龙祝大家龙年大吉

🐉效果展示 🐉HTML展示 <body> <!-- partial:index.partial.html --> <svg><defs><g id=

HTML中怎样嵌入视频

要在HTML中嵌入视频&#xff0c;请按照以下步骤进行操作&#xff1a; 获取视频文件&#xff1a;首先&#xff0c;确保你有一个视频文件。你可以使用自己的视频文件&#xff0c;或从互联网上下载到本地。 使用<video>标签&#xff1a;在HTML中&#xff0c;使用<video&…

<Python>PyQt5中UI界面和逻辑函数分开写的一种方式

前言 如果经常使用PyQt5这种模块来编写带UI界面的程序&#xff0c;那么很自然的就会涉及到&#xff0c;一旦程序比较大&#xff0c;UI控件多的时候&#xff0c;需要将UI和逻辑程序分离&#xff0c;这样方便管理&#xff0c;也方便维护。 配置&#xff1a; 平台&#xff1a;win…

Node.js 多线程实战:如何有效利用多线程能力

在 Node.js 的世界中&#xff0c;多线程技术一直是一个受到广泛关注的领域。最初&#xff0c;Node.js 设计为单线程模式。随着技术发展&#xff0c;Node.js 引入了多线程支持&#xff0c;进而利用多核处理器的强大性能&#xff0c;提升了应用性能。接下来的内容将深入探讨 Node…

【c++笔记】总结!c++与c语言的不同之处

(Θ&#xff13;Θ) hi~ 众所周知\(^o^)/~&#xff0c;c语言和c联系密切&#xff0c;又相互区别&#xff0c;本篇文章主要介绍c与c语言的区别与联系以及一些简单的不同点的运用&#xff0c;很适合刚接触c的朋友&#xff0c;一起来瞧瞧看吧~~ 目录 一、文章内容梗概 二、概念…

世微 AP6317 DC单节同步3A锂电充电芯片

AP6317是一款面向5V交流适配器的3A锂 离子电池充电器。它是采用800KHz固定频率的同 步降压型转换器&#xff0c;因此具有高达92%以上的充电效 率&#xff0c;自身发热量极小。 包括完整的充电终止电路、自动再充 电和一个度达1%的4.2V预设充电电压&#xff0c;内 部集成了防反灌…

【算法Hot100系列】搜索旋转排序数组

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

web缓存之nginx缓存

一、nginx缓存知识 网络缓存位于客户端和 "源服务器 "之间&#xff0c;保存着所有可见内容的副本。当客户端请求缓存中存储的内容时&#xff0c;它可以直接从缓存中检索内容&#xff0c;而无需与服务器通信。这样&#xff0c;网络缓存就 "接近 "了客户端&a…

Opentsdb官方优化文档 - 翻译

文档地址 : Tuning — OpenTSDB 2.4 documentation Tuning As with any database there are many tuning parameters for OpenTSDB that can be used to improve write and read performance. Some of these options are specific to certain backends, others are global. …

在线双目测宽仪 板材实时监测和数据分析!

在各种板材类生产领域里&#xff0c;在线品质检测技术都是非常重要的&#xff0c;它很大程度上决定了生产的质量。在线双目测宽仪就是当前很受欢迎的一种宽度在线检测设备&#xff0c;它采用了双目视觉检测技术&#xff0c;实现宽度尺寸的在线检测&#xff0c;功能十分强大&…

java物品检验管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 物品检验管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

手把手教你如何用python进行数据分析!(附四个案例)

一、前期准备 三个包&#xff1a;Numpy、Pandas和matplotlib&#xff1b;工具&#xff1a;jupyter notebook。首先确保导入这两个包 #导入Numpy包 import numpy as np #导入Pandas包 import pandas as pd二、基础知识 Pandas有三种数据结构&#xff1a;Series、DataFrame和P…

2024 CSRankings全球计算机科学排名发布!清华AI第一,哈工大NLP第一

大家好我是二狗。 这两天全球计算机科学排名 CSRankings 2024发布啦&#xff01; 下面二狗就带大家来看一下最新的排名情况。 清华、北大、上海交大AI领域霸榜前三 在AI板块&#xff0c;主要有人工智能、计算机视觉、机器学习、自然语言处理、网络&信息检索5个细分领域。…

冥想第一千零三十四天

1.周三&#xff0c;跑步跑了6.5公里&#xff0c;很舒服。 2.项目上全力以赴的一天。 3.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。

[Docker] Mac M1系列芯片上完美运行Docker

docker pull qinchz/dm8-arm64 container_name: dm8ports:- "5236:5236"mem_limit: 1gmemswap_limit: 1gvolumes:- /data/dm8:/home/dmdba/data 数据库实例参数已修改&#xff0c;接近oracle使用习惯 #字符集 utf-8 CHARSET1 #VARCHAR 类型对象的长度以字符为单位 …

成员变量与局部变量的区别?

如果你现在需要准备面试&#xff0c;可以关注我的公众号&#xff1a;”Tom聊架构“&#xff0c;回复暗号&#xff1a;”578“&#xff0c;领取一份我整理的50W字面试宝典&#xff0c;可以帮助你提高80%的面试通过率&#xff0c;价值很高&#xff01;&#xff01; 语法形式&…

外包做了5个月,技术退步一大半了。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…