当前位置: 首页 > news >正文

基于遗传算法的最优化求解问题:简单多元函数极值问题的优化与通用性代码

基于遗传算法的最优化求解问题 其通过遗传算法对简单的多元函数求极值问题进行优化求解,得到了最优解和迭代收敛曲线 代码通用性很好 很适合小白入门

今天咱们来聊聊怎么教计算机自己找答案——这事儿听着玄乎,其实用遗传算法就能轻松搞定。举个栗子,假设我们要找函数f(x,y)=x²+y²的最小值,人类肉眼一看就知道在(0,0)处,但计算机可不会代数运算,这时候就该让基因进化大法上场了。

先准备个种群,就像养鱼塘放鱼苗:

import numpy as np def create_population(size, dim, lbound, rbound): return np.random.uniform(lbound, rbound, (size, dim))

这函数生成了20条染色体(解),每条有x,y两个基因,取值范围定在-10到10。好比在鱼塘里随机撒下不同品种的鱼苗,等着看哪些能适应环境。

接下来是适者生存环节:

def fitness(individual): return -sum(individual**2) # 求最小值转换为求负数的最大值 def selection(pop, fitnesses, elite_size=4): elite_indices = np.argsort(fitnesses)[-elone_size:] return pop[elite_indices]

这里有个骚操作:把求最小值转换成求负数的最大值。选择阶段就像选美比赛,表现最好的前4名直接晋级,保留下优质基因。

重点来了——交配和变异:

def crossover(parent1, parent2): cross_point = np.random.randint(1, len(parent1)) return np.hstack((parent1[:cross_point], parent2[cross_point:])) def mutate(individual, mutation_rate=0.1): mask = np.random.rand(len(individual)) < mutation_rate individual[mask] += np.random.normal(0, 0.5, sum(mask)) return individual

交叉操作像父母各剪一段基因拼接成新个体,变异则是随机给某些基因加点噪声。注意变异幅度用正态分布,这样既不会突变太猛也不会完全不变,比固定步长聪明多了。

整套进化流程封装成:

def genetic_algorithm(func, dim=2, iter_num=50): pop = create_population(20, dim, -10, 10) best_values = [] for _ in range(iter_num): fitnesses = np.array([func(ind) for ind in pop]) elites = selection(pop, fitnesses) selected = elites.copy() while len(selected) < 20: parents = elites[np.random.choice(len(elites), 2, replace=False)] child = crossover(*parents) child = mutate(child) selected = np.vstack((selected, child)) pop = selected best_values.append(-np.max(fitnesses)) # 转换回原函数值 return best_values

迭代过程中始终保持种群数量稳定,每一代都保留精英并补充新血。记录最优解的变化趋势,方便后续画收敛曲线。

跑完50代后画个进化轨迹:

import matplotlib.pyplot as plt history = genetic_algorithm(fitness) plt.plot(history, 'g', linewidth=2) plt.title('进化过程曲线') plt.xlabel('迭代次数') plt.ylabel('函数值') plt.show()

你会发现曲线像滑梯一样往下溜,最后稳稳停在0附近。实际跑几次会发现,基本在10代以内就能找到精度1e-4级别的解,比随机搜索高效不止一个量级。

这套代码的妙处在于改个目标函数就能解决其他优化问题。比如把fitness函数改成sum(np.sin(individual)individual*2),立马变成求解震荡函数的最小值。参数调整也简单,种群规模、变异率、选择数量这些都可以根据问题复杂度灵活配置。

刚入门的同学可能会问:为什么不直接用梯度下降?问得好!遗传算法的优势在于:1)不依赖梯度信息,2)能跳出局部最优,3)特别适合离散/非线性问题。当然,计算量确实大些,但对于小白理解优化算法的本质,这可比推导数学公式直观多啦。

http://www.cnnetsun.cn/news/524657.html

相关文章:

  • 实战笔记】CP1H电子手轮控制伺服硬核操作
  • 电子电路中的负反馈机制:全面讲解与应用
  • 通俗解释Scanner类缓冲区原理:结合常用方法分析
  • 通俗解释OllyDbg中代码段与数据段的识别方法
  • 揭秘!提示工程架构师眼中Agentic AI在智能设备的独特应用
  • Matlab实现粒子群优化算法求解含压缩储能设备的综合能源系统运行优化的结果及代码注释与参考文献
  • Comsol介质超表面三次谐波非线性模型,包含功率依赖。 且倍频模型以及转换效率计算
  • 三菱Q系列PLC ,QD77MS16走总线控制伺服项目,实际应用的 程序结构清晰明了,通俗易懂...
  • H5U的一个比较完整的程序框架. PLC还是性价比挺高,特别是对于伺服的总线。 主打的伺服控制...
  • 最近在项目上折腾西门子200smart和安川V1000变频器的Modbus通讯,踩了不少坑也攒了点经验。直接上干货,手把手教你怎么玩转这俩设备的交互
  • 零基础理解模拟电子技术中的放大电路工作原理
  • Keil找不到头文件:C语言开发环境配置完整指南
  • [内网流媒体] 公司环境中哪些行为属于红线
  • 高密度板生产对接:Altium Designer设计与PCB板生产厂家协作
  • 护角市场:全球格局、技术趋势与未来增长路径
  • 完整回放|上海创智/TileAI/华为/先进编译实验室/AI9Stars深度拆解 AI 编译器技术实践
  • 逻辑回归中的条件概率
  • 研究发现商业AI模型可完整还原《哈利·波特》原著内容
  • Razer在2026年CES展会推出全息AI伴侣项目
  • 鲲鹏平台 HPC 高性能计算应用实践:矩阵乘法并行优化从入门到精通
  • 工业现场声音报警实现:有源蜂鸣器和无源区分手把手教程
  • 打卡信奥刷题(2666)用C++实现信奥题 P2863 [USACO06JAN] The Cow Prom S
  • 直播云服务器安全防护有哪些常见的误区?
  • 数字化SPC项目申报,看这个投资回报评估就够了...
  • UVC协议实现高清视频传输:项目应用详解
  • Vitis安装与Xilinx USB下载器驱动兼容性完整指南
  • 从零实现车载网络的UDS诊断响应程序
  • 【卫星】全球导航卫星系统信号处理、误差分析和定位的MATLAB 实现
  • 【DOA估计】基于Wirtinger梯度的原子约束最大似然无网格DOA估计附Matlab复现含文献
  • 基于工业设备的RS232引脚配置:操作指南