5.2 Randomised Iterative Improvement Algorithms 随机迭代改进算法

本文主要是介绍5.2 Randomised Iterative Improvement Algorithms 随机迭代改进算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

迭代改进算法的主要限制源于它们陷入给定评估函数的局部最小值的事实。 处理此问题的一种简单方法是偶尔允许不改进的搜索步骤,即,从当前邻域中选择邻居s'∈N(s),其中g(s')≥g(s)。实现这种方法的机制有很多;其中许多使用了随机决策,以平衡不断恶化的搜索步骤的多样化效果和迭代改进提供的搜索强化效果。

随机迭代改进(RII)是迭代改进的扩展,其中在每个步骤中具有固定概率wp,从当前邻域N(s)随机均匀地选择位置s' - 这被称为随机游走步骤; 否则(即,概率为1-wp),执行标准II步骤。注意,使用这种机制,可以执行任意长的(可能更糟的)随机游走步骤序列。因此,只要给定的邻域图是连通的(即,通过一系列的搜索步骤,可以得到任意两个候选解),RII在任意长时间运行时,会找到任何概率接近1的可解决问题实例的解,即,,其中Ps(RT≤t)是在最多t时间内找到解的概率。具有此属性的算法称为概率近似完整(PAC)。

The Min Conflicts Heuristic with Random Walk (WMCH) 最小冲突启发式与随机游走(WMCH)

利用一种简单的随机游动机制扩展最小冲突启发式,得到一种称为WMCH的随机迭代改进算法[116]。在每个WMCH步骤中,首先从冲突集合中随机均匀地选择变量xi(如在MCH中)。然后,在概率wp≥0的情况下,执行随机游走步骤,即,从其随机均匀选择的域Di分配xi。 在其余情况下,即概率为1-wp,选择并分配冲突最小化值,如在传统的MCH步骤中那样。步行概率(The walk probability)wp(也称为噪声设置)对算法的行为具有关键影响。 对于wp = 0,该算法等效于标准的MinCon流量启发式,因此基本上不完整,但是对于wp> 0,WMCH在概率上近似完整(PAC)。直观地说,对于低的遍历概率,搜索过程很可能难以逃脱搜索空间的局部极小区域,而对于非常高的遍历概率,它的行为开始类似于一个不知情的随机遍历,它将越来越缺乏针对解决方案的有效启发式指导。然而,对于适当选择的wp设置,WMCH在随机重启时的表现明显优于MCH[101]。

WMCH中的随机游走步骤总是涉及一个出现在当前不受约束的约束中的变量; 因此,它们也被称为冲突导向随机游走步骤。 然而,与WMCH之前和启发WMS的GWSAT算法[92](如下所述)不同,WMCH中的冲突导向随机游走步骤不一定能满足任何先前不令人满意的约束。 WMCH可以稍微变化,使得在每个随机游走步骤中,在选择当前违反的约束C中涉及的变量xi之后,为xi分配值v使得C变得令人满意; 如果不存在这样的v,则随机选择一个值。 发现该变体比WMCH [101]中使用的随机游走机制略微好一些。

GSAT with Random Walk (GWSAT)  具有随机游走的GSAT

通过使用类似于WMCH中使用的随机游走机制扩展它,可以显着改进基本的GSAT算法。 这里,在每个冲突导向的随机游走步骤中,从当前不满足条款中出现的所有变量的集合中随机均匀地选择要被变换的变量。 请注意,作为任何此类步骤的结果,至少一个先前不满意的条款将变得令人满意。 这种机制与Papadimitriou的冲突导向随机游走算法密切相关(实际上受其启发),已被证明可以在二次预期时间内解决2-SAT [80]。

具有随机游走的GSAT(GWSAT)[92]是基本GSAT的变体,其在每个局部搜索步骤中概率地决定执行基本GSAT步骤和冲突定向随机游走步骤(如先前所解释的)。 选择具有固定步行概率wp的后一类步骤,否则执行基本GSAT步骤。 虽然对于wp = 0,GWSAT相当于基本的GSAT,但已经证明,对于任何wp> 0,它在概率上近乎完整(PAC)[47]。

对于适当选择的步行概率设置(在问题实例之间变化,但在许多情况下可能高达0.5),GWSAT实现了比基本GSAT更好的性能[92]。 此外,已经表明,当使用足够高的噪声设置时,GWSAT不会遭受停滞行为; 此外,对于硬SAT实例,它通常显示指数运行时分布(RTD)[44,45]。 因此,静态重启是无效的,并且可以通过多个独立运行并行化来获得最佳加速[52]。 对于低噪声设置,经常观察到停滞行为; 最近,有证据表明相应的RTD可以通过指数分布的混合来表征[46]。

WalkSAT

WalkSAT算法在概念上与GWSAT和MCH密切相关;它最初由Selman、Kautz和Cohen[92]发表,现在俗称WalkSAT/SKC。该算法后来被扩展到一个称为WalkSAT architecture的算法框架[73],该框架包括最初的WalkSAT/SKC算法以及其他几种针对SAT的高性能SLS算法(其中有几种将在本章后面的章节中介绍)。此外,已经为CSP实例的更一般类以及约束优化问题开发了WalkSAT的变体(参见5.6节)。

WalkSAT / SKC(和所有其他WalkSAT算法)基于类似于MCH中使用的2阶段变量选择过程。 在每个局部搜索步骤中,首先从所有当前不满足条款的集合中随机均匀地选择子句c。然后,出现在c中的变量之一被填充以获得新的赋值。 该变量的选择基于启发式评分函数得分b(x),该得分函数得分b(x)通过移动给定变量x来计算将被破坏(即变得不令人满意)的当前满意条款的数量。使用此评分函数,应用以下变量选择方案:如果在阶段1中选择的子句c中存在具有得分b(x)= 0的变量x,即,如果c可以在不破坏另一个条款的情况下得到满足,那么x就会被淹没(这称为零损坏步骤)。如果c中存在多个这样的变量,则随机均匀地选择其中一个变量并进行变换。 如果不存在这样的变量,具有一定概率1-p,则选择具有最小得分b值的变量(贪婪步骤;随机均匀地断开连接); 在其余情况下,即,以概率p(所谓的噪声设置),随机均匀地选择来自c的变量之一(随机游走步骤)。

请注意 - 就像在GWSAT中一样,但与MCH不同 -  WalkSAT / SKC中的每一步都保证满足至少一个先前不满足的条款(但同时可能导致许多其他条款变得不满足)。否则,WalkSAT / SKC使用相同的随机搜索初始化,静态随机重启机制和终止标准作为GSAT。

虽然已经证明具有固定maxTries参数的WalkSAT / SKC在应用于2-SAT时具有PAC属性[16],但是在一般情况下不知道该算法是否是PAC。 实际上,当使用足够高(实例特定的)噪声设置时,WalkSAT / SKC似乎没有任何停滞行为,在这种情况下,其运行时行为以指数RTD为特征[44,45,49]。与GWSAT的情况一样,低噪声设置经常观察到停滞行为,并且有证据表明相应的RTD可以通过指数分布的混合来表征[46]。

通常,当使用(有些实例特定的)优化噪声设置时,WalkSAT / SKC的性能明显优于GWSAT。此外,由于它的两阶段变量选择方案,WalkSAT/SKC(与所有其他WalkSAT算法和mchvariant)可以高效地实现,而无需使用GSAT和GWSAT高效实现所必需的渐进评分更新技术。

 

这篇关于5.2 Randomised Iterative Improvement Algorithms 随机迭代改进算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/463934

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组