![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
优化算法
文章平均质量分 93
胡拉哥
生活研究生(ID:LifeAlpha)
展开
-
线性规划:内点法
介绍求解线性规划的内点法(含代码)。原创 2021-10-15 18:05:34 · 4557 阅读 · 3 评论 -
整数规划:割平面法
入门教程(含代码)原创 2021-09-17 22:38:10 · 5914 阅读 · 0 评论 -
整数规划:分支定界法
入门教程(含代码)原创 2021-09-03 22:20:08 · 7428 阅读 · 7 评论 -
对偶单纯形算法
对偶单纯形算法教程(附代码)原创 2021-08-18 11:09:04 · 3601 阅读 · 0 评论 -
线性规划:单纯形算法之初始化
单纯形算法第三讲(含完整代码)原创 2021-08-03 11:40:17 · 561 阅读 · 0 评论 -
线性规划:单纯形算法之处理退化
单纯形算法第二讲(附完整代码)原创 2021-08-02 15:13:33 · 5382 阅读 · 1 评论 -
线性规划的标准形
介绍线性规划的标准形式。原创 2021-08-01 20:40:34 · 5975 阅读 · 0 评论 -
线性规划:单纯形算法
单纯形算法第一讲(附完整代码)。原创 2021-07-04 11:33:17 · 865 阅读 · 9 评论 -
算法设计技巧: Primal-Dual
原始对偶(Primal-Dual)是一种求解优化问题的思想, 在凸优化和组合优化问题中有重要应用. 本文以线性规划问题为例解释原始对偶算法的设计思路, 进而介绍如何设计基于原始对偶的近似算法(一般用于求解NP-hard问题).互补松弛条件考虑线性规划的原始问题(P)和对偶问题(D)如下:min cTxs.t. Ax≥bx≥0(P)\begin{aligned}\min\ & c^Tx \tag{P}\\\text{s.t. } & Ax \geq b\\&原创 2020-05-20 10:07:32 · 11332 阅读 · 4 评论 -
算法设计技巧: 局部搜索(Local Search)
局部搜索的基本步骤如下:构造初始解sss;定义sss的邻域δ(s)\delta(s)δ(s);在邻域δ(s)\delta(s)δ(s)中搜索新的解s′s's′;令s:=s′s:=s's:=s′, 重复上述步骤直到满足停止条件.在实际中局部搜索可以作为其它算法的补充, 目的是进一步提升解的质量. 下面我们以经典的旅行商问题(Traveling Salesman Problem)为例来介...原创 2020-04-25 08:56:09 · 8668 阅读 · 0 评论 -
算法设计技巧: Rounding
本文介绍一种近似算法的设计技巧: Rounding. 具体来说, 它有两种实现思路:Rounding solution. 以整数规划为例, 可以先求其线性规划松弛解, 然后对解进行四舍五入(同时保证可行性), 从而得到整数解.Rounding instance. 修改原问题实例然后求解, 同时保证解的可行性(对原问题而言). 修改实例的目的是使得问题更容易求解.背包问题考虑nnn个商品...原创 2020-04-22 22:34:34 · 3380 阅读 · 4 评论 -
算法设计技巧: 深度优先搜索(DFS)
前文介绍了广度优先搜索(Breadth-First-Search)的方法遍历一个图G=(V,E)G=(V,E)G=(V,E). 本文介绍另一种常用的方法: 深度优先搜索(Depth-First-Search). DFS与BFS相比, 它的主要特点是遍历顶点的顺序满足一定的规律, 利用这些规律可以对顶点和边进行分类, 从而应用与其它问题的求解(参考下文).深度优先搜索通过深度优先搜索, 我们可以...原创 2020-04-19 19:22:05 · 1034 阅读 · 1 评论 -
算法设计技巧: 广度优先搜索(BFS)
给定一个图G=(V,E)G=(V,E)G=(V,E), 其中VVV代表顶点的集合, EEE代表边的集合. 给定初始点s∈Vs\in Vs∈V, 遍历图GGG所有顶点一般有两种方法: 广度优先(Breadth-first-search)和深度优先(Depth-first-search). 本文介绍广度优先的思想和实现方式.广度优先如下图所示, 从sss开始, 由内向外逐层搜索, 顶点所在的 层数...原创 2020-04-15 21:29:09 · 459 阅读 · 0 评论 -
算法设计技巧: 贪心算法(Greedy Algorithm)
贪心算法是一种启发式(Heuristic)算法, 它的基本思想是在每一步决策时选择局部最优的策略. 贪心算法一般在设计和实现上比较容易, 因此在求解实际问题中应用广泛.编码问题考虑如下的编码问题: 给定字符的集合CCC, 例如C={a,b,c,d,e}C=\{a, b, c, d, e\}C={a,b,c,d,e}. 每个字符α∈C\alpha\in Cα∈C的使用频次为fαf_{\alpha...原创 2020-04-15 21:26:22 · 1840 阅读 · 0 评论 -
算法设计技巧: 动态规划 (Dynamic Programming)
动态规划(Dynamic Programming)是一种求解优化问题的技巧. 考虑这样一类优化问题: 原问题的最优解的结构包含了其子问题的最优解. 例如斐波那契(Fibonacci)数列, 已知F(n−1)F(n-1)F(n−1)和F(n−2)F(n-2)F(n−2)的值, 我们可以在O(1)O(1)O(1)内计算F(n)=F(n−1)+F(n−2)F(n) = F(n-1) + F(n-2)F(...原创 2020-04-04 14:20:39 · 330 阅读 · 0 评论 -
算法设计技巧: 分治法 (Divide & Conquer)
分治法是一种非常通用的算法设计技巧. 在很多实际问题中, 相比直接求解, 分治法往往能显著降低算法的计算复杂度. 常见的可以用分治法求解的问题有: 排序, 矩阵乘法, 整数乘法, 离散傅里叶变换等. 分治法的一般思路如下:[Divide] 把原问题拆分成同类型的子问题.[Conquer] 用递归的方式求解子问题.[Combine] 根据子问题的解构造原问题的解.分治法最关键的步骤是如何...原创 2020-03-29 16:26:08 · 715 阅读 · 2 评论 -
线性规划技巧: Dantzig&Wolfe Decompostion
介绍DW分解(含完整代码)原创 2020-03-24 21:03:13 · 4561 阅读 · 3 评论 -
线性规划技巧: Benders Decomposition
Benders分解由Jacques F. Benders在1962年提出1. 它是一种把线性规划问题分解为小规模子问题的技巧. 通过迭代求解主问题和子问题, 从而逼近原问题的最优解. 与列生成(Column Generation)相比, Benders分解是一种行生成(Row Generation)技巧: 主问题的约束来自子问题的解. 本文介绍的内容基于 Georrion和Graves2.问题描...原创 2020-03-19 22:41:18 · 12013 阅读 · 25 评论 -
线性规划技巧: 如何写对偶问题
给定线性规划的原始问题, 本文介绍写如何方便地写出其对偶问题.基本公式我们先给出互为对偶问题的两种基本形式, 作为后续写对偶问题的基础.1. 原问题的约束是不等式2. 原问题的约束是等式总结原问题的一个约束对应一个对偶变量.对偶变量乘以原问题约束的右端(bbb)得到对偶问题的目标.原问题目标的系数ccc对应对偶问题约束的右端.最小化对应最大化(反之亦然).如果原问题有等式...原创 2020-03-19 22:37:19 · 26835 阅读 · 17 评论 -
线性规划技巧: 列生成(Column Generation)
用一个例子介绍列生成算法(含完整代码)。原创 2020-03-19 22:34:16 · 7062 阅读 · 2 评论 -
用数学规划的方式求解优化问题
本文介绍如何用数学语言对实际中的优化问题进行建模. 通过建立数学模型, 我们利用现成的求解器可以便捷地计算出最优解(或可行解).运输问题考虑三个粮食储量分别是100, 200, 300的仓库 (单位:吨, 下文省略). 我们需要把粮食运送给4个客户, 其需求分别是: 120, 60, 270, 150.仓库到客户的单位运输成本用矩阵CCC描述:[350200300250220330300...原创 2020-03-19 22:12:14 · 1141 阅读 · 5 评论