文章目录

  • 1 运筹学知识
    • 2 线性规划
      • 2.1 大M法
      • 2.2 对偶问题
    • 3 整数规划
      • 3.1 分支定界
      • 3.2 0-1整数规划
      • 3.2 指派问题
    • 动态规划
  • 2、求解器
    • SCIP
    • CPLEX
    • GUROBI
  • 3、笔试题
    • 题目1
      • 问题描述
      • 解题思路
      • 解法1
      • 解法2
    • 题目2
      • 问题描述
      • 解题思路
      • 解法1
    • 题目3
      • 问题描述
      • 解题思路
      • 解法1
    • 题目4
      • 问题描述
      • 解题思路
      • 解法1
  • 4、建模能力
  • 5、其它

慢慢填坑

1 运筹学知识

P问题,NP问题,NPC问题,NP-hard问题等相关概念:

  • P问题(polynomial):求解一个问题的时间复杂度是多项式级别;
  • NP问题(nondeterministic polynomial):可以在多项式时间里验证解是否正确的问题。定义NP问题的意义在于,如果一个问题不能在多项式时间验证,则这个问题一定没有多项式时间的算法。
    图中某条路是否是Hamilton回路,可以在多项式时间验证,是NP问题图中
    是否不存在Hamilton回路,不可以在多项式时间验证。
  • NPC问题(nondeterministic polynomial complete):
    定义:
    一个问题1)它是NP问题;2)所有的问题都可以约化到它,这样的问题称为NPC问题。
    证明:
    1)先证明它是NP问题;
    2)再证明其中一个已知的NPC问题能约化到它(由约化的传递性,如果A能约化到B,则B的时间复杂度不低于A)。
    特点:NPC问题目前没有多项式的有效解法,只能有指数级或阶乘级复杂度的算法搜索
  • NP-hard问题(nondeterministic polynomial - hard):满足NPC问题的第2条但是不一定满足第1条。即使NPC问题获得了多项式级别的求解算法,NP-hard问题可能仍然找不到多项式级的算法。

2 线性规划

2.1 大M法

  • 定义
    在线性规划问题的约束条件中加人工变量构造初始可行基,要求在目标函数中相应地添加认为的M或-M为系数的项。在极大化问题中,对人工变量赋于-M作为其系数;在极小化问题中,对人工变量赋于M作为其系数,M为一任意大(而非无穷大)的正数。把M看作一个代数符号参与运算,用单纯形法求解,故称此方法为大M法。
  • 求解步骤
    应用单纯形法在改进目标函数的过程中,如果原问题存在最优解,必然使人工变量逐步变为非基变量,或使其值为零。否则,目标函数值将不可能达到最小或最大。在迭代过程中,若全部人工变量变成非基变量,则可把人工变量所在的列从单纯形表中删去,此时便找到原问题的一个初始基可行解。若此基可行解不是原问题的最优解,则继续迭代,直至所有的检验数都小于等于0,求得最优解为止。

2.2 对偶问题

3 整数规划

整数规划求解方法:

3.1 分支定界

分支定界是求解整数规划的主要方法,整数规划问题对应线性规划问题,以单形法解得最佳解后,将非整数值之决策变量分割成为最接近的两个整数,分列条件,加入原问题中,形成两个子问题(或分枝)分别求解,如此便可求得目标函数值的上限(上界)或下限(下界),从其中寻得最佳解。

3.2 0-1整数规划

采用隐枚举法:
0-1规划是一种特殊的纯整数规划。求解0-1规划的隐枚举法不需要用单纯形方法求解线性规划问题。它的基本思路时从所有变量等于零出发,依次指定一些变量为1,直至得到一个可行解,并将它作为最好的可行解。此后,依次检查变量等于0或1的某些组合,以便使最好的可行解不断加以改进,最终获得最优解。隐枚举法不同于穷举法,它不需要将所有可行的变量一一列举。它通过分析、判断派出了许多变量组合作为最优解的可能性。

3.2 指派问题

匈牙利法求解:
(1)若从效率矩阵(cij)的行(或列)的各元素中分别减去该行(或列)的最小元素后得到一个新矩阵(bij),则以(bij)为效率矩阵的指派问题与原问题有相同的最优解。
经过上述变换后,(bij)中的每行和每列都至少含有一个0元素,称位于不同行不同列的0元素为独立的0元素。
(2)若(bij)有n个独立的0元素,由此可得一个解矩阵,方法为在X中令对应于(bij)的0元素位置的元素为1,其它位置的元素为0,则X为指派问题的最优解。
(3)矩阵中独立0元素的最多个数等于能覆盖所有0元素的最少直线数。

动态规划

动态规划解背包问题:

  • 一维背包问题
  • 二维背包问题

2、求解器

SCIP

CPLEX

GUROBI

3、笔试题

题目1

问题描述

沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱

32 34 7 33 21 2
13 12 3 11 26 36
16 30 22 1 24 14
20 23 25 5 19 29
27 15 9 17 31 4
6 18 8 10 35 28

沐哲可以从仓库的某个货架开始拣货,下一步可以往上走,也可以往下走,当然,向左向右也可以,但必须使得下一个货物重量减小,才会去拣。在上面的仓库中,一条可拣货的路径为 25-22-3。当然30-23-20-16-13-12-3可以拣的货更多。这也是赚钱最多的一条路径。

示例:

输入行数、列数和数据矩阵,输出所赚的最大钱数。
例子:
输入:
6 6
32 34 7 33 21 2
13 12 3 11 26 36
16 30 22 1 24 14
20 23 25 5 19 29
27 15 9 17 31 4
6 18 8 10 35 28
输出:
7

解题思路

此题应该属于树搜索的题目,拿到题目后一直在想怎么用动态规划。结果测试时间都过了,还是没做出来,真是搓的一笔。
最暴力的解法就是对每个点遍历,以每个点为起点进行深度优先搜索,找它相邻点的可行路径。搜索后将最大结果保存到当前位置,等遍历完后,找到矩阵元素的最大值,然后输出该值。

解法1

# check the (i,j) is in the matrix index
def isInside(row,col,i,j):return (i in range(row)) and (j in range(col))# get the max step from the current point
def currentMaxStep(data,row,col,i,j):max_step=0directs = [(-1,0),(1,0),(0,-1),(0,1)]for (dx,dy) in directs:x,y = i+dx,j+dyif(isInside(row,col,x,y) and data[x][y] < data[i][j]):max_step = max([currentMaxStep(data,row,col,x,y),max_step])return max_step + 1# traverse the whole data and generate the max step map
def getMaxMap(data,row,col):Map = [[0 for j in range(col)] for i in range(row)]for i in range(row):for j in range(col):Map[i][j] = currentMaxStep(data,row,col,i,j)print('the max step map is:')    for i in range(row):print(Map[i])return Map# find the max from the max step map
def maxStep(data,row,col):Map = getMaxMap(data,row,col)return max([max(i) for i in Map])

测试结果:

if __name__=='__main__':row,col = 6,6data = [[32,  34,   7,  33,  21,   2],[13,  12,   3,  11,  26,  36],[16,  30,  22,  1,   24,  14],[20,  23,  25,  5,   19,  29],[27,  15,   9,  17,  31,   4],[ 6,  18,   8,  10,  35,  28]]print(maxStep(data,row,col))

输出结果:

the max step map is:
[4, 5, 2, 3, 2, 1]
[3, 2, 1, 2, 5, 6]
[4, 7, 2, 1, 4, 1]
[5, 6, 7, 2, 3, 4]
[6, 3, 2, 3, 4, 1]
[1, 4, 1, 2, 5, 2]
7

我们发现,每个点在进行深度优先搜索时,会遇到和其他点相同的路径,所以优化的空间。如果当前节点在之前已经搜索过了,这时候就需要判断需不需要继续搜索。两种情况
1、当前计算最大步数值大于之前遍历到该点的最大步数值,说明当前路径要比之前的路径更优,需要更新。
2、反之,不在搜索当前路径。
举个例子: 如data的第一个元素的最大路径为:32-13-12-3,最大步数为4; 当对第二个元素遍历时,假设按照上下左右的顺序,向下34-12-3为一条路径,此时第二元素的最大步数为3,向左34-32-13-12-3是个可行路径,而32-13-12-3之前已经搜索过,可以利用之前的32的最大步数值,直接比较4+1 和 3,更新第二元素的最大步数为5.
注意: 要实现这一操作,需要在遍历的过程中使用一个map来存储已遍历节点的最大步数值。

解法2

# check the (i,j) is in the matrix index
def isInside(row,col,i,j):return (i in range(row)) and (j in range(col))# update the local-max-step map
def updateMap(data,Map,row,col,i,j):directs = [(-1,0),(1,0),(0,-1),(0,1)]for (dx,dy) in directs:x,y = i+dx,j+dyif(isInside(row,col,x,y) and data[x][y] > data[i][j] and Map[x][y] < Map[i][j]+1):Map[x][y] = Map[i][j]+1updateMap(data, Map,row,col,x,y)# find the max from the max step map
def maxStep(data,row,col):Map = [[1 for j in range(col)] for i in range(row)][updateMap(data,Map,row,col,i,j) for i in range(row) for j in range(col)]print('the max step map is:')[print(Map[i]) for i in range(row)]return max([max(i) for i in Map])

测试结果:

if __name__=='__main__':row,col = 6,6data = [[32,  34,   7,  33,  21,   2],[13,  12,   3,  11,  26,  36],[16,  30,  22,  1,   24,  14],[20,  23,  25,  5,   19,  29],[27,  15,   9,  17,  31,   4],[ 6,  18,   8,  10,  35,  28]]print(maxStep(data,row,col))

输出:

the max step map is:
[4, 5, 2, 3, 2, 1]
[3, 2, 1, 2, 5, 6]
[4, 7, 2, 1, 4, 1]
[5, 6, 7, 2, 3, 4]
[6, 3, 2, 3, 4, 1]
[1, 4, 1, 2, 5, 2]
7

使用一个map记录已经遍历的元素的最大步长数可以避免一些重复的遍历。
还能不能优化呢?是否每个元素都有必要遍历一遍?
重最优化的角度来讲,此题实质上是解决从极大值到极小值的最长路径的问题。即最长路径一定是从极大值到极小值的一条路径(从山顶走到山底)。那么我们可以先找出所有最小值或者最大值,然后使用深度优先搜索遍历这些点,这些路径中,最大的一条路径一定是整个图中最大的路径。这就衍生了第三个版本(从极小值往上搜,是个上山的过程)。

https://blog.csdn.net/u014606206/article/details/77596819

题目2

问题描述

解题思路

解法1

题目3

问题描述

解题思路

解法1

题目4

问题描述

解题思路

解法1

4、建模能力

  • TSP
  • VRP
  • 背包
  • 板材切割

5、其它

1.以下哪个模型的系数矩阵不是全幺模矩阵(totally unimodular matrix)?(d)
a.最短路问题
b.指派问题
c.最大流问题
d.最小生成树问题

2.互为对偶的两个线性规划问题的解存在关系(b)
a.原问题无可行解,对偶问题也无可行解
b.对偶问题有可行解,原问题可能无可行解
c.若最优解存在,则最优解相同
d.一个问题无可行解,则另一个问题具有无界解

引用资料:
1、https://www.cnblogs.com/liuxiang2020/p/11370768.html
2、https://blog.csdn.net/shawpan/article/details/76145200
3、

运筹优化算法工程师面试汇总相关推荐

  1. 差分进化算法_特邀嘉宾 | 科普差分进化算法(创新奇智运筹优化算法工程师朱小龙博士)...

    文案:段克邪 排版:随心390 hello,大家好.各位可点击此处,访问公众号官方店铺.谨防上当受骗,感谢各位支持! 今天我们有幸请到创新奇智运筹优化算法工程师朱小龙博士为大家科普差分进化算法,本次推 ...

  2. 如何成为一名合格的运筹优化算法工程师?

    作为算法工程师里的一小撮,相比机器学习.人工智能.视觉等算法工程师,运筹优化算法工程师在国内算是又小众又新鲜.作为近几年才慢慢进入大众视野的岗位,人们对其的认知和了解相对其他AI领域,还是较少的.比如 ...

  3. 杭州/北京内推 | 蚂蚁集团智能决策团队招聘运筹优化算法工程师/实习生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 蚂蚁集团 蚂蚁集团-CTO 线-智能决策团队,有来自国内外 top 互联网 ...

  4. 招募 | 大马鹿物流运筹优化算法工程师

    岗位描述 负责公司智能配送算法的开发.基于先进运筹优化理论结合实际场景和一线业务需求,联接信息系统,开发适合本公司的智能分单和路径规划算法. 负责智能配送算法的落地并不断迭代,保证实际应用的有效性与高 ...

  5. 阿里巴巴2018校园招聘运筹优化算法工程师编程题

    对于考试向来都是后知后觉,过后留下一堆不甘与遗憾--然而不行就是不行,再接再厉. 声明:涉及阿里校招笔试,如有侵权,请联系我删除. 一.带信号灯的最短路问题 1. 题目描述 现在城市有N个路口,每个路 ...

  6. 机器学习算法工程师面试知识点汇总

    机器学习算法工程师面试知识点汇总 机器学习 梯度下降 k-means 1 × 1卷积核 模型 SVM Bagging & Boosting 随机森林 激活函数 Sigmod tanh ReLU ...

  7. 华为算法工程师面试经历汇总

    一.概述 华为公司组织架构较为庞大,其总体组织架构图如下所示: 其中,较为知名的2012实验室,其下面包括的二级部门有:中央硬件工程学院.海思.研发能力中心.中央软件院.诺亚方舟实验室: 其中中央软件 ...

  8. 机器学习算法工程师面试集锦(更新中)

    机器学习算法工程师面试集锦(更新中) 面试问题汇总 常用的损失函数 介绍交叉验证 特征选择方法 机器学习项目的一般步骤 经验风险最小化与结构风险最小化 训练决策树时的参数是什么 在决策树的节点处分割标 ...

  9. 【深度学习笔记】神经网络模型及经典算法知识点问答巩固(算法工程师面试笔试)

    文章目录 前言 一.前馈神经网络模型 1.请说说你对前馈神经网络中"前馈"二字的理解. 2.记忆和知识是存储在_____上的.我们通常是通过逐渐改变_____来学习新知识. 3.在 ...

  10. 算法工程师面试问题及相关资料集锦(附链接)

    来源:专知 本文约9800字,建议阅读20分钟. 本文为你介绍算法工程师面试问题及相关资料集锦,相当全面,值得收藏. 目录 算法工程师 Github.牛客网.知乎.个人博客.微信公众号.其他 机器学习 ...

最新文章

  1. 《VMware Virtual SAN权威指南》一2.2 VSAN的要求
  2. C++随笔(2007-07-09)
  3. java 关键字final static
  4. readline 库简写版本,测试可用
  5. gcc编译c文件_Linux下C语言程序的编译过程
  6. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】
  7. [Gamma阶段]展示博客
  8. 云网一体,“湘遇湘融 | 移动云TeaTalk·长沙站 启动倒计时
  9. native vlan(本征vlan)----vlan 1 与一般vlan的区别详细解答、tag字段简介、二层异vlan通信、双vlan tag跳跃攻击(附图,建议电脑观看)
  10. 游戏窗口组合键消息失败_5失败的投资组合,以后我在这里
  11. 太卷了,这篇 CPU Cache,估计没人看
  12. js检测微信浏览器_JavaScript判断是否是微信浏览器
  13. 计算机设计大赛(微课教学辅助类)国赛总结(国赛二等奖)
  14. 开发小程序需要多少钱
  15. Tampermonkey脚本
  16. VUE不兼容显卡问题
  17. 数据结构 第三节 第八课
  18. adprw指令教程_三菱介绍FX3U新增指令ADPRW
  19. 预告 · 5月26日IGS大会腾讯云游戏新文娱分论坛遇见TcaplusDB
  20. Vue 图片上传功能

热门文章

  1. 微信小程序的bindtap和catchtap实际场景 对话框中按钮点击和对话框背景点击处理笔记...
  2. 工程数学(线性代数)笔记
  3. 机器学习(周志华) 第五章神经网络
  4. 1x pcie 速度_usb 3.0 速度 pciex1 pci 速度 各总线的速度
  5. 拟合数据和原始数据误差计算
  6. 无人驾驶技术——雷达Clutter, CFAR,AoA
  7. 什么是网站前端框架?目前常用的网站前端框架都有哪些?
  8. 高等数学张宇18讲 第十一讲 二重积分
  9. vscode 使用pem文件免密连接服务器
  10. word转化为html操作步骤