搜索算法——爬山法

article/2025/11/10 12:08:49

不断更新中......

一、

爬山算法:爬山算法是一种简单的贪心搜索算法,该算法每次从当前位置的临近空间中选择一个最优解作为当前解,直到达到一个局部最优解。爬山算法可以类比成一个有失忆的人在浓雾中爬山。这里就揭示了爬山算法的两个问题:

失忆:就是说这个人不记得他去过什么地方,他只记得他现在所处的位置,以及周边的情况(因为有浓雾,所以他只能看到最近的周边的情况)。所以说他在任何时候只存储一个当前的状态,之前的所有的状态全部不记得了。那么我们就可以看出爬山算法非常依赖于这个初始状态(如果初始状态距离全局最值点很近的话,是更容易搜索到全局最值点的)。

浓雾:当他走到一个局部最值点时,因为他看见远处是否还有更大的最值点,所以就把当前这个局部最值点返回给你(爬山算法的返回是返回一个状态而不是一个路径,这个状态就是一个局部最值点)。

爬山算法的输入是定义的两个局部变量,一个是当前状态(当前结点),还有一个就是用来存储邻居结点的neighbor。我们从初始结点(也就是我们的当前结点)出发,开始往前爬山(往前搜索)。首先根据当前结点能够产生多少个后续结点,然后在这些后续结点中选择一个最大值(这个值是用你所定义的评估函数评估出来的)的后续结点,并将它放进neighbor中,然后将后续结点的值与当前结点的值进行比较,如果发现当前结点的值比后续结点的值要大,那么就意味着当前结点就是一个局部最值点了,所以就不用动了,把当前结点对应的状态返回即可。但是如果当前结点的值比后续结点的值要小,那么就往前走。这样一步一步地进行迭代,直到走到一个局部最值点。

所以说,爬山算法的主要缺点是可能会陷入局部最优解,而不一定能搜索到全局最优解。当然有一种办法就是多运行几次爬山搜索算法,每一次都使用不同的初始状态,然后从里面挑一个最大的值作为这个问题的解。

在某个给定的定义域X内,求函数f(x)对应的最优值。这里假设求最小值:

如果X是离散有限取值,那么可以通过穷取法获得问题的最优解;

如果X是连续的,且f(x)是凸的,那么可以通过梯度下降等方法获得最优解;

如果X是连续的,但是f(x)是非凸的,虽说也可以通过梯度下降找到局部最优解但不一定找到全局最优解。

优点:

①避免遍历,采用启发式搜索策略,效率更高

(启发式搜索:在状态空间中进行搜索并对每一个搜索的位置进行评估,从而得到最好的位置)

(状态空间:用来描述一个问题的全部状态以及这些状态之间的相互关系)

缺点:

①因为不是全面搜索,所以结果可能只是局部最优解,而不是全局最优解

②如果到达高地(平顶),那么就无法确定最佳搜索方向,会产生随机走动,使得搜索效率降低

③搜索可能会在山脊的两面来回振荡,前进步伐很小

 

# 我的代码# @Time : 2019/11/14 下午 3:09'''
问题:设方程y=x1+x2-x3,
x1是区间[-2,5]中的整数,
x2是区间[2,6]中的整数,
x3是区间[-5,2]中的整数,
使用爬山法,找到使得y取值最小的解
'''
import  numpy as npy = 10000
list_mid = list()
list_x = np.zeros(3)
for x1 in range(-10, 6):for x2 in range(2, 7):for x3 in range(-5, 9):s = x1+x2-x3list_mid.append([x1, x2, x3])  #把每种搜索都记录下来if s < y:y = slist_x = [x1, x2, x3]  #最优搜索选择continueelse:continueif s < y:print(s)
else:print(y)
print(list_x)
print(list_mid)

 

 

 


http://chatgpt.dhexx.cn/article/vNQNHWFY.shtml

相关文章

搜索 —— 启发式搜索 —— 爬山法

【概述】 爬山法&#xff08;Hill Climbing&#xff0c;HC&#xff09;是一种局部择优的贪心搜索算法&#xff0c;其本质上是梯度下降法。 该算法每次从当前的节点开始&#xff0c;与周围的邻接点进行比较&#xff1a; 若当前节点是最大的&#xff0c;那么返回当前节点&…

Linux:快速查看IP地址及修改IP地址

导读Linux下如何快速查看IP地址及修改IP地址&#xff0c;有一个方法供参考 查ip 方法/步骤1: 打开linux操作系统在进入到界面 方法/步骤2: 在桌面右击打开终端。 方法/步骤3: 终端里输入ifconfig -a命令在回车键 方法/步骤4: 如下图可以看到了ip地址。 修改ip 方法/…

Linux Ubuntu查看IP信息的两种方式Ubuntu中检查你的 IP 地址

论使用什么系统&#xff0c;都有用到ip地址的时候&#xff0c;习惯了windows系统的人很容易就能查找出系统的ip&#xff0c;但是在linux系统如何查看ip呢&#xff1f;作为Linux新手&#xff0c;以Ubuntu的使用经验&#xff0c;我知道Ubuntu查看IP有两种方式。 第一种是在终端中…

Linux查询出口IP

查询的方式是通过Linux的curl访问查询ip的网站进行查询 具体步骤&#xff1a; 1.查询查询ip网站的ip 2.配置Linux的hosts文件 在/etc中的hosts文件增加上面的域名和ip&#xff08;注意&#xff1a;是ifconfig&#xff0c;不是ipconfig&#xff09; 3.在ssh命令下执行 curl ifc…

Linux 查看本地ip

Linux 查看本地ip 终端中输入指令ifconfig -a终端中输入指令hostname -I通过图形界面查看IP地址&#xff08;还未试通&#xff09; 终端中输入指令ifconfig -a 弹出的IP地址有点多 。 终端中输入指令hostname -I 会直接显示本机在局域网内的IP地址&#xff0c;但可能会显示多…

Linux服务器查看Ip地址

在服务器的网络配置中&#xff0c;需要同时配置这两种网络&#xff0c;才能使服务器正常使用。使用内网是为了保证我们的服务器处在一个安全的网络环境中&#xff0c;可以减少外部病毒的影响&#xff0c;而访问外网是为了方便我们配置服务器一些资源&#xff0c;如驱动程序&…

Linux 查看IP

UBuntu 系统下 按CtrlAltT 唤出终端 在终端输入: ifconfig 命令 点击回车 就可以看到自己电脑在局域网的IP地址了 图中第二行 inet 地址&#xff1a;192.168.1.101 就是你的电脑在局域网的IP地址了 如果输入 ifconfig 提示 找不到命令 那就在终端输入&#xff1a;sudo apt-get …

linux查看本机ip地址

linux中哪个命令可以查看自己的IP地址 50 我的主机是通过宽带联网的&#xff0c;主机的IP通过那个本地连接可以看到&#xff0c;但在虚拟机Debian linux5.0终端下输入route -n显示的是destination的IP&#xff0c;怎么查看属于虚拟机linux的IP呢&#xff1f;&#xff08;linux通…

Linux系统下怎么查询自己的ip和port

Linux系统下如何查询自己的ip和port 前言&#xff1a;在Linux系统中&#xff0c;学习网络协议之后&#xff0c;就需要经常查看自己系统的ip和port是否正常开启,那么怎么快速查找它们呢&#xff1f; 我现在就把它们列出来&#xff0c;以解我的心头之恨&#xff01;&#xff01;…

Linux查看IP地址命令

Linux查看公有&#xff08;运营商&#xff09;IP地址&#xff1a;下面两个命令都可以查 curl http://ifconfig.io curl ident.me Linux查看私有IP地址&#xff1a;可以使用以下四个命令中的任一一个 ip addr hostname -I | awk {print $1} ip route get 1.2.3.4 | awk {print…

linux怎么查看ip地址

linux怎么查看IP地址&#xff0c;怎么使用命令来查看IP地址&#xff1f;如下图教您怎么操作。 演示环境&#xff1a;centos7 方法一&#xff1a; 首先打开linux操作系统在进入到界面。 桌面右键打开终端 在终端里输入命令后按下回车键 ifconfig -a我们将看到ens33 位置处的…

linux 查看IP地址

参考资料整理 一.在 linux 下可以通过两个命令来查看本机的 IP 地址&#xff1a; 1.支持包括 Linux 在内的所有 Unix 系统。 # /sbin/ifconfig 2. 对于Linux 而言&#xff0c;也可以使用 ip 命令查看&#xff0c;提示&#xff1a;没有ifconfig命令时可以…

linux查看ip命令

参考文章&#xff1a;https://www.linuxidc.com/Linux/2017-10/147449.htm 摘要&#xff1a; 1、ifconfig 查看ip 2、vi 编辑 /etc/sysconfig/network-scripts 下的配置文件&#xff0c;设置动态分配IP有效 一、查看ip命令&#xff1a;ifconfig &#xff08;ip add 命令也行&…

在 Linux 命令行中查找 IP 地址介绍

几年前&#xff0c;ifconfig 是 Linux 中最受欢迎的查询本机 IP 地址的方法。但是现如今 ifconfig 命令已经被启用了。在某些 Linux 发行版上已经不用了。那么&#xff0c;除此以外还有什么别的方式来查询 IP 地址呢&#xff1f;今天我们就来了解一下这个问题。 在 Linux 命令…

在Linux系统中查找IP地址(六种方式)

在terminal输入命令 hostname -I 或 ifconfig 或 ip addr 或 ip address 或 ip addr show 或 ip address show

Linux下查看IP

输入ip查询命名 ip addr 也可以输入 ifconfig&#xff08;centOs7没有ifconfig命令&#xff09;查看ip&#xff0c;但此命令会出现3个条目&#xff0c;centos的ip地址是ens33条目中的inet值。 发现 ens33 没有 inet 这个属性&#xff0c;那么就没法通过IP地址连接虚拟机。 接着…

Linux 中查找 IP 地址的方法

概要 在 Linux 系统中&#xff0c;经常需要查找 IP 地址以进行网络配置、故障排除或安全管理。无论是查找本地主机的 IP 地址还是查找其他设备的 IP 地址&#xff0c;本文将介绍三种简单的方法&#xff0c;帮助你在 Linux 中轻松找到所需的 IP 地址。 方法一&#xff1a;使用 i…

12.4 高斯模糊

代码来源于 冯乐乐 shader入门精要 using System.Collections; using System.Collections.Generic; using UnityEngine;public class MyGaussianBlur : PostEffectsBase {public Shader gaussianBlurShader;private Material gaussianBlurMat;public Material material{get{gau…

Gamma矫正,先有鸡还是先有蛋的故事

先上图 此图出于LearnOpenGl CN。原文可能由于翻译的关系&#xff0c;导致内容其实并不好理解。翻阅了不少资料后&#xff08;其实就是冯乐乐老师的入门精要&#xff0c;逃...&#xff09;&#xff0c;想对gamma矫正做一个简单的总结。 先剖析一下这张图的含义&#xff08;此图…

记录参加CSDN上海大联欢活动

CSDN官方北上广三地同时举行的活动小结&#xff1a;http://geek.csdn.net/news/detail/50482&#xff0c;下面是本人参加上海站的小结。 今天很荣幸参加CSDN技术大牛上海聚会&#xff0c;首先申明一点我只是一个不起眼的小程序员&#xff0c;首先就是要感谢CSDN给我这么一个机…