Python启发式算法中爬山法的讲解及解方程问题实战(超详细 附源码)

简介: Python启发式算法中爬山法的讲解及解方程问题实战(超详细 附源码)

一、启发式算法

还有一类重要的迭代法,它的迭代关系式不依赖问题的数学性能,而是受某种自然现象的启发而得到,称为启发式算法(Heuristic Algorithm),如爬山法、遗传算法、模拟退火算法、蚁群算法等。

启发式算法是一种根据经验,以近似随机的试探来搜索空间的方法,它可以在可接受的计算成本内得到最好解,但不保证能得到最优解。

爬山法

爬山法的思路很简单,它是从起点开始,对周边邻近点进行试探,如果有更好的解,则从该点开始进行新一轮的试探,直到没有更好的解为至。

爬山法好像人在黑夜里爬山,无法看到周边的情况,但可以通过棍子来试探周边上升的位置,然后到该位置再一次试探周边的位置。

爬山法可能跑到所谓的局部最优点,形象地说,就是可以爬到山峰,但不一定是最高的那座山峰。

下面介绍用爬山法来寻找上述方程的解。随机设置初始点,通过多轮迭代,程序能够搜索到接近方程的解的值,求解的精度和迭代的次数和初始点有关

大概迭代到500多次收敛

代码如下

import random
# 搜索步长
delta = 0.001
# 通过代入0和1,可估计出解在0和1之间
BOUND = [0, 1]
def f(x):
    return x**3 + (math.e**x)/2.0 + 5.0*x - 6
def hillClimbing(x, f):
    times = 0
    print(str(times)+":"+str(x))
    while abs( f(x+delta) ) < abs(f(x)) and x+delta <= BOUND[1] and x+delta >= BOUND[0]:
        x = x + delta
        times += 1
        print(str(times)+":"+str(x))
    while abs( f(x-delta) ) < abs(f(x)) and x-delta <= BOUND[1] and x-delta >= BOUND[0]:
        x = x - delta
        times += 1
        print(str(times)+":"+str(x))
    return x
x = random.random() * ( BOUND[1]-BOUND[0] ) + BOUND[0]
x_value = hillClimbing(x, f)

下面将迭代过程可视化

代码如下

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1, 100)
y = f(x)
plt.plot(x, y, color="red", linewidth=1)
plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
6天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
1天前
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
10 5
|
2天前
|
算法 数据可视化 Python
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
13 6
|
3天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
3天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
31 12
|
4天前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
9 0
|
6天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
8天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
29 6
|
9天前
|
算法 数据可视化 Python
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
14 0
|
9天前
|
数据可视化 算法 数据挖掘
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较