大数据机器学习算法与计算机视觉应用02:线性规划
Linear Programming
- Definition of linear programming
- max and min-cost max flow
- linear program to solve minimax optimal strategies in games
- Algoithms for linear programming
- l1 regression
- Seidel’s 2-dimensional linear programming algorithm
linear program 线性规划
线性规划包含以下几个特征:
- 包含 n n n个变量 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn
- 所有的限制条件都是变量的线性组合
- 目标函数也是这些变量的线性组合并且求最大值
- 没有乘积
所有的限制条件都满足是大于等于(小于等于)的话,这个线性规划称为是有边界的,否则就是没有边界的。
对于一些没有边界的线性规划,目标函数可能没有最大值。
max and min-cost max flow最大流
Modeling Network Flow
网络流模型是一种常见的算法模型,其主要包含以下几个组成部分:
- 变量:对于每条边 ( u , v ) (u,v) (u,v), f u v f_{uv} fuv表示这条边的流的大小
- 目标:最大化最终节点 T T T接收到的流
- 限制条件:
- 每条边上的流不能超过这条边的承载能力(每条边上的流存在最大值)
- 除了源点 S S S和最终节点 T T T之外,其他节点进入的流量总和等于输出的流量总和。
一个例子如下:

min-cost max flow 最小开销最大流
每条边 ( u , v ) (u,v) (u,v)都有一个最大负载 c ( u , v ) c(u,v) c(u,v)和成本 w ( u , v ) w(u,v) w(u,v),目标则是设法让每条边流量和单位成本的乘积总和最小,也就是
min ∑ ( u , v ) ∈ E w ( u , v ) f u v \min \sum\limits_{(u,v)\in E}^ {} w(u,v)f_{uv} min(u,v)∈E∑w(u,v)fuv
这个问题如何解决呢?
第一种方法:先求最大流 f f f,然后优化目标函数。
第二种方法:连接终点和源点 ( T , S ) (T,S) (T,S)并让这条边的单位成本为一个很大的负值,这样计算目标函数的同时就保证了最大流。
review: Zero Sum Game
之前的零和博弈和我们刚刚的最大流问题有点相似。他们都有如下的共同点:
变量:一堆变量说明:在零和博弈中是执行各种动作的概率,在最大流问题中是每条边的流量。
目标:都是变量的线性组合。在零和博弈中,是概率和对应收益乘积的总和(收益给定),在最大流问题中,是通往终点所有流量的总和。
约束条件:也是变量的线性组合。
Linear Program to solve minimax optimal strategies in games
线性规划的一般形式如下:
目标函数: c ⃗ T X ⃗ \vec{c}^T\vec{X} cTX
约束条件: A X ⃗ ≤ b A\vec{X} \leq b AX≤b
每个约束条件都将变量的向量空间的超平面分割成两个半平面,多个半平面的交集被称为可行域。
如果可行域是空集,说明该线性规划是不可行的。线性规划可以是没有边界的,但是一般都是可行的,否则目标函数无解。
一般来说,可行域都是一个凸集。这保证可行域一般只有唯一解。
Algorithms for Linear Programming
常见的线性规划算法包括:
- Simplex Algorithm 单纯形法:这种方法简单使用,但是在最坏情况下需要指数时间复杂度。
- Ellipsoid Algorithm 椭球算法:具有多项式的时间复杂度,但是实际运行较慢
- Karmarkar’s Algorithm(interior point) 卡马卡算法:同样多项式的时间复杂度,而且运行较快
这里不做详细算法解释,只做大致介绍。
Simplex Algorithm
单纯形法从可行域的一个顶点开始,依次和附近的点比较,如果发现新的最大值,就进行迁移。
Ellipsoid algorithm
椭球算法将目标函数替换为一个约束条件,并且使用二分查找方法。
Karmarkar’s algorithm
卡马卡方法又被称作内部点方法,它寻找最优解的方法并非从可行域边界的一个顶点出发,而是从可行域内部的一个点开始。
L1 Regression
线性回归是另外一种形式的线性规划,它的背景是求解向量方程 A x ⃗ = b ⃗ \mathbf{A}\vec{x} = \vec{b} Ax=b
在许多情况下,这个方程是没有精确解的,这个时候我们转而去计算最接近的解,也就是要求
min Σ i = 1 , … , n ∣ A x ⃗ − b ⃗ ∣ \min\Sigma_{i=1,\dots,n}|\mathbf{A}\vec{x}-\vec{b}| minΣi=1,…,n∣Ax−b∣对应的 x ⃗ \vec{x} x。
为什么这是一种线性规划?
我们可以将线性回归视作如下表述:对 A \mathbf{A} A的每一行 A i \mathbf{A_i} Ai,都有约束条件
A i x ⃗ − b i ≤ s i \mathbf{A_i}\vec{x}-b_i \leq s_i Aix−bi≤si
和
A i x ⃗ − b i ≥ − s i \mathbf{A_i}\vec{x}-b_i \geq -s_i Aix−bi≥−si
目标函数则是求
min Σ i = 1 , … , n s i \min \Sigma_{i=1,\dots,n}s_i minΣi=1,…,nsi
对于线性回归问题,我们一般使用的是最小二乘法,这里不再赘述了。
Seidel’s 2-dimensional linear programming algorithm
在解决一个二维线性规划问题时,以下的一个算法可以作为参考:
假设约束条件是 a i x ∗ ⃗ ≤ b i a_i\vec{x^*}\leq b_i aix∗≤bi
我们递归寻找 a 2 x ∗ ⃗ ≤ b 2 , … , a m x ∗ ⃗ ≤ b m a_2\vec{x^*}\leq b_2,\dots,a_m\vec{x^*}\leq b_m a2x∗≤b2,…,amx∗≤bm的对应最优解。
接下来,对应 a 1 a_1 a1有两种情况:
- 先前的最优解满足新的约束条件,那么先前的最优解就是整体最优解,时间复杂度很明显是 O ( 1 ) O(1) O(1);
- 新的约束条件给出了新的最优解。这个时候需要计算新的最优解,遍历新的约束条件和先前 m − 1 m-1 m−1个约束条件的交点依次计算是否最优,时间复杂度是 O ( m ) O(m) O(m)
那么这个算法总共的时间复杂度满足:
T ( m ) = T ( m − 1 ) + O ( m ) T(m) = T(m-1)+O(m) T(m)=T(m−1)+O(m)
可得该算法的最坏时间复杂度是 O ( m 2 ) O(m^2) O(m2)。
我们能不能优化以下,让这个算法的期望时间复杂度变为 O ( m ) O(m) O(m)呢?这就是Seidel算法。
(注意,这里的算法一般不指代高斯-赛德尔迭代法,后者一般用于运动学求数值解)。
Seidel’s Algorithm 非常简单,就是在随机排列上述的约束条件后进行相同的递归算法。那么,为什么随机排布一下之后,这个算法的期望时间复杂度就变成了 O ( m ) O(m) O(m)呢?原因就是,随机排布之后,第二种遍历的情况大大减少了。
我们知道最优解一定在两条约束条件 a i , a j a_i,a_j ai,aj的交点上,那么其中一个在最新的这一步出现的概率是多少呢?
很明显概率是:
2 × ( m − 1 ) ! ( m ) ! = 2 m 2 \times \frac{(m-1)!}{(m)!} = \frac{2}{m} 2×(m)!(m−1)!=m2
因此每步递归的期望时间复杂度为:
( 1 − 2 m ) O ( 1 ) + 2 m O ( m ) = O ( 1 ) (1-\frac{2}{m})O(1) + \frac{2}{m}O(m) = O(1) (1−m2)O(1)+m2O(m)=O(1)
总算法的期望时间复杂度为:
T ( m ) = T ( m − 1 ) + O ( 1 ) T ( m ) = O ( m ) T(m) = T(m-1) + O(1) T(m) = O(m) T(m)=T(m−1)+O(1)T(m)=O(m)
相关文章:
大数据机器学习算法与计算机视觉应用02:线性规划
Linear Programming Definition of linear programmingmax and min-cost max flowlinear program to solve minimax optimal strategies in gamesAlgoithms for linear programmingl1 regressionSeidel’s 2-dimensional linear programming algorithm linear program 线性规…...
godot——主题、Theme、StyleBox
我刚开始被这些术语吓到了,一直不敢去接触它们,都用的默认样式。现在好不容易有点思路了,记录下来。 下面看看怎么自定义样式。 1.先新建一个Theme 2.再次点击创建好的Theme 得到 图1 这样一个面板。(看不懂没事,继…...
深入理解接口测试:实用指南与最佳实践5.0(一)
✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…...
SQL面试题——飞猪SQL面试 重点用户
飞猪SQL面试题—重点用户 在一些场景中我们经常听到这样的一些描述,例如20%的用户贡献了80%的销售额,或者是20%的人拥有着80%的财富,你知道这样的数据是怎么算出来的吗 数据如下,uid 是用户的id ,amount是用户的消费金额 |uid|amount| ---…...
Angular 和 Vue2.0 对比
前言 :“业精于勤,荒于嬉;行成于思,毁于随” 很久没写博客了,大多记录少进一步探查。 Angular 和 Vue2.0 对比: 一.概念 1.1 Angular 框架: 是一款由谷歌开发的开源web前端框架(核…...
websocket服务器(协程风格)--swoole进阶篇
swoole的websocket服务器(协程风格)示例真不算友善,从头了解到尾,那还好,但是谁有那么多时间从头到尾了解。示例不够针对性,写websocket就该单独写websocket的东西,偏偏又加上http的东西。这里我来解读一下websocket服务器(协程风格)示例 <?php use Swoole\Http\…...
Windows C/C++ Socket 编程
承接上文:socket 编程 本文目录 Windows Client 端WSADATA 结构体WSAStartup() 函数SOCKET 以及 socket() 函数sockaddr_ininet_pton() 函数in_addr structmemcpy()connect() 函数send() 函数recv() 函数 Windows Server 端 在进行 socket 编程之前,你要…...
计算两个结构的乘法
在行列可自由变换的平面上,2点结构有3个 3点结构有6个 计算2*2 2a1*2a14a6 2a1*2a24a8 2a1*2a34a12 显然2a1*2a14a6因为这3个结构都分布在同一列上,就是整数乘法。2a1*2a2的结果有2种写法,一种外形像2a1细节为2a2,一种外形为2…...
学校服务器连接pycharm配置2
上一个可能还是有点问题,因为实际在跑的时候读取的其实是本地的anaconda,这个重新整了一下流程 首先在学校服务器先激活自己创建的虚拟环境,这里就不截图了 然后在pycharm里面打开设置 选择这个python解释器 这里有添加解释器 选择SSH …...
AI赋能电商:创新应用提升销售与用户体验
目录 一、引言 二、AI技术在电商领域的创新应用 三、AI技术提高电商销售效率和用户体验的实践路径 一、引言 随着人工智能(AI)技术的不断成熟,电商行业正迎来一场深刻的变革。AI技术在购物推荐、会员分类、商品定价等方面的创新应用&…...
详解kafka消息发送重试机制的案例
在 Kafka 生产者中实现消息发送的重试机制,可以通过配置 KafkaProducer 的相关属性来实现。以下是一些关键的配置项: retries:设置生产者发送失败后重试的次数。 retry.backoff.ms:设置生产者在重试前等待的时间。 buffer.memo…...
linux文本管理!!!
文章目录 第1章 文本过滤/查看命令1.echo:输出文本2.cat:合并文件或查看文件内容3.head:显示文件头部信息4.tail:显示文件尾部信息5.wc: 统计文本行号6.less:分页显示文件内容7.grep:文本过滤工具8.定向符号…...
软件设计师-计算机体系结构分类
计算机体系结构分类 Flynn分类法 根据不同的指令流数据流组织方式分类单指令流但数据流SISD,单处理器系统单指令多数据流SIMD,单指令流多数据流是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一…...
《基于深度学习的车辆行驶三维环境双目感知方法研究》
复原论文思路: 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话,求d的话,只和xl-xr有关系,这样一来,是不是只要两张图像上一个测试点的像素位置确定,对应的深…...
jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
1、引入jwt依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> 2、Jwt工具类,生成token以及解析token package com.niuniu.gateway.uti…...
ubontu安装anaconda
1.下载 Anaconda 安装脚本 2. 复制到服务器上/home/username文件夹中,进入文件夹,执行: bash Anaconda3-2024.10-1-Linux-x86_64.sh一直按回车,然后输入yes同意协议。 3. 初始化 Anaconda 环境,会自动配置环境变量&a…...
【Docker容器化技术】docker安装与配置、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
文章目录 一、Docker的安装与配置1、docker概述2、安装docker3、docker架构4、配置镜像加速器 二、Docker命令1、服务相关命令2、镜像相关命令3、容器相关命令 三、Docker容器数据卷1、数据卷概念及作用2、配置数据卷3、配置数据卷容器 四、Docker应用部署实战1、部署MySQL2、部…...
Python模拟A卷实操题
1.某机械公司生产两种产品。A的单件利润分别是100元,B的单件利润是150元。 每种产品由三种材料构成,现给出每种材料的库存(库存小于100000),求利润最大的生产方案。输入说明:第一行给出生产每件A产品所需要…...
Leetcode 检测相邻递增子数组
3349. 检测相邻递增子数组 I 给你一个由 n 个整数组成的数组 nums ,请你找出 k 的 最大值,使得存在 两个 相邻 且长度为 k 的 严格递增 子数组 。具体来说,需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组,并满…...
rockylinux 8安装 gcc11.2
方法 1:从源代码编译安装最新版本的 GCC 下载 GCC 源代码: 访问 GCC 官方网站下载最新版本的源代码,例如: wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz tar -xf gcc-11.2.0.tar.gz cd gcc-11.2.0安装依赖项&a…...
反线性学习—— 不是“按顺序学完教材”,是“围绕目标把知识长出来”
反线性学习—— 不是“按顺序学完教材”,是“围绕目标把知识长出来”在传统的学习习惯中,我们往往有一种 “进度条强迫症”:只要书看完了、课听完了、笔记记满了,就觉得自己“学完了”。 但现实往往很残酷:当你合上书本…...
只剩马斯克自己!xAI 11个联合创始人跑光了
11位联合创始人三年出清、只剩马斯克一人,xAI这场「天团散伙」背后,藏着AI时代最残酷的人才战争与帝国裂缝。3月28日,Ross Nordeen悄悄摘掉了自己在X平台上的xAI员工认证标识。他发了一张照片——「触碰一些草」。没有长篇告别信,…...
Qwen3-ForcedAligner-0.6B低延迟实时处理能力展示
Qwen3-ForcedAligner-0.6B低延迟实时处理能力展示 如果你正在寻找一个能快速、精准地为语音和文字“打上时间标签”的工具,那么Qwen3-ForcedAligner-0.6B绝对值得你花几分钟了解一下。想象一下,一段长达5分钟的演讲音频,你需要精确知道每个词…...
libtorrent会话管理终极指南:10个关键配置参数详解
libtorrent会话管理终极指南:10个关键配置参数详解 【免费下载链接】libtorrent an efficient feature complete C bittorrent implementation 项目地址: https://gitcode.com/gh_mirrors/li/libtorrent libtorrent是一个高效且功能完善的C BitTorrent实现&a…...
3步告别卡顿:用鸣潮工具箱实现流畅游戏体验
3步告别卡顿:用鸣潮工具箱实现流畅游戏体验 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你的游戏还在卡顿吗?试试这个免费解决方案 你是否曾经在《鸣潮》的激烈战斗中遭遇突然的…...
WSL2下git clone失败:防火墙与代理配置全解析
1. WSL2下git clone失败的常见现象 最近在WSL2环境下工作时,突然发现git clone命令无法正常拉取远程仓库代码。这个问题困扰了我好几天,经过反复排查才发现是Windows防火墙设置和代理配置的问题。相信很多使用WSL2开发的同行都遇到过类似情况࿱…...
MixText+BERT还能这么玩?手把手复现FPMT论文中的‘概率伪混合’黑科技
解密FPMT论文中的概率伪混合:BERT隐藏层的动态插值艺术 在自然语言处理领域,数据增强一直是提升模型泛化能力的关键技术。传统MixText方法通过线性插值在输入层混合样本,但这种"一刀切"的方式忽视了不同样本对模型训练的差异化价值…...
SMUDebugTool终极指南:快速掌握AMD Ryzen系统调试与优化技巧
SMUDebugTool终极指南:快速掌握AMD Ryzen系统调试与优化技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
告别逐行阅读:这个终端工具让你的阅读速度提升200%
告别逐行阅读:这个终端工具让你的阅读速度提升200% 【免费下载链接】speedread A simple terminal-based open source Spritz-alike (per-word RSVP aligned on optimal reading points) 项目地址: https://gitcode.com/gh_mirrors/sp/speedread 在信息爆炸的…...
开源视频下载工具downkyi:高效管理B站资源的全流程指南
开源视频下载工具downkyi:高效管理B站资源的全流程指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
