当前位置: 首页 > news >正文

大数据机器学习算法与计算机视觉应用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 线性规划

线性规划包含以下几个特征:

  1. 包含 n n n个变量 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,,xn
  2. 所有的限制条件都是变量的线性组合
  3. 目标函数也是这些变量的线性组合并且求最大值
  4. 没有乘积

所有的限制条件都满足是大于等于(小于等于)的话,这个线性规划称为是有边界的,否则就是没有边界的。
对于一些没有边界的线性规划,目标函数可能没有最大值。

max and min-cost max flow最大流

Modeling Network Flow

网络流模型是一种常见的算法模型,其主要包含以下几个组成部分:

  1. 变量:对于每条边 ( u , v ) (u,v) (u,v), f u v f_{uv} fuv表示这条边的流的大小
  2. 目标:最大化最终节点 T T T接收到的流
  3. 限制条件:
    • 每条边上的流不能超过这条边的承载能力(每条边上的流存在最大值)
    • 除了源点 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)Ew(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} c TX

约束条件: 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,,nAx 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 bisi

A i x ⃗ − b i ≥ − s i \mathbf{A_i}\vec{x}-b_i \geq -s_i Aix bisi
目标函数则是求
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有两种情况:

  1. 先前的最优解满足新的约束条件,那么先前的最优解就是整体最优解,时间复杂度很明显是 O ( 1 ) O(1) O(1)
  2. 新的约束条件给出了新的最优解。这个时候需要计算新的最优解,遍历新的约束条件和先前 m − 1 m-1 m1个约束条件的交点依次计算是否最优,时间复杂度是 O ( m ) O(m) O(m)

那么这个算法总共的时间复杂度满足:
T ( m ) = T ( m − 1 ) + O ( m ) T(m) = T(m-1)+O(m) T(m)=T(m1)+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)!(m1)!=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) (1m2)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(m1)+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 编程

承接上文&#xff1a;socket 编程 本文目录 Windows Client 端WSADATA 结构体WSAStartup() 函数SOCKET 以及 socket() 函数sockaddr_ininet_pton() 函数in_addr structmemcpy()connect() 函数send() 函数recv() 函数 Windows Server 端 在进行 socket 编程之前&#xff0c;你要…...

计算两个结构的乘法

在行列可自由变换的平面上&#xff0c;2点结构有3个 3点结构有6个 计算2*2 2a1*2a14a6 2a1*2a24a8 2a1*2a34a12 显然2a1*2a14a6因为这3个结构都分布在同一列上&#xff0c;就是整数乘法。2a1*2a2的结果有2种写法&#xff0c;一种外形像2a1细节为2a2&#xff0c;一种外形为2…...

学校服务器连接pycharm配置2

上一个可能还是有点问题&#xff0c;因为实际在跑的时候读取的其实是本地的anaconda&#xff0c;这个重新整了一下流程 首先在学校服务器先激活自己创建的虚拟环境&#xff0c;这里就不截图了 然后在pycharm里面打开设置 选择这个python解释器 这里有添加解释器 选择SSH …...

AI赋能电商:创新应用提升销售与用户体验

目录 一、引言 二、AI技术在电商领域的创新应用 三、AI技术提高电商销售效率和用户体验的实践路径 一、引言 随着人工智能&#xff08;AI&#xff09;技术的不断成熟&#xff0c;电商行业正迎来一场深刻的变革。AI技术在购物推荐、会员分类、商品定价等方面的创新应用&…...

详解kafka消息发送重试机制的案例

在 Kafka 生产者中实现消息发送的重试机制&#xff0c;可以通过配置 KafkaProducer 的相关属性来实现。以下是一些关键的配置项&#xff1a; retries&#xff1a;设置生产者发送失败后重试的次数。 retry.backoff.ms&#xff1a;设置生产者在重试前等待的时间。 buffer.memo…...

linux文本管理!!!

文章目录 第1章 文本过滤/查看命令1.echo&#xff1a;输出文本2.cat&#xff1a;合并文件或查看文件内容3.head&#xff1a;显示文件头部信息4.tail&#xff1a;显示文件尾部信息5.wc: 统计文本行号6.less&#xff1a;分页显示文件内容7.grep&#xff1a;文本过滤工具8.定向符号…...

软件设计师-计算机体系结构分类

计算机体系结构分类 Flynn分类法 根据不同的指令流数据流组织方式分类单指令流但数据流SISD,单处理器系统单指令多数据流SIMD&#xff0c;单指令流多数据流是一种采用一个控制器来控制多个处理器&#xff0c;同时对一组数据&#xff08;又称“数据矢量”&#xff09;中的每一…...

《基于深度学习的车辆行驶三维环境双目感知方法研究》

复原论文思路&#xff1a; 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话&#xff0c;求d的话&#xff0c;只和xl-xr有关系&#xff0c;这样一来&#xff0c;是不是只要两张图像上一个测试点的像素位置确定&#xff0c;对应的深…...

jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息

1、引入jwt依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> 2、Jwt工具类&#xff0c;生成token以及解析token package com.niuniu.gateway.uti…...

ubontu安装anaconda

1.下载 Anaconda 安装脚本 2. 复制到服务器上/home/username文件夹中&#xff0c;进入文件夹&#xff0c;执行&#xff1a; bash Anaconda3-2024.10-1-Linux-x86_64.sh一直按回车&#xff0c;然后输入yes同意协议。 3. 初始化 Anaconda 环境&#xff0c;会自动配置环境变量&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元&#xff0c;B的单件利润是150元。 每种产品由三种材料构成&#xff0c;现给出每种材料的库存&#xff08;库存小于100000&#xff09;&#xff0c;求利润最大的生产方案。输入说明&#xff1a;第一行给出生产每件A产品所需要…...

Leetcode 检测相邻递增子数组

3349. 检测相邻递增子数组 I 给你一个由 n 个整数组成的数组 nums &#xff0c;请你找出 k 的 最大值&#xff0c;使得存在 两个 相邻 且长度为 k 的 严格递增 子数组 。具体来说&#xff0c;需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组&#xff0c;并满…...

rockylinux 8安装 gcc11.2

方法 1&#xff1a;从源代码编译安装最新版本的 GCC 下载 GCC 源代码&#xff1a; 访问 GCC 官方网站下载最新版本的源代码&#xff0c;例如&#xff1a; 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…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...