自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 Python实现不同时区的时间转换

因为工作涉及一些国际化的业务,所以写代码时常常涉及一些时区转换。汇总了常用的代码,整理到一篇文章里。

2024-06-28 10:54:03 329

原创 优化基础(四):如何找到极值点?

在上一篇文章中我们提到,边界点里有一种特殊的点叫极值点,它们拥有一些很好的性质:局部最大/小值或全局最大/小值,将会在这些极值点中诞生。回忆一下单纯形法(想不起来的小伙伴可以参考我的文章),它的几何意义就是在极值点之间跳跃寻找最优解。那么如何找到这些极值点呢?本文通过一个例子来探讨一下。

2024-06-06 09:46:18 1124 2

原创 优化基础(三):内部点、边界点、极值点、外部点

从边界点来看,凸集的边界点一定也可以找到超平面(supporting hyperplane)把它撑(分离开)到某一边去。非凸的在某些点找不到一个平面可以把它撑起来(分离)。一个开集(一个不包含边界的子集),而任何足够小的邻域(即这个点周围的任意小的区域)都包含集合内的点和集合外的点。更数学的表述方式是,极值点不能表示为集合中其他点的凸组合。如下图所示,A点是极值点,B点是普通的边界点。能够使得我们画的这个球里的所有点,都仍然属于。B点位于它旁边两个点的连线上,但A点不是。的内部点,当且仅当存在一个。

2024-06-03 09:58:01 578

原创 优化基础(二):线性组合、仿射组合、锥组合、凸组合、线性集合、仿射集合、锥集合、凸集合的理解

组合侧重于描述由一些基点生成新的点,强调的是不同点的权重和几何位置。集合侧重于描述许多个点形成的形状,强调的是完整性和连通性。

2024-05-31 19:40:38 1519

原创 优化基础(一):hyperplane, half space, normal vector, polyhedron set, polyhedron, polytype的含义

在看一些进阶的运筹知识时,会有一些专业术语涌上来。以前我的心态是,这种能绕开就绕开,看着头大,大多数博客和书籍一堆公式直接把我这个小弱鸡劝退了,这次在B站学习方述诚老师的《introduction to linear programming》课程时,终于把一些术语听懂了。歪个题,方老师的课讲的真的很棒,建议运筹的小伙伴们都能系统的去刷一遍。

2024-05-30 15:06:14 1080

原创 线性化技巧:绝对值变量的线性化

运筹建模中绝对值变量的线性化技巧。

2024-05-27 20:54:02 823

原创 梯度下降法

无约束优化问题常用的求解算法有梯度下降法(基于迭代)、最小二乘法(基于解析解)、牛顿法&拟牛顿法(基于迭代)。今天先介绍最常用的梯度下降法。

2024-04-25 20:44:15 952

原创 运筹学基础(七):拉格朗日松弛(Lagrangian relaxation)

如果问题具有linked constraints,那么拉格朗日松弛后可以使问题能够被分解,进而可以降低问题的复杂度;拉格朗日松弛后得到的问题的下界要大于等于直接将01整数变量松弛为[0,1]连续变量的下界;采用拉格朗日松弛后我们会得到拉格朗日乘子,它反应了对偶的信息,可以做很多事情。假设约束(1.1)是难处理的约束,约束(1.3)是容易处理的约束。该问题等同于:怎么求解拉格朗日松弛问题的对偶问题,常用的方法是。即松弛问题是原问题的一个下界,对偶问题是原问题最大的下界。其本质是在松弛问题的基础上,

2024-04-19 16:28:30 1955

原创 平衡括号串:操作数和右括号需求数的维护过程

如果知识判断合法括号,以及一个左括号对应一个右括号的最少插入次数,都是比较简单的。。

2024-04-11 17:46:13 367

原创 反转链表:递归解法

先直接上代码:怎么理解呢?我们一行一行的来看!首先是badcase部分,当链表为空,或者只有一个节点的时候,直接返回就可以了,也没什么好反转了!最后三行就很神奇的,初次刷题是懵的状态,看了东哥的解释才回过神来。对于递归的问题,最关键的是明确递归函数的定义。在上面的函数中,reverseList表示给定一个链表,对其进行反转,并输出反转后的链表的头节点。然后来看last是个什么东西:现在离我们想要的结果还缺把2指向1,于是我们写了:以及把head指向空:延续上面的思路,明确递归函数的定义。在这个问

2024-04-11 16:06:26 396

原创 304. 前缀和技巧中的边界值处理

题目如下,其实并不难,属于小而美的前缀和技巧中的体型。因为我之前做过这道题,所以重刷也马上就能写。但是对比我写的和之前看别人写的,明显我的代码不够简洁,一个核心的差异在于对DP数组的定义上。只要改一下DP数组的定义即可:存储以(0,0)为起点,到(i-1, j-1)的数组之和。先看下我的代码,我对DP数组的定义是:存储以(0,0)为起点,到(i, j)的数组之和。将DP数组计算的过程放在__init__下面,总是只计算一次,然后重复调用其结果即可/修改以后的代码如下,明显简洁很多!

2024-04-09 09:46:19 164

原创 运筹学基础(六):列生成算法(Column generation)

学习列生成之前,有一些前置基础需要理解,不然就没法继续往下学了。所以为了写这篇文章,我提前铺垫了3篇文章帮助自己把基础捡起来!运筹学基础(一)求解线性规划的单纯形法详解运筹学基础(四):单纯形法中检验数(reduced cost)的理解运筹学基础(五):对偶问题及其性质今天终于可以进入正题了!

2024-04-08 13:08:28 1397

原创 运筹学基础(五):对偶问题及其性质

注意:例题1里面的原问题是maxmaxmax,对偶问题是minminmin,例题2反过来了。对偶问题max约束的符号,与原问题变量的符号相反(=和无约束互反);对偶问题max变量的符号,与原问题约束的符号相同。maxz′5y14y26y3y12y2≥2y1y3≤3−3y12y2y3≤−5y1−y2y31y1≥0y2≤0y3无约束。

2024-04-07 16:47:36 2172

原创 运筹学基础(四):单纯形法中检验数(reduced cost)的理解

在前文运筹学基础(一)求解线性规划的单纯形法详解中,我们直观的理解了单纯形法其实是在可行域的顶点上搜索的过程。(这篇文章没有通过列单纯形表来讲述,而是选择了一种更符合直觉的方式,我觉得这对于初学者而言是更好理解的。单纯形表感觉还是有点绕…)提到单纯形法,就不得不提一下检验数了,前文一带而过了,这篇文章单独拎出来聊一下。因为未来的学习中,很多更高阶的内容还会涉及到检验数的概念。

2024-04-07 14:46:04 3081

原创 运筹学经典问题(八):CVRP和VRP-TW

给定一个图,图上的点代表客户,边代表客户之间的路线,边的权重代表客户之间的距离,点上的数字代表每个用户的需求量。如果只是上面的模型,可能会出现下图这种解,: 假设我们的问题是车辆去客户那里取货,需要一个约束去消除这种不包含仓库的子环。这也是VRP建模的一个略难的约束。会有图上的哪些边被选中,形成。没有约束车辆的容量限制!

2024-04-01 15:40:29 1323

原创 运筹学基础(三):求解整数规划的切平面法(cutting plane method)

先将整数规划问题松弛为线性规划问题,然后割掉线性规划问题可行域的一部分(),使得线性规划问题的最优解在原整数规划问题的。(如果有小伙伴和我一样一时间没有想起来什么是。因此,割平面法的核心问题在于。(切割方程不是唯一的)。

2024-03-30 17:30:40 766

原创 运筹学基础(二):求解整数规划的分支定界法(branch and bound)

先将整数规划问题松弛成线性规划问题,并求出最优解;

2024-03-30 16:14:26 1659

原创 LCR 155:将二叉搜索树转化为排序的双向链表

将一个 二叉搜索树转化为一个 已排序的双向循环链表;节点的左指针指向前驱(上一个比自己小的节点),右指针指向后驱(下一个比自己大的节点)。最后要求返回链表中最小元素的指针。

2024-03-28 09:57:55 326

原创 运筹学基础(一)求解线性规划的单纯形法详解

大学的《运筹学》课程中,手算单纯形法是期末的必考题了!(记得期末考试前一周,几个经常逃课的同学来我宿舍楼下,叫了辆车载我去星巴克给他们讲解这个算法,活活讲了一个多小时他们才听懂,不知道最后及格了没哈哈!)当时已经觉得是信手拈来了,但是时间久了+计算过程本身也比较繁琐,慢慢就忘了。后面为了应付面试,又拾起过,但是面完试细节又给忘了,只记得是在可行域的顶点上来回搜索。这次想完整的梳理一篇文章(本文是跟着某位大佬的博客。

2024-03-28 09:18:22 3425 1

原创 动态规划:编辑距离和最长公共子序列解法对比

以下两种定义方式都行,看个人习惯。我个人更喜欢右边的方式!因为python中数组的切片word[i:j]是左闭右开区间,用dp(i, j)表示从word1[i:]转化为word2[j:]的定义更简洁。

2024-03-24 13:54:25 389

原创 二叉树的子结构

二叉树的前序遍历 + 递归遍历树A的每一个节点,判断是否与树B部分重合。头节点相等。

2024-03-20 15:06:48 164

原创 二叉树的最近公共祖先

这道题去年刷过,但是今年来做又没写对,写篇文章从头到尾梳理下思路,强化下记忆。(愿佛祖保佑信女,面试遇到此题时可以信手拈来。。。。

2024-03-19 15:51:13 215

原创 启发式算法分类

简单启发式算法、元启发式算法、超启发式算法

2024-03-19 11:29:28 414

原创 股票买卖问题:状态定义的误解与思考

iii:第iii天;kkk:交易的最大次数(这里有很多歧义,理解部分重点解释);sss:持有状态,0代表不持有,1代表持有。举个例子,dp[3][1][0]代表在第三天,我至今最多进行了1次交易,现在没有持有的最大利润是多少。

2024-03-17 11:34:08 805 1

原创 算法时空复杂度分析:大O表示法

算法题写完以后,面试官经常会追问一下你这个算法的时空复杂度是多少?(好像作为一名算法工程师,我日常码代码的过程中,并没有太注意这个,惭愧~但是找做后端开发的男票求证了一下,他们日常工作确实会去考虑这种问题)那么无论是为了应付面试,还是为了未来码代码可以精益求精,都还是认真的学一下时空复杂度分析方法吧!对于为什么需要时空复杂度分析,而不是直接跑一下代码看看,看到王争大佬在《数据结构与算法之美》(墙推)里给的两个原因是:测试结果依赖测试环境:机器的配置会十分影响你跑出的结果;

2024-03-13 14:59:52 1172 2

原创 动态规划:4种遍历方向图解+Python实现

动态规划类题型在遍历过程中,根据状态转移函数的不同,代码实现时遍历的方向也会有所差异。

2024-03-12 19:30:00 395

原创 新坑出炉:同一个函数不要传入两个一模一样的引用类型参数

1. 可变对象:对一个变量进行操作时,其值是可变的,但是对值的修改并不会引起新的对象,即地址是不会变的,只是地址中的内容发生了变化或者地址得到了扩充!2. 不可变对象:可以理解为一个萝卜一个坑,地址中的值是不会变的,要变就变地址!怎么记呢?可变对象和不可变对象所说的「可变」「不可变」都是针对值而言的。值可变,说明地址不变,则是引用类型!同理,不可变对象说明值不能动,那就是值类型了。

2024-03-06 14:41:40 374

原创 Python里的全局变量、局部变量、类的self.*

全局变量没有在任何函数内部定义,并且具有全局范围的变量;局部变量的定义:在函数内部定义的变量,范围仅限于该函数;是在一个函数内部声明一个全局变量,以便在函数内部对全局变量进行修改,这个全局变量本身已经定义过了,而不是我想当然认为的定义了一个全新的全局变量!‼️如果没有将其声明为全局变量,则在函数内部更改或创建的任何变量都是局部变量。当全局变量和局部变量的命名一样时,在一个函数内部还是会使用自己内部的局部变量;

2024-03-04 19:51:59 906

原创 迭代思路 VS 递归思路

【代码】迭代思路 VS 递归思路。

2024-02-27 16:47:12 432

原创 Nsum问题

【代码】Nsum问题。

2023-12-23 20:47:40 409

原创 运筹学经典问题(七):旅行商问题(TSP)

给定一系列城市和每对城市之间的距离,求解访问每座城市一次并回到起始城市的最短回路。

2023-12-14 14:16:05 1464

原创 运筹学经典问题(六):设施选址问题

以物流业的航空站点选址为例,如果航空站点开通的很多,客户的服务质量会变好(更多的航空件可以保障更好的时效),但是显然企业的成本会上升。反之,如果开通的航空站点太少,虽然企业成本下降了,但客户服务质量会变差。因此,该问题本质上是在做。

2023-12-14 11:17:31 1163

原创 运筹学经典问题(五):多商品流运输问题

前面介绍了(MCNF)问题,今天要介绍的多商品流运输问题(Mulit-commodity Transportation Problem, MCTP)与MCNF的唯一差异别:MCTP要求商品直接从供应商运送到客户,没有中间流转的路径。

2023-12-14 10:36:27 686

原创 运筹学经典问题(四):多商品网络流问题

多商品网络流问题(Multicommodity Network Flow, MCNF)是指在一个图网络中,多个商品从各自起点运输到各自终点的问题。更具体的,给定一个图网络GVAK:表示商品的集合;sk​tk​dk​:表示商品k的起点、终点和需求量;uij​:弧段ij∈A的容量;cijk​:商品k在弧段ij∈A上流动的单位成本。MCNF问题的目标就是在图网络中,找到一条使得总运输成本最低,且能满足各个商品需求量的路径。

2023-12-13 10:11:31 1430

原创 运筹学经典问题(三):最大流问题

给定一个图网络GVE,网络中连边的权重代表,在这个图中找出从起点到终点流量最大的路径。

2023-12-12 10:04:26 750

原创 运筹学经典问题(二):最短路问题

给定一个图(有向图或无向图)GVEV是图中点的集合,E是图中边的集合,图中每条边ij∈E都对应一个权重cij​(距离或者运输成本等),给定一个起点u和一个终点z,最段路问题就是寻找一条从s出发,到达z的距离最短或者成本最低的路径。

2023-12-12 09:22:18 1598

原创 运筹学经典问题(一):指派问题

有N个任务,需要N个人去完成,每个人只能完成一项工作。每个人完成不同工作的效率不同(或者资源、收益等等),需要怎么分配使得整体的效率最高(成本最低等等)呢?这就是经典的指派问题啦!

2023-12-11 09:49:28 1219

原创 如何选择合适的运筹优化求解器?

求解器对于运筹算法工程师而言,常常像一个黑盒,我们扔进去输入数据和数学模型,求解器给我们吐出一个解出来。这种状态在面临规模小、形式简单的数学模型是还可以应付的,但一旦问题难度上来,原本用着舒服的求解器可能求解你的问题太慢了,又或者根本无法给到符合预期的解,这时就会面临到底选择哪个求解器更合适的问题?这里的合适代表既准又快自己的问题类型是什么?线性规划?整数规划?二次规划?这里可以参考我的文章运筹学算法分类快速判断;不同求解器适用的问题类型;开源还是商用?2和3都会在接下来的梳理中体现。

2023-12-08 17:19:11 1388

原创 Pyomo调用IPOPT:0-1变量给出小数解

这几天搭建了一个纯整数规划模型,因为规模太大,测试时发现用Pyomo调用SCIP求解太慢了。于是“机灵”的换成了IPOPT求解,惊喜的发现速度快了很多,以为问题解决了,但是高兴的太早了…在测试某个case时,模型求出了一个我百思不得其解的方案,排查了半天发现是我定义的binary variable,模型竟然算出了一个小数解!而且非常巧妙的满足了我给的约束条件…一开始就是向GPT发问,说是我initialize=0不对,一本正经的胡说八道… 然后谷歌到有人遇到和我一样的问题:PYOMO:Binary vari

2023-12-08 10:31:15 315

原创 Python搭建运筹模型的代码框架

刚踏入职场用python写运筹模型时,基本是一个个函数堆砌,中间会出现非常多的重复数据操作,只能怪自己当初代码能力和结构思维都太弱(捶胸口)。好在身边还是有能行的同事的,某一天看了工程出身的算法同事的模型代码,有一种“相见恨晚”的感觉,后面我基本都是参照他这个框架,在搭建运筹模型啦!

2023-11-29 10:00:12 191

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除