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

article/2025/11/10 13:03:09

【概述】

爬山法(Hill Climbing,HC)是一种局部择优的贪心搜索算法,其本质上是梯度下降法。

该算法每次从当前的节点开始,与周围的邻接点进行比较:

  • 若当前节点是最大的,那么返回当前节点,作为最大值
  • 若当前节点是最小的,就用最高的邻接点替换当前节点,从而实现向山峰的高处攀爬的目的

如此循环往复,直到达到最高点为止。

但该算法的主要问题是:局部最大,即某个节点会比周围任何一个邻居都高,但只是局部最优解,并非全局最优解。

如下图,在处于当前解时,爬山法搜索到局部最优解后,就会停止搜索,因为在局部最优解这个点,无论向哪个方向小幅度的移动,都无法得到更优解

此外,其还存在以下两种问题:

  • 高地问题:搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率降低
  • 山脊问题:搜索可能会在山脊的两面来回震荡,前进步伐很小

当出现以上问题后,只能随机重启爬山算法来解决。

【主要思路】

首先,随机选择一个登山的初始时间 T,这个参数是随机选择

然后,只要当 T 大于一个边界值 EPS 时,就将当前点与其邻接点进行比较:

  • 如果 res<newRes,转移答案,并记录新坐标点 pos
  • 如果 res>newRes,不转移

之后,根据记录下来的新坐标点 pos,去转移状态,一般为:sta = sta + (node[pos] - sta) * T;

最后,对 T 乘以一个小于但十分接近于 1 的数 delta,以体现时间对答案的影响。

不断重复上述步骤,直到邻接点中不再有比起大的点。

int getPos(double x) {//比较答案并获取新坐标点int pos;//新坐标点double res = -INF;for (int i = 1; i <= n; i++) {double newRes = getRes(x, node[i]);//获取新状态答案if (newRes > res) { //比较答案res = newRes; //更新结果pos = i; //记录新坐标点}}return pos;
}
void HC(double &x,double &y) {double T = 1;while (T > EPS) {int pos = getPos(x);//获取下一状态的坐标sta = sta + (node[pos] - x) * T;//转移x状态T *= 0.96;}
}

 


http://chatgpt.dhexx.cn/article/10mmi2yx.shtml

相关文章

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给我这么一个机…

Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照

转自冯乐乐的《Unity Shader入门精要》 通常来讲&#xff0c;我们要模拟真实的光照环境来生成一张图像&#xff0c;需要考虑3种物理现象。 首先&#xff0c;光线从光源中被发射出来。 然后&#xff0c;光线和场景中的一些物体相交&#xff1a;一些光线被物体吸收了&#xff…