![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
优化算法
文章平均质量分 76
智能优化算法和精确算法,暂时使用的语言是:matlab和python。
云湖在成长
1.不怕慢,不怕笨,就怕停。
日拱一卒,天道酬勤,每天一小步。
2.不和别人比,目标是打好手中的牌。
3.目标导向,少玻璃心。
展开
-
逻辑benders分解
benders分解是指把问题分解为主问题和子问题。主问题松弛后得到的信息输入到子问题中,求解中去。加入的割可以提升主问题的下界(主问题提供的解),继续反馈给子问题后,降低了上界(子问题提供的解),直到上下界相等,求解完成。经典的benders分解,指的是子问题是线性规划问题;基于整数的benders分解,指的是子问题是整数规划;而基于逻辑的benders分解,指的是子问题返给主问题的割是根据逻辑得到的割。对于调度问题,通常有以下几种。原创 2024-04-12 21:00:59 · 956 阅读 · 2 评论 -
设计分支定界算法关键步骤
性质是最优解中会出现的性质,那么没有出现这些性质的,不会是最优解(或者说别的解已经包含这些特征了,这个点是无用的),我们说这个点被支配,会进行砍枝操作。在研究的过程中,需要根据问题属性设计出节点的下界。对于调度问题来说,就是部分调度PS下最好的解是多少,即LB。这两点是我们设计出定制的分支定界算法的核心,是我们的工作量体现,更是影响算法表现效果的关键。推导出下界,最好是比较紧的下界,对于后续分支树有巨大好处。不同于经典分支定界的线性松弛法,即线性松弛解为下界。原创 2023-10-10 16:09:04 · 162 阅读 · 0 评论 -
支配规则的作用及应用——以分支定界和有效不等式为例
支配规则的作用是删去一系列被支配的节点,也就是我们说的剪支。大白话理解就是这个节点的信息太差,有比它更好的,已经包含了相应的信息,所以它没什么作用了,这样一来,剪支后的分支树叶子节点变少,我们探索就容易了。线性松弛的解大于等于UB,该枝不可能产生更好的整数解了,因为该枝的整数解比线性松弛的解还大,得到的整数解不会更新UB。对更新UB无用,所以剪支。支配规则需要我们来进行推导,也是体现我们工作量创新点,以及体现我们对问题的理解,定制化算法的关键。πx≤π0,证明左边的π更大,或者是右边的π0更小。原创 2023-10-10 11:27:21 · 158 阅读 · 0 评论 -
benders分解算法 逻辑思路整理(加星)
一般我们经常可以看到的是经典的benders,此处我也结合经典的benders梳理下思路。原创 2023-05-25 12:40:11 · 3716 阅读 · 2 评论 -
Opt算法:2-opt,3-opt,Or-opt,k-opt
Opt是局部搜索local search的方法,而局部搜索算法是在一组可行解的基础上,在当前解的领域内进行局部搜索产生新的可行解的过程。用在TSP和VRP问题中比较多。常见的有2-opt,3-opt,Or-opt,k-opt算法。可以分为2-opt&k-opt、Or-opt、3-opt三类。其中,2-opt是最基本的,用得也最多。K-opt是建立在2-opt基础上的。Or-opt是Or1976年博士论文设计的opt。而3-opt也是比较常见和常用的opt算法。原创 2022-09-18 17:41:56 · 9563 阅读 · 0 评论 -
元启发式算法(智能算法)的思考
启发式算法一般是指“基于规则”的方法,能够直接给出一个解。我们平时说的【智能算法】有的人也叫它启发式算法,其实不太对;或者说为了与前一种区分,通常叫做“元”启发式算法,meta-heuristics。这种通常是改进型算法,也就是通过种群或者邻域不断迭代予以改进。像邻域搜索,蚁群,蜂群等等都属于这一类。......原创 2022-07-02 16:15:31 · 2619 阅读 · 2 评论 -
线性规划和对偶规划学习总结
在学习列生成和分解算法的时候,会频繁用到线性规划和对偶的知识,可以说LP和DP是基础。因此理解线性规划和对偶的本质是很重要的。单纯形法是纯代数运算,从一个顶点跳到另一个顶点;且我们知道最优解一定在顶点取得,可是为什么在顶点一定会取得最优解?为什么从一个顶点跳到另一顶点,通过进基出基就可以实现,它俩为什么是一一对应的?除此以外,在分解算法中的极点和极射线和LP的解是什么样的对应关系?这些问题,应该说必须了解了线性规划和对偶的本质才能够深刻理解,而不至于陷入机械无脑的计算。大概看了慕课的课程,感觉山东大原创 2022-05-31 09:41:33 · 3850 阅读 · 6 评论 -
gurobi求解日志log篇
相信大家在求解的时候,总会看到这个,这就是gurobi的求解日志(log file)。默认是直接开启的,可以通过:python m.setParam("OutputFlag", 0)进行关闭。为0就是关闭,默认为1打开。(Gurobi版本9默认不输出日志文件(log file),版本9相比之前版本,创建日志文件的默认设置有所更改;默认日志文件仅适用于gurobi_cl和带有v9.0的交互式shell。如果想输出log file,需要修改LogFile参数:self.m.setParam(GRB....原创 2022-04-19 10:54:11 · 5657 阅读 · 3 评论 -
Greedy Randomized Adaptive Search Procedure (GRASP),贪心随机自适应搜索算法
目录1.元启发式算法2.GRASP2.1伪代码2.2 构造阶段construction2.3 局部搜索阶段这个算法好像提到的人不多,不知道是不是我的错觉。它是1989年被提出的,专门用来解决组合优化问题。如果仔细看了智能算法篇1常见算法的图片,就会发现它也位列其中。1.元启发式算法备注:元启发式算法一般都结合/借助了一些“知识”bias,并不是盲目的进行搜索。元启发式方法结合了一些biases,这些偏见引导他们只考虑搜索空间的一小部分[6]。因此,他们可以从战略地原创 2022-04-03 19:27:37 · 2416 阅读 · 2 评论 -
智能优化算法——篇2(邻域搜索大家族)
目录1.种群算法和邻域算法的区别与联系2.算法原理总结2.1 变邻域搜索算法VNS2.2 自适应大邻域搜索算法ALNS在篇1中我们提到,算法很多,但是最经典的有8种,分别是:遗传算法、禁忌搜索算法、模拟退火算法、粒子群算法、蚁群算法、以及邻域搜索中的迭代邻域搜索算法、变邻域搜索算法、自适应大规模邻域搜索算法。前面5种篇1中已有表述,本篇对后面3种做下总结。这些算法有人叫智能算法,有人叫启发式算法,有人叫元启发式算法等等,其实都可以。1.种群算法和邻域算法的区别与联系我之所以分原创 2022-03-31 21:12:06 · 5564 阅读 · 3 评论 -
变邻域搜索算法(Variable Neighborhood Search,VNS)
目录1.局部搜索算法的共性2.变邻域搜索算法VNS2.1 VND关键点2.1.1变邻域Variable Neighborhood Descent (VND)2.1.2扰动操作shaking procedure2.2VNS过程伪代码变邻域搜索算法是对局部搜索算法的一种改进,是一种改进型的局部搜索算法。和自适应大邻域搜索属于不同的体系,但属于邻域的大家族。1.局部搜索算法的共性局部搜索算法的统一框架描述为:(1)算法从一个或若干个初始解出发。(2)在算法参数控...原创 2022-03-31 14:42:22 · 10641 阅读 · 0 评论 -
自适应大邻域搜索算法(Adaptive Large Neighborhood Search——ALNS)
这又是一种基于邻域的搜索算法,邻域及其邻域的相关知识可以看这篇——禁忌搜索(TS——Tabu Search)与邻域搜索基础知识。之所以单独拿出来,是因为邻域搜索Neighborhood Search(NS)(本质也是一种启发式算法)也是一个奇妙的分支。1.邻域搜索及其大家族1.1 邻域搜索涉及概念邻域搜索算法(或称为局部搜索算法)是一类非常常见的改进算法,在每次迭代时通过搜索当前解的“邻域”找到更优的解。邻域搜索算法设计中的关键是邻域结构的选择,即邻域定义的方式。根据以往的经验,邻域越大,局..转载 2022-03-31 10:50:52 · 9969 阅读 · 3 评论 -
算例、benchmark、全排列、贪心算法-启发式算法备忘
1.问题的算例:就是问题参数的具体化。通俗来说,就是给参数赋值。2.benchmark:就是求解问题算例的一个基准。比如获得的价值为7,这个最优解可以看成是该算例的一个Benchmark。Benchmark概念的引出——只是为了方便我们对算法的效果进行一个对比。比如说小明同学选了第1个物品和第2个物品,获得的价值为1+4=5,那么小明就可以用他的解决方案和别人的benchmark进行对比。比如与最优的benchmark为7比较的话,显然小明的解质量是更差的,因为所获得的价值比较低。以0-1背包问原创 2022-03-29 10:47:42 · 2793 阅读 · 0 评论 -
禁忌搜索(TS——Tabu Search)与邻域搜索基础知识
禁忌搜索,也是一种常见的邻域搜索算法。其实我觉得很多智能算法本质都是邻域搜索(本质是局部搜索)算法。只不过邻域的应用方式不同,是全局式的邻域搜索算法。比如,局部搜索中最经典的是“爬山算法”。但是会陷入局部最优。禁忌搜索,比较适合解决大规模问题。本质思想是,在极值附近设置禁忌(暂时不许进入)的标识,以达到多多的遍历可行域,保证种群多样性的目的。由美国科罗拉多大学教授Fred Glover在1986年左右提出的,是一个用来跳脱局部最优解的搜索方法。其先创立一个初始化的方案;基于此,算法“移动”到一相邻的原创 2022-03-28 21:31:03 · 8844 阅读 · 0 评论 -
蚁群算法Ant Colony Optimization-ACO
蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。这种算法具有分布计算、信息正反馈和启发式搜索的特征,本质上是进化算法中的一种启发式全局优化算法。[鲁棒性会比较好。]蚁群算法的求解质量好,主要有两个方面的原因:1) 采用正反馈机制,使得蚁群搜索过程中不断收敛,最终逼近最优解。2) 使用轮盘赌算法,保证了解空间的多样性,且受初始值的影响不大。以下是蚁群算法AS应用到VRP问题中的注释。1.1 蚁原创 2022-03-20 14:36:05 · 2016 阅读 · 0 评论 -
模拟退火simulated annealing
1983年Kirkpatrick使用模拟退火来求解组合最优化问题,尽管1953年Metropolis等人已经提出了模拟退火的思想。也就是说1983年模拟退火开始被大量使用。它是模拟固体退火的过程,固体退火后,温度降低,能量也随之降低。如果我们把每个温度下的状态看做可行解,把能量看做是目标函数值,就会发现它与组合最优化问题非常相似。它是一种全局搜索算法,利用Metropolis控制温度下降过程来实现模拟退火。温度比较高时,接受差解的可能性/概率较高,温度较低时,接受差解的概率变小,趋近于爬山算法。这也原创 2022-02-24 19:35:12 · 1071 阅读 · 0 评论 -
算法评价尺度
本篇以离散/组合最优化为基准面,讨论算法评价尺度。最优化问题是从一系列选择中选出最符合要求的那个结果,用数学语言来说就是在一系列定义域内找寻符合约束的最好解。所以三个要点要明晰:变量,约束,目标函数。最优化问题可以分为离散问题和连续问题。离散问题在生活实践中最为常见,而组合优化问题是从一系列组合中找到最好的一个组合,在实际中和离散问题区别不大,所以我们也把离散优化叫做组合最优化,方法是通用的。最优化是从一系列方案(也叫可行域)中找到最好的方案。而算法就是寻找组合问题方案(可行解)的方法。假如得到原创 2022-02-23 11:05:08 · 481 阅读 · 0 评论 -
智能优化算法——篇1
算法最精妙的原理是:在搜索尽可能多的可行域(穷举)和构思出一定的行动指南(贪婪)之间把握平衡点,最终寻得最优。当然,这里的最优,可能不是我们常规意义上的最优。而是,从搜索的方案当中选出最好的,是较好的满意的,不是最好的。我们说的智能优化指的是寻优,不断变优的意思。原创 2021-11-21 20:21:39 · 9294 阅读 · 0 评论 -
分支定界方法(branch and cut,branch and price的基础)
运筹我们最先接触分支定界算法,也就是由Land Doig和Dakin在20实世纪60年代初提出的branch and bound算法,用在整数规划(全部决策变量是整数)中。其实用在混合整数规划(部分决策变量是整数)中也是可以的(本身混合整数规划就能够转化为整数规划)。目前很多求解器,如cplex和gurobi就是基于分支定界算法框架设计的。1.基础版的分支定界算法(假设是min问题)首先介绍几个定理:(1)若上界和下界相等,且上界是整数可行解,那么上界对应的可行解就是最优解。备注:假如上原创 2021-10-18 10:35:48 · 16043 阅读 · 2 评论 -
整数规划之分支切割算法
目录1. 分支切割算法简介2.分支切割原理,及需要考虑的方面3.分支切割算法的关键4.总结1. 分支切割算法简介分支切割算法,即branch and cut,是branch and bound分支定界+cutting plane割平面。同理我们类比分支定价branch and price,是branch and bound分支定界+column generation列生成。两者都是精确算法。解决的是整数规划问题。我们通过松弛IP得到LP,最好松弛得到的LP就是整数解。但是实.原创 2021-11-14 20:31:26 · 7074 阅读 · 3 评论 -
灰狼进化算法简介及启发式算法的本质
灰狼算法1. 简介灰狼算法(Grey Wolf Optimization Algorithm, GWO)是2014年Mirjalili S(Mirjalili S, Mirjalili S M, Lewis A. Grey wolf optimizer [J]. Advances in Engineering Software, 2014, 69 (3): 46-61)提出的一种群智能优化算法。并验证其在求解精度、稳定性等指标优于其他典型算法。它算是比较新的算法,目前应用的比较多,但基本在起步阶段。个原创 2021-06-07 15:43:29 · 4808 阅读 · 4 评论 -
遗传算法流程
global G ; %当前代global fitness_value;%当前代适应度矩阵global best_fitness;%历代最佳适应值global fitness_avg;%历代平均适应值矩阵global best_individual;%历代最佳个体global best_generation;%最佳个体出现代generation_size = 200;%迭代次数cross_rate = 0.6;%交叉概率mutate_rate = 0.01;%变异概率fitnes.原创 2021-06-22 09:40:55 · 904 阅读 · 0 评论