【数学规划】模拟退火算法
一、要解决的问题:
某个目标函数的最值〔某一给定的函数、旅行的路程或费用、买书的花费、利润)
(最大值问题通过给目标函数添加负号可以转换为求最小值问题)。
(1)求一个给定函数的最值问题
(2)旅行商问题
(3)书店买书问题(假设有m个书店,n本书,那么买书的方案数就有m^n)
(4)背包问题(如果有n件货物,那么可能性就有2^n)
在matlab中有一个函数:intlinprog专门解决0-1规划问题。
二、求解的通用步骤
(1)蒙特卡罗模拟(这里用其求解最值问题)
随机生成很多组解,验证这些解是否满足题目的约束条件,若满足则将其保存到一个"可行集"中,然后计算这个可行集内每个解对应的目标函数值,在里面找到最值即可。
对比穷举法:穷举法是按照某一特定的规则来穷举整个空间,蒙特卡罗模拟是随机搜索,这是两者的区别。共同的缺点:如果解空间的可能性特别特别多,就不能用
求函数y= 11sinx +7cos(5x)在[-3,3]内的最大值
蒙特卡罗模拟:随机生成一万个x: [0.5245 2.2515 -1.0251 1.5441 -2.8954……]
穷举法:x每次增长一个固定的长度:[-3-2.9999 -2.9998 -2.9997……]
注意:当要求的函数中有30个自变量时,上面两种方法都不能做
(NP-Hard: TSP有38个城市时,对应的计算量是10^44次,假设我们的计算机每秒可进行10亿次计算,那么穷尽所有解的时间大于1“亿亿亿""年)﹒
启发式搜索
盲目搜索还是启发式搜索?
按照预定的策略实行搜索.在搜索过程中获取的中间信息不用来改进策略,称为盲目搜索;反之,如果利用了中间信息来改进搜索策略则称为启发式搜索。
例如:蒙特卡罗模拟用来求解优化问题就是盲目搜索.还有大家熟悉的枚举法也是盲目搜索。
关于“启发式”,可以简单总结为下面两点:
1)任何有助于找到问题的最优解,但不能保证找到最优解的方法均是启发式方法;
2)有助于加速求解过程和找到较优解的方法是启发式方法。
模拟退火算法就是启发式搜索算法(还有蚁群、遗传、粒子群等)中的一种。
(2)模拟退火算法
1、爬山法找函数的最大值
怎么找到这个一元函数的最大值(只有一个上下界约束,即函数的定义域)?
爬山法的缺陷:
a.与初始值的选取有关
b.特别容易找到局部最优解
假如我们现在站在上帝视角来看这个图,很明显我们要找的最大值在全局最大值处,但是我们可能找到的是位于局部最大值点。因为我们观察到该点左右两侧邻域的目标函数值都小于该点的目标函数值。若我们想要搜索到最大值处,就还需要往左走一段,因此爬山法实际上是一种“眼光狭隘"的搜索算法(贪心)。
我们马上要介绍的模拟退火算法就能克服这个问题。它在到达局部最大值处后,会以一定的概率接受一个比当前解要差的解(即该点处左右两侧的邻域),此时就有几率跳出局部最大值点,从而我们就有了找到蓝色点的可能性。
2、举个例子来说:求函数内的最大值
求函数y= 11sinx +7cos(5x)在[-3,3]内的最大值
p的概率为0,对应爬山法,概率为1对应蒙特卡罗方法
还有sigmoid函数的值域也是[0,1]。
a.接受新解的概率p越大意味着在解空间中搜索的范围越大。
b.假设我们将搜索过程看作一个“工序”,那么搜索前期我们搜索的范围应该尽量的大,这样能避免陷入局部最优解;搜索后期我们搜索的范围应该尽量的小。
c.
Ct可以看作一个和时间有关的系数,因此在搜索过程中,我们接受新解的概率p就和时间有关,搜索前期t较小,我们希望搜索的范围大,即更倾向于接受新解,那么对应的p就应该大一点,而Ct与p负相关,因此Ct,应该小一点;搜索后期我们希望p较小,那么Ct应该大一点,因此我们可以下结论:Ct关于t递增。﹒
问:如果这个优化问题有约束条件怎么办?
答:在生成解B,就验证是否满足约束条件。
问:这个Ct怎么设置呀?
【数学规划】模拟退火算法相关推荐
- Python数模笔记-模拟退火算法(3)整数规划问题
1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...
- 【TWVRP】基于matlab模拟退火算法求解带时间窗的车辆路径规划问题【含Matlab源码 160期】
⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...
- 2018-4-8模拟退火算法
阅读资料来源: <智能优化算法以及matlab实现>第七章 [图文]智能优化算法_数学建模_王成章_模拟退火法_2011_百度文库 https://wenku.baidu.com/view ...
- HDU2899(二分查找+or+模拟退火算法)
这道题其实是利用函数求导,判断求导后的函数是否大于零或者小于零,等于零情况,从而判断原函数的单调性,代入X求出函数的最小值. 模拟退火算法: 方法一:二分 #include<stdio.h> ...
- 【算法】模拟退火算法解决TSP问题的matlab实现
[算法]模拟退火算法解决TSP问题的matlab实现 参考文章: (1)[算法]模拟退火算法解决TSP问题的matlab实现 (2)https://www.cnblogs.com/wenyehoush ...
- 机器学习(MACHINE LEARNING)MATLAB模拟退火算法【SA】
文章目录 1 什么是智能优化算法 2 常用的智能优化算法 3 智能优化算法的特点 4 模拟退火算法 4.1 简介 4.1 工具箱(SA) 1 什么是智能优化算法 智能优化算法又称现代启发式算法,是一种 ...
- 大白话解析模拟退火算法
一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解. ...
- 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】
简述 代码我是基于我之前写的两篇,一篇是遗传算法TSP的Python实现,一篇是模拟退火算法的解决TSP的C++实现. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题 遗传算法解 ...
- 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题
简述 算法设计课这周的作业: 赶紧写了先,不然搞不完了. 文章目录 简述 算法理论部分 变量简单分析 从状态转移概率到状态概率 推导 理解当温度收敛到接近0的时候,收敛到结果 理论部分的后记 pyth ...
最新文章
- 怎样在bug管理上节省时间
- 两岸MVP强强联手--最硬Windows Server 2008达人
- 找到合适的方案记录服务端日志
- 快速排序及优化(Java实现)
- OpenCV显示copyMakeBorder功能的实例(附完整代码)
- Maven-生命周期
- 2020HW必备-蜜罐如何在攻防演练中战术部防
- 2019 十大国产开源项目来势汹汹!
- MBA 案例:一个叫花子做的策划
- 武魂金刚少林加点、装备坐骑及江湖技能选择
- mac 系统下 刻录centos 系统到 U盘中
- Java设计模式之——代理设计模式
- linux下巧用tail命令 创建自解压tar文件
- 西安西北大学计算机研究生学费,关于西北大学研究生学费及住宿的解答
- 爬虫爬取全国地名的中文和拼音
- 可变剪切|rmats
- mp3lame linux 编译,linux下lame编程:wav转MP3示例代码
- work with用法
- 心形线方程-Geek献给女友的爱意情人节
- python3GUI--仿做一个网易云音乐By:PyQt5(附下载地址)