本篇为在University of Birmingham 学习Advanced Nature-Inspired Search and Optimisation课程中的笔记之一
This is one of the notes from the Advanced Nature-Inspired Search and Optimisation course at the University of Birmingham

文章目录

  • 1 问题引出——旅行商问题
    • 1.1 何为旅行商问题 (Travelling salesman problem (TSP))
    • 1.2 TSP背景
    • 1.3 TSP案例
  • 2 方案背景——优化问题
    • 2.1 什么是优化(Optimisation)
    • 2.2 优化的定义
    • 2.3 优化的分类
  • 3 方案介绍——局部搜索算法
    • 3.1 算法一览
    • 3.2 TSP的求解
      • 1). 使用线性规划及蛮力算法求解
      • 2). 使用线性规划及蛮力算法求解的劣势
      • 3). 使用随机算法求解
      • 4). 使用局部搜索算法求解
  • 4. 总结

1 问题引出——旅行商问题

1.1 何为旅行商问题 (Travelling salesman problem (TSP))

  • 给定:城市列表以及每对城市之间的距离,
  • 搜寻:最精确的路线,该路线只访问每个城市一次,然后返回出发城市
  • 组合优化中的一个NP难题
20
30
12
34
42
35
A
B
C
D

1.2 TSP背景

  • 一本1832年的旅行推销员手册提到了这个问题,并举例说明了在德国和瑞士的旅行情况,但没有进行数学处理。
  • 计算机科学和运筹学中最突出,研究最广泛的组合优化问题之一
  • 许多优化问题(例如印刷电路板(PSB)设计,即在一块电路板上打成百上千个孔,转头在这些孔之间移动,相当于对所有的孔进行一次巡游。把这个问题转化为TSP,孔相当于城市.孔到孔之问的移动时间就是距离。)可以表述为TSP或其变体
  • 从概念上讲简单但计算困难:开发和评估组合优化算法的最佳基准

1.3 TSP案例

  • USA13509是TSPLIB中较大的TSP实例之一。它包含美国的13,509个城市(实例被提供给TSPLIB时,所有人口至少为500的城市)。
  • UK49687 前往英国几乎所有酒吧的最短游览路线。
  • Kaggle Traveling Santa 2018

2 方案背景——优化问题

2.1 什么是优化(Optimisation)

  1. 优化:找到问题的最佳或最理想的解决方案
  2. 例如:
    1. 投资组合优化:您拥有投资组合 (Investment Portfolio),例如现金和股票,您知道每种资产的潜在回报和财务风险。如何建立完善的投资组合以在控制风险的同时最大化回报?
    2. 工程优化:您需要使用某些材料设计产品。如何在保持质量的同时设计出最少的材料?

2.2 优化的定义

  1. 优化问题可以通过以下方式表示:

    1. 给定: 一个函数f(x)f(x)f(x) : A\mathbb{A}A ⟶\longrightarrow⟶ R\mathbb{R}R,from some set A\mathbb{A}A to the real numbers
    2. 搜寻: 从可行域A\mathbb{A}A中寻找一个变量 x∗x^{*}x∗ ,使得 A\mathbb{A}A 中所有 xxx,有 f(x∗)≤f(x)f(x^{*}) \leq f(x)f(x∗)≤f(x) (最小化) or f(x∗)≥f(x)f(x^{*}) \geq f(x)f(x∗)≥f(x) (最大化)
  2. 函数f(x)f(x)f(x)被称为目标函数_Objective function,或成本函数_Cost function(最小化),适应度函数_Fitness function(最大化和在进化计算中)
  3. A\mathbb{A}A被称为可行集(可行域),which is some subset of the Euclidean space specified by a set of constraints
  4. f(x)f(x)f(x)的可行域A\mathbb{A}A被称为 搜索空间(Search space) ,而A\mathbb{A}A的元素, 例如x∈Ax \in \mathbb{A}x∈A被称为候选解(Candidate solutions)或可行解(Feasible solutions)。

2.3 优化的分类

  1. 根据目标函数的性质:

    1. 线性与非线性

      1. 线性函数

        1. 叠加性(Additivity):f(x+y)=f(x)+f(y)f(x +y) = f(x)+f(y)f(x+y)=f(x)+f(y)
        2. 均匀性(Homogeneity):对于所有的aaa都有 $ f(ax) = af(x)$
      2. 非线性函数
        1. 凸优化(Convex): 任何局部最优解即为全局最优解
        2. 非凸优化(Non-convex): 顺着梯度不一定有全局最优解
    2. 多目标与单目标
      1. 单目标(Single objective),即所评测目标只有一个,只需要根据具体的满足函数条件,求得最值
      2. 多目标(Multi-objective),需要在权衡两个或多个相互矛盾的目标的情况下做出最佳决策,即多个目标函数同时优化的数学优化问题
    3. 约束与无约束
      1. 约束优化(Constrained):在某些变量存在约束的情况下针对某些变量优化目标函数的过程。目标函数是要最小化的成本函数或能量函数,或者是要最大化的奖励函数或效用函数
      2. 无约束优化(Non-Constrained):即不对定义域或值域做任何限制的情况下,求解函数f(x)f(x)f(x)
        的最小值。
  2. 根据解决方案的性质:

    1. 连续(Continuous)

      • 数值优化问题: 决策变量的取值往往是连续的,通常是一段连续定义域上的连续函数的函数求得最值的问题。
    2. 离散(Discrete)
      • 组合优化(Combinatorial Optimization): 决策变量是离散的。组合优化问题是对离散变量按照一定评价标准的排序,筛选或分类。

3 方案介绍——局部搜索算法

3.1 算法一览

  1. 分治算法(Divide and conquer algorithms, e.g., quicksort algorithm, Merge-Sort)
  2. 数学编程算法(Mathematical programming algorithms, e.g., linear programming, Multi-objective programming, Dynamic programming algorithms)
  3. 搜索和枚举算法(Search and enumeration algorithms)
    1. 蛮力算法_Brute force algorithms, enumerating all possible candidate solutions and check
    2. 改进的蛮力算法_Improved brute force algorithms, e.g., branch and bound algorithms
    3. 启发式算法_Heuristic algorithms
      1. 局部搜索_Local search, e.g., Hill climbing, Greedy search
      2. 随机算法_Randomised algorithms, which include Evolutionary Computation, etc.

3.2 TSP的求解

1). 使用线性规划及蛮力算法求解
  • 数学规划的求解,参考 线性规划
  • 蛮力算法或改进的蛮力算法 参考 分支与边界
2). 使用线性规划及蛮力算法求解的劣势
  1. 线性规划: 本质上是整数线性规划问题,其本身就是NP难题。 (Why LP cannot solve large instances of NP-complete problems in polynomial time)
  2. 蛮力算法: 复杂度非常大,O(n!)O(n!)O(n!)
  3. 改进的蛮力算法: 分枝剪(Branch and Cut algorithm),O(1.9999n)O(1.9999^n)O(1.9999n)
    1. 依然非常耗时,对于usa13509, 所需的运行时间为2135092^{13509}213509
    2. 事实上,usa13509在1998年由休斯敦-赖斯大学使用两个包含44个CPU的群集解决,从头到尾花费了大约三个月的时间
    3. TSP问题的最大实例是在85,900个城市的TSPLIB中,花费了136 CPU年以上的时间
3). 使用随机算法求解
  • 随机算法及蒙特卡洛算法和拉斯维加斯算法的介绍
  • 不太可行,因为TSP好的解决方案的数量只是所有可行解决方案中很小的,部分–像大海捞针一样
4). 使用局部搜索算法求解
  1. 局部搜索算法_loacl search algorithm

    1. 局部搜索_local search:一种用于解决难题的启发式算法
    2. 想法_Idea:从对解决方案的初步猜测开始,逐步进行改进,直到成为一个解决方案为止
    3. 增量改进_Incremental improvement:局部更改,例如算法迭代移至邻域解决方案
    4. 领域解决方案_Neighbour solution:取决于搜索空间上领域关系的定义,但通常基于相似性(距离)度量
#局部搜索算法基本原理
x0 := generate initial solution
terminationflag := false
x := x0
while (terminationflag != true)Modify the current solution to a neighbour one v belongs to A If f (v) < f (x) then x := vIf a termination criterion is met: terminationflag := true
Output x

注意⚠️: 终止条件可能是达到最大迭代次数,或者对于某些迭代没有改善。

  1. 爬山算法_Hill climbing algorithm

    1. 最简单的局部搜索算法之一
    2. 爬山算法类似于“健忘症患者在浓雾中攀登珠穆朗玛峰”
    3. 迭代算法:
      1. 从任意解决问题开始,
      2. 从当前解决方案的直接领域解决方案迭代搜索更好的解决方案
      3. 直接领域解决方案(Immediate neighbour solutions):与当前解决方案最相似的解决方案。
    4. 两种类型的爬山:
      1. 简单地爬:选择第一个更好的解决方案
      2. 最陡峭地上升/下降爬:比较所有领域的解决方案并选择最佳的解决方案–贪婪的搜索(广度优先),推荐阅读:Steepest Ascent Hill Climbing For A Mathematical Problem
#简单地爬
x0 := generate initial solution terminationflag := false
x := x0
while (terminationflag != true)Modify the current solution to a immediate neighbour one v belongs to A If f (v) < f (x) then x := vIf a termination criterion is met: terminationflag := true
Output x

4. 总结

  • 优化问题可能非常困难
  • 启发式算法,尤其是本地搜索对于困难的优化问题很有用
  • 优化全在于探索发现
  • 随机性可以促进搜索,但不能促进搜索(局部搜索)

旅行商问题(TSP)与局部搜索算法相关推荐

  1. python实现大规模邻域搜索(LNS)求解旅行商问题(TSP)

    文章目录 1. 大规模邻域搜索算法 1.1. LNS定义 1.2. LNS邻域 1.3. LNS框架 2. 旅行商问题TSP 3. python代码示例及结果 1. 大规模邻域搜索算法 参考<H ...

  2. 5.4 Penalty-Based Local Search Algorithms基于惩罚的局部搜索算法

    另一种扩展迭代改进策略的方法是,当搜索过程即将停滞在一个局部极小值时,修改该评估函数[71].这种方法也称为动态本地搜索(Dynamic Local Search, DLS)[52]. 基于惩罚的算法 ...

  3. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  4. 遗传算法解决旅行商问题(TSP)

    遗传算法解决旅行商问题(TSP) 参考文章: (1)遗传算法解决旅行商问题(TSP) (2)https://www.cnblogs.com/studylyn/p/5097238.html 备忘一下.

  5. 人工智能中的局部搜索算法

      在局部搜索算法中,我们不再关心从初始节点到目标节点之间的路径,而是考虑从当前节点出发,移动到它的邻近状态,直到到达合理的目标状态.相比于前面所说的无信息搜索算法和有信息搜索算法,局部搜索算法往往能 ...

  6. 通用局部搜索算法之WALKSAT

    通用局部搜索算法之WALKSAT 设施区位及算法 2009-08-28 20:44:47 阅读29 评论0 字号:大中小 通用局部搜索算法之WALKSAT GSAT 和 WalkSat 是用于求解布尔 ...

  7. k图着色 局部搜索算法与模拟退火算法的python实现

    文章目录 前言 如何评价一个解? 通过计算出的冲突来找它的邻居解 数据的格式 局部搜索 概述 补充 代码 模拟退火 概述 补充 代码 总结以及不足之处 前言 这两种算法就不详细介绍了,流程思路比较简单 ...

  8. 【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法

    Local search algorithms (局部搜索算法) 局部搜索算法 内存限制 局部搜索算法 示例:n-皇后 爬山算法 随机重启爬山 模拟退火算法 局部剪枝搜索 遗传算法 小结 局部搜索算法 ...

  9. (Python)模拟退火算法解决旅行商问题(TSP)

    两种写法思路,最全备注,第二种个人感觉上理解起来稍容易一点: 第一种: import numpy as np import matplotlib.pyplot as plt import pdb# 解 ...

最新文章

  1. 解决在ueditor中上传图片通过后台java+SpringMVC添加水印方法
  2. java常见证书类型和密钥库类型
  3. 在 iOS 应用中直接跳转到 AppStore 的方法
  4. gitlab mysql 配置_gitlab的安装与修改端口配置
  5. Unity3D学习笔记(一) 模型和贴图导入学习
  6. WCF Testing Tool(转)
  7. 二、mongodb数据库系列——聚合操作 索引操作 权限管理
  8. 【今日CV 视觉论文速览】05 Dec 2018
  9. 苹果Mac Studio 3月18日发售 但法国一用户已提前收货
  10. JVM系列(之class文件)
  11. JSON网络传输协议
  12. Imdisk 虚拟磁盘 » A programmer's site
  13. m 序列性质的简单证明
  14. 加法器、半加器、全加器、超前进位加法器
  15. 记一次走心One 2 One沟通
  16. 微信屏蔽网址解决办法 微信QQ已经被屏蔽的域名怎么做跳转
  17. windows桌面程序开发
  18. 机器学习小组知识点14:均匀分布(Uniform Distribution)
  19. equal 和 ==
  20. trainging contest#1(2011大连现场赛)I BY bly

热门文章

  1. 关于数据、数据流、数据管道的一些看法(二)
  2. HBase系列2-HBase快速入门
  3. python进阶之路———文件处理
  4. 谷歌浏览器iframe兼容问题_Javascript iframe交互并兼容各种浏览器的解决方法
  5. wor2007添加分节符
  6. Unix环境高级编程 笔记
  7. 前端实现打电话、发短信邮件
  8. 票据背书以及票据背书的好处
  9. js 定时器的开启与关闭
  10. 密码学的中文入门书籍及课程推荐