本文主要记录和分享学习到的知识,算不上原创。

*参考文献见链接。

本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing)。

目录

  前言

  Hill climbing 的过程

  Hill climbing 的伪代码

  Hill climbing 的不足

前言

爬山算法是以local search为核心框架的启发式算法中最简单的算法,当然,结果一般也不太好,因为爬山算法有一个很大的缺点:不能跳出局部解。

就像我们在local search那篇文中提到,以local search 为框架的启发式算法需要综合考虑到算法的两个方面,即intensification和diversification。爬山算法在diversification这一方面没有任何措施,所以导致不能跳出局部最优解。

所以对于可能拥有若干个(数目还很多)的MIP问题,仅仅依靠爬山算法,效果是比较差的。所以大部分情况下也不会考虑仅使用爬山算法。

但是爬山算法作为local search中最简单的算法,理解爬山算法有助于进一步理解local search。

爬山算法的联想词:局部最优、深度搜索

Hill climbing的过程

由于hill climbing是以local search为框架的,所以其算法过程也是很类似的。

首先,我们先摆出local search的过程:

(1) 生成初始解:算法从一个初始解或若干个初始解出发;

(2) 定义邻域和候选解:定义解的邻域,并产生若干个候选解;

(3) 确定新解:从候选解中确定新解;

(4) 迭代:重复上述搜索过程,直至满足终止条件,期间可能伴随着参数的调整。

再一一对应local search的过程,将其中一些元素具体化,即可得到hill climbing的过程:

(1)  生成初始解:算法从一个初始解开始。初始解可以随机生成,也可以是给定的。

(2)  定义领域和候选解:定义解的邻域和候选解。不同的爬山算法会考虑不同的邻域结构。

(3)  确定新解:选出候选解中的最优解,如果最优解大于当前解,则将该局部最优解作为新解;

(4)  迭代:重复上述搜索过程,直至满足终止条件。终止条件可以是时间、迭代次数,也可能是当前解不能进一步优化了。

Hill climbing的伪代码

Hill_Climbing algorithm for minimization problem

Procedure HillClimbing()
x:=getInitial(); //get initial feasible solution x
while(the stopping condition is not reached)
x'=localSearch(N(x)); //select the optimal solution from the neighborhood of x as x'
if(c'x'<=c'x)
x:=x'
else
return x
  end

Hill Climbing的不足

Hill Climbing的缺点主要表现在不能跳出局部最优解

MIP启发式算法:爬山算法 (Hill climbing)的更多相关文章

  1. 爬山算法 | Java版HA_TSP

    嗯哼,今天记录下采用Java编写的爬山算法(Hill Algorithm)求解TSP问题. 爬山算法与其他智能算法类似,是一种用来求解多峰函数最值的算法,爬山算法的基本思想是新解不劣于当前解则转移,否 ...

  2. MIP启发式算法:遗传算法 (Genetic algorithm)

    *本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 本文主要讲述启发式算法中的遗传算法.遗传算法也是以local search为核心框架,但在表现形式上和hill climbing, ta ...

  3. POJ 2420 A Star not a Tree? 爬山算法

    B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...

  4. BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 3192  Solved: 1198[Sub ...

  5. BZOJ.3680.吊打XXX(模拟退火/爬山算法)

    题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...

  6. 基于爬山算法求解TSP问题(JAVA)

    一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  7. NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018

    论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...

  8. MIP启发式算法:Variable fixing heuristic

    *本文主要记录及分享学习到的知识,算不上原创 *参考文章见链接. 本文简单介绍一下Variable fixing heuristic,这个算法同样以local search为核心框架,它的特点在于定义 ...

  9. MIP启发式算法:local branching

    *本文主要是记录并分享最近学习到的知识,算不上原创 *参考文献见链接 本文主要是讲述local branching算法,主要以M. Fischetti的论文 “Local braching”和Pier ...

随机推荐

  1. 二叉查找树之AVL树

    定义平衡树节点: class TreeNode { /** * 树节点的值 */ private int val; /** * 树的高度 */ private int height; /** * 左子 ...

  2. 灰度共生矩阵GLCM分析

    纹理分析是对图像灰度(浓淡)空间分布模式的提取和分析.纹理分析在遥感图像.X射线照片.细胞图像判读和处理方面有广泛的应用.关于纹理,还没有一个统一的数学模型.它起源于表征纺织品表面性质的纹理概念,可以 ...

  3. 【学习笔记】八:浏览器对象模型BOM

    1.window对象 window是BOM的核心,它既是JS访问浏览器的一个接口,又是ES规定的Global对象. 1)全局作用域对象 a.所有在全局作用域中声明的变量.函数都会成为window对象的 ...

  4. apache安装报错

    libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending /some_directory ...

  5. Android学习总结(十)———— Intent的使用

    一.Intent的基本概念 我们已经学习完了Android的四大组件了,在四大组件中我们用得最多的是Intent-Filter.Intent含义就是你想利用它调用哪个组件实现相关的功能,比如调用相机组 ...

  6. [习题]输入自己的生日(年/月/日)#2 -- 日历(Calendar)控件的时光跳跃,一次跳回五年、十年前?--TodaysDate属性、VisibleDate属性

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/10/calendar_visibledate_birthday_dropdow ...

  7. java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类

    6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...

  8. js 上传图片

    <div class="block-input" style="height: 90px"> <span><i class=&qu ...

  9. Codeforces Round #277.5 (Div. 2)-D. Unbearable Controversy of Being

    http://codeforces.com/problemset/problem/489/D D. Unbearable Controversy of Being time limit per tes ...

  10. C04 模块化开发

    目录 模块化开发概述 函数概述 如何使用函数 字符串处理函数 模块化开发特点 模块化开发概述 概述 C语言是面向过程的语言,意味着编写C语言程序的时候,我们要像计算机一样思考如何设计程序. 模块化开发 ...