运筹学笔记
文章平均质量分 88
原文视频:
https://www.bilibili.com/video/BV194411y7sA?p=5&spm_id_from=pageDriver
skycrygg
这个作者很懒,什么都没留下…
展开
-
对偶原理笔记
对偶基础对偶问题基本形式:原问题 对偶问题 部分非基础型转换:(1)(2)对偶关系对照表:原问题(或对偶问题) 对偶问题(或原问题) 目标函数:max Z 目标函数:min w 约束条件: m个 对偶变量: m个 约束条件: ≤ 对偶变量: 约束条件: ≥ 对偶变量: 约束条件: = 对偶变量: 为自由变量 右端常数与目标系数互换 ...原创 2022-03-27 21:56:58 · 6444 阅读 · 0 评论 -
列生成算法原理(单纯形基础)
转载自:【学界】单纯形算法的原理和示例实现一 线性规划问题的标准形式线性规划问题的标准型:其中一般总假设的元素都为整数(线性规划多应用在实际问题,所以要求为整数也可以理解),可行域:最优解集:是的最优解...原创 2021-09-23 21:32:50 · 5453 阅读 · 0 评论 -
ALNS算法——二、Destroy和Repair方法代码解析
转载自:Destroy和Repair方法代码实现解析在整一个ALNS框架中呢,涉及这俩的有:Destroy和Repair方法的具体实现、Destroy和Repair方法管理(包括各个Destroy和Repair方法权重分配、成绩打分、按权重选择哪个Destroy和Repair方法等操作)。 Destroy和Repair方法具体实现模块 Destroy和Repair方法管理模块 一、Destroy和Repair方法具体实现关于Destroy和Repair方法,由三个类组成,分别转载 2021-09-10 15:45:00 · 1086 阅读 · 0 评论 -
ALNS算法——一、主逻辑结构解析
转载自:https://mp.weixin.qq.com/s/NenKRjYbsbQiOw3bMx8jSA一、C++基础1.1 C++中虚函数的作用1、简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。2、实现多态性,多态性是将接口与实现进行分离。3、当基类指针指向一个子类对象,通过这个指针调用子类和基类同名成员函数的时候,基类声明为虚函数就会调子类的这个函数,不声明就会调用基类的。1.2 纯虚函数 纯虚函数指明一个虚拟函数只是提供了一个可被子类型改写的接口。.转载 2021-09-07 16:57:51 · 1606 阅读 · 2 评论 -
自适应大邻域搜索(Adaptive Large Neighborhood Search)-详解
一、概念转载 2021-09-06 16:34:41 · 3379 阅读 · 1 评论 -
ALNS框架求解TSP问题(环境调试)
一、环境准备1.1 安装MinGW在电脑上安装devC++,找到其安装位置,把其目录下的MinGW64\bin文件添加至环境变量。(或者从网上自行下载)如下图所示:devC++安装包打开cmd命令行,输入下面命令:mingw32-make,出现下面提示就成功了。二、代码2.1 下载源代码下载代码并进行解压, 下载地址, 下载后解压到某一位置(路径不要有中文)2.2 修改源代码找到\trunk\src\alns下的OperatorManager.cpp...转载 2021-09-06 16:32:37 · 527 阅读 · 0 评论 -
图论中最小生成树(Minimum Spanning Tree)
转载自:最小生成树一、图图看成是一种由“顶点(node)”和“边(arc)”组成的抽象网络对于通信问题:在各大城市中建设通信网络,如下图所示,每个圆圈代表一座城市,而边上的数字代表了建立通信连接的价格问题:怎样才能以最小的价格使各大城市能直接或者间接地连接起来呢?- 最小的价格- 各大城市可以是直接或者间接相连的可行解:二、最小生成树对于一个图而言,它可以生成很多树,如右侧图2,图3就是由图1生成的。- 从上面可以看出生成树是将原图的全部顶点以..转载 2021-09-05 15:39:31 · 1166 阅读 · 0 评论 -
单纯形法步骤
原文地址:快速掌握单纯形法一、标准型1)目标函数统一为求极大值(或极小值);2)所有约束条件(除变量的非负条件外)必须都是等式,约束条件右端常数项(right-hand-side)b_i必须全为非负值;3)所有变量的取值必须全为非负值。下面模型即为标准形式的展开型:二、转化线性规划问题往往并非标准形式。这个过程包括四个部分的转换:1.目标函数的转换:统一求极大值,若是求极小值,则可将下面的式子乘以(-1)。即: 转化为:...转载 2021-09-01 16:40:18 · 44117 阅读 · 6 评论 -
动 态 规 划
转载自:动态规划 动态规划 是一种基础的算法设计思想。其思想实质是分治思想和解决冗余。与分治法类似的是,我们将原问题分解成若干个子问题,先求解子问题,再从这些子问题的解得到原问题的解。与分治法不同的是,经分解的子问题往往 不是互相独立 的。若用分治法来解,有些共同部分被重复计算了很多次。如果能够保存已解决的子问题的答案,在需要时再查找,这样就可以避免重复计算、节省时间,也就是解决冗余。实际应用中尝试解决一个问题时,其实就是在思考如何将这个问题表达成状态(用哪些变量存储哪些数据),以及如何在状态中转移转载 2021-05-27 11:56:57 · 301 阅读 · 0 评论 -
减治 · 分治 · 变治
转载自:减治 · 分治 · 变治1、减 治 法 减治法采取划分后选择计算 的思想,利用一个问题和同样较小规模的问题之间的某种关系进行划分。我们先确立这种关系,然后既可以从顶至下,也可以从底至上地来运用该关系,将大问题分解成小问题来解决,像是层层嵌套。在实际解决的过程中只针对部分子问题进行求解。减治法有3种主要的变种:1.减去一个常量 (decrease by a constant)2.减去一个常数因子(decrease by a constant factor)3.减去的规模是可变的(var转载 2021-05-15 22:56:32 · 806 阅读 · 0 评论 -
分治法(Divide-and-Conquer Algorithm)经典例子分析
转载自:分治法(Divide-and-Conquer Algorithm)经典例子分析1、快速排序基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。思路分析总体思路: 分而治之。具体操作:选中一个元素为枢轴,以这个枢轴为参照,和每个元素相比较,通过交换位置,将比该枢轴大的元素放在数组尾部,比该枢轴小的元素放在数组头部。当以这个枢轴重新排序转载 2021-05-14 20:07:50 · 1480 阅读 · 0 评论 -
经典优化算法之分治法(Divide-and-Conque Algorithm)
转载自:经典优化算法之分治法(Divide-and-Conque Algorithm)基本介绍分治,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……直接说就是将一个难以直接解决的大问题,分割成一些规模比较小的相同的小问题,以便各个击破,分而治之。通俗解释有这样一个非常经典的问题:有100枚硬币,其中1枚转载 2021-05-14 14:56:53 · 2059 阅读 · 0 评论 -
分支限界--数据结构实现
转载自:算法学习——分支限界法回溯法和分支限界都是以构造一颗解空间树为基础的。回溯法通过深度优先搜索的思想,选择一条可行的路径,一路走下去;而分支限界法可以根据多种规则生成节点,如广度优先搜索,再结合剪枝函数(我们在回溯法里也可以使用)进行剪枝,得出最优解。限界函数的使用我们在回溯法里也提到过,是在寻找最优解时使用的一种优化方法,如果我们使用回溯法解决最优解问题也可以使用(其实回溯法寻找最优解的过程本身就可以看作是分枝限界通过深度优先LIFO的栈实现)。而在分枝限界中,这是必不可少的一部..转载 2021-05-13 16:07:41 · 1777 阅读 · 0 评论 -
分支限界(branch and bound)——概念、Java结构 及 TSP实现
转载自:分支限界法例1代码文件层次如下:其中branch and bound算法主要部分在BnB_Guide.java这个文件。ExampleProblem.java内置了三个整数规划模型的实例。调用的是scpsolver这个求解器的wrapper,实际调用的还是lpsolver这个求解器用以求解线性松弛模型。下面着重讲讲BnB_Guide.java这个文件。 public BnB_Guide(int demoProblem){ exam.转载 2021-05-12 17:36:02 · 2250 阅读 · 0 评论 -
回溯法--TSP
转载自:再谈回溯法回溯法介绍回溯法,又叫试探法,是一种寻找最优解的暴力搜寻法。但是,由于暴力,回溯法的时间复杂度较高,因此在比较一些数字较大的问题时,比如上次我们提到的最短路径问题等,运行时间一般比较长。在回溯法中,深度优先搜索是一种很重要的工具。DFS的基本思想是:(1)某一种可能情况向前探索,并生成一个子节点。(2)过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点,然后重新选择另一方向,再次生成子结点,继续向前探索。(3)如此反复进行,直至求得最优解。回溯法基本思想是:转载 2021-05-12 17:01:55 · 14341 阅读 · 8 评论 -
回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle)
转载自:用回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle)N皇后问题八皇后问题,是一个古老而著名的问题.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法? N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N...转载 2021-05-12 16:10:41 · 6988 阅读 · 0 评论 -
最短路径问题(更新)
转载自:最短路径问题问题介绍简单地说,就是给定一组点,给定每个点间的距离,求出点之间的最短路径。路径问题大概有以下几种: 确定起点的最短路径问题:已知起始点,求起点到其他任意点最短路径的问题。即单源最短路径问题。 确定终点的最短路径问题:与确定起点的问题相反,该问题是已知终点,求最短路径的问题。在无向图(即点之间的路径没有方向的区别)中该问题与确定起点的问题完全等同,在有向图(路径间有确定的方向)中该问题等同于把所有路径方向反转的确定起点的问题。 确定起点终点的最短路径转载 2021-05-12 14:59:15 · 30035 阅读 · 2 评论 -
冒泡排序
基本原理对以下这组数据进行从小到大排列:10 2 3 19 60 12基本原理:从数据最左边开始将相邻两数进行两两比较,然后将较小的数放在左边,较大的数放在右边(即交换两个数的位置,较大的数像一个泡泡一样往上升),依次下去,这组数据的最大值就到了最右边,但剩下的数据还是杂乱,所以还必须对剩下的数据按刚才的方法再来排序;那么就可以得到了从小到大排列的数据。这里将用到两个for循环的嵌套。(类似的从大到小的排列也是可以实现的)①首先将10和2比较,因为10<2,所以数组变为...转载 2021-05-12 13:55:13 · 79 阅读 · 0 评论 -
基础算法| 常用排序算法小结
转载自:https://mp.weixin.qq.com/s/Qsll45WSkWZrYexWi7v5qg排序基础排序的定义将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。排序的分类排序可分为内排序和外排序。所谓内排序就是所有的数据和操作都在内存中完成。而外排序就是说需要排序的数据太大,无法全部塞进内存,需要在内存和外存之间多次数据交换才能完成的排序。算法优劣的术语说明⚫稳定:如果Ai=Aj,开始Ai在Aj前面,排完序之后Ai依然在Aj前面。.转载 2021-05-12 13:49:48 · 191 阅读 · 0 评论 -
列生成(Column Generation)算法
转载自:https://mp.weixin.qq.com/s/y4rojEP3M8Ow3pLKQUKgLw列生成算法的背景多年来,寻找大规模的、复杂的优化问题的最优解一直是决策优化领域重要的研究方向之一。列生成算法通常被应用于求解大规模整数规划问题的分支定价算法(branch-and-price algorithm)中,其理论基础是由Danzig等于1960年提出。当求解一个最小化问题时,列生成算法主要的作用是为每个搜索树节点找到一个较优的下界(lower bound)。本质上而言,列生成算..转载 2021-05-12 09:44:06 · 10917 阅读 · 2 评论 -
禁忌搜索(Tabu Search(TS))
转载自:https://mp.weixin.qq.com/s/uHA6Ci2FZRNn0iAaZlenRw概念转载 2021-05-11 21:34:48 · 1719 阅读 · 0 评论 -
动态规划算法解Travelling Salesman Problem(TSP)问题
转载自:https://mp.weixin.qq.com/s/gLO9UffCMEqqMVxkOfohFATravelling Salesman Problem (TSP)是最基本的路线问题。它寻求的是旅行者由起点出发,通过所有给定的需求点后,再次返回起点所花费的最小路径成本动态规划算法(Dynamic Programming,简称DP)通常用于求解具有某种最优性质的问题,其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后由这些子问题的解再得到原问题的解。假设现在有四个...转载 2021-05-11 21:01:29 · 1172 阅读 · 0 评论 -
分配(指派)问题
什么是分配问题:分配问题也称指派问题,是一种特殊的整数规划问题,分配问题的要求一般是这样的:n个人分配n项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。简单的说:就是n*n矩阵中,选取n个元素,每行每列各有一个元素,使得和最小。匈牙利算法1、理论基础:若从指派问题的系数矩阵的某行(列)各元素中分别减去或者加上常数k,其最优任务分解问题不变。2. 匈牙利算法的流程图3.计算步骤例.转载 2021-05-10 23:32:45 · 10069 阅读 · 0 评论 -
递归
所谓递归(recursion):就是子程序(或函数)直接调用自己或间接调用自己的一种基本方法。运用递归通常可以把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,从而减少程序的代码量。递归调用的形式:-直接调用:即在函数中调用函数本身。举个栗子,下面一段代码用于求斐波那契数列的第N项:-间接调用:指A函数执行中调用了B函数,而B函数又调用了A函数。 当然,这是一个死递归,没有出头之日的。递归的工作原理:-先谈谈递归函...转载 2021-05-10 23:03:21 · 1645 阅读 · 0 评论 -
单纯形法
转载自:https://mp.weixin.qq.com/s/7xv9runzEGblvDi40ismBQ线性规划(Linear programming, 简称LP)是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它辅助人们进行科学管理、寻找线性约束条件下线性目标函数的极值。它广泛应用于军事作战、经济分析、经营管理和工程技术等领域,为合理地利用有限的人力、物力、财力等资源做出最优决策,提供科学依据。标准式VS矩阵式标准式线性规划问题必须有一个标准形式,主要包括以下三个.转载 2021-04-10 14:53:57 · 5377 阅读 · 0 评论 -
最短路问题
转载自:https://mp.weixin.qq.com/s/4G77pVgfHuPHjGDmfc27ZA1.什么是最短路问题最短路问题(shortest-path problem)是图论中的经典问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题。 基本内容是:假设网络中的每条边都有一个权重(常用长度、成本、时间等表示),最短路问题的目标是找出给定两点(通常是源节点和汇节点)之间总权重之和最小的路径。 如上图所示,以1为起点,7为终点,则...转载 2021-04-09 22:10:55 · 3362 阅读 · 0 评论 -
蚁群算法
转载自:https://mp.weixin.qq.com/s/L84GlWXKbejP2aSvzMoUCA蚁群算法蚁群系统(Ant System(AS)或Ant Colony System(ACS))是由意大利学者Dorigo、Maniezzo等人于20世纪90年代首先提出来的。他们在研究蚂蚁觅食的过程中,发现蚁群整体会体现一些智能的行为,例如蚁群可以在不同的环境下,寻找最短到达食物源的路径。后经进一步研究发现,这是因为蚂蚁会在其经过的路径上释放一种可以称之为“信息素(pheromone).转载 2021-04-09 19:05:52 · 839 阅读 · 0 评论 -
模拟退火(SA, Simulated Annealing)算法
转载自:数据魔术师公众号旅行商问题(TSP)TSP问题(Traveling Salesman Problem,旅行商问题)问题描述如下:有若干个城市,任何两个城市之间的距离确定,现要求一旅行商从某城市出发必须经过每一个城市且只在一个城市逗留一次,最后回到出发的城市,问如何事先确定一条最短线路以保证其旅行的费用最少?模拟退火算法是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。它是基于Monte-Carlo迭代求解策略的一种随机寻优算法。模拟退火算法是解决TS..转载 2021-04-07 20:20:26 · 2983 阅读 · 0 评论