PostgreSQL 物流 O2O 路径规划 物流调度
摘要: 背景 物流行业是被电子商务催生的产业之一。 快件的配送和揽件的调度算法是物流行业一个非常重要的课题,直接关系到配送或揽件的时效,以及物流公司的运作成本。 好的算法,可以提高时效,降低成本,甚至可以更好的调动社会资源,就像滴滴打车一样,也许能全民参与哦。 以后也许上班路途还
物流行业是被电子商务催生的产业之一。
快件的配送和揽件的调度算法是物流行业一个非常重要的课题,直接关系到配送或揽件的时效,以及物流公司的运作成本。
好的算法,可以提高时效,降低成本,甚至可以更好的调动社会资源,就像滴滴打车一样,也许能全民参与哦。
以后也许上班路途还能顺路提供快递服务呢。
本文将以物流行业为例,给大家分析一下PostgreSQL与Greenplum在地理位置信息处理,最佳路径算法,机器学习等方面的物流行业应用方法。
物流做的事情很简单,寄件,送件。
物流环节的要素有几个,都与位置有关
揽件员
PS,揽件人通常不是直接将货收到仓库,而是网点。所以网点到仓库也是需要调度的,本文未涉及。
调度方法与配送差不太多。
货物
仓库
运输工具
派件员
收件人
如果引入时间属性,则更具有想象空间,例如前面提到的像滴滴打车一样,也许能全民参与哦。
我们这里先从简单的入手,假设现在只关心位置信息。
货物从寄件人到揽件员,通常是预约的操作,而且寄件人可以直接去网点办理寄件,所以没有太多的算法在里面。
如果派件和揽件混合在一起的话,可以用KNN算法来解决,再结合派件点路径调度,选出最佳的揽件人。
例如,寄件人当前位置,与快递员调度的下一个位置,进行KNN运算,因此B来揽件是成本最低的。
假设上图为仓库的位置,两个仓库之间如果开通了线路的话,就以线段连接起来。
每个仓库负责一个区域,这个区域是一个几何的图形。
通过寄件人和收件人的位置,与仓库的区域进行点面判断,找出寄件人的仓库与收件人的仓库。
快件为点,仓库为面,寄件时根据寄件人填写的寄件和收件信息转换为寄件和收件两个经纬度,通过这两个经纬度与快递公司的仓库表进行点面包含的判断匹配,就可以找出快件对应的起点和重点的仓库。
点面判断
有了源和目标就可以通过pgrouting提供的各种最佳路径算法算出每件货物的最佳路径。
本文后面会有demo来讲解如何使用pgrouting计算最佳路径。
仓库之间的货车的工作就简单了,装满就走 或 分波次(考虑到时效) 的原则,负责好两个直连节点的来回运输,并不是一辆车完成整个货物的从起点到终点的运输。
例如负责A和B之间线路的货车,只在AB之间跑运输。
货物在抵达目标仓库后,首先要将货物分拣到派件的网点。
其实也是一个点面判断的过程,网点覆盖的派件范围为面,快件则为点,点面判断找出对应的网点。
从仓库到网点,也可以使用仓库建流转的原理,计算出最佳线路。货车只负责2个网点之间的货物流转即可。
进入派件的流程,也就是货物在抵达收件人手中的最后一公里要做的事情。
为了更好的实现派件调度,需要对快件进行聚合操作,根据位置进行聚合。
原理和前面类似,还是要做点面判断,只是目标更加精确,例如精确到小区或者很小的区域。
派件除了要考虑快件的目的地(聚合后的),还需要考虑快件的体积,重量,以及快递员的运货能力(体积与重量) 。
假设一个网点当前收到的快件覆盖了以下需要派送的点(聚合后的),同时每个点的货物体积总和如数字所表示。
路径规划与前面不一样的地方,这里规划的是多个点作为目标。
多点目标的最佳路径,用意是确保相邻目标的连续性,确保切分不同网点的快件后,拿到快件的人跑的是还是相邻的点。
例如中心是网点的位置,其他点是目标位置,目标位置的数字是体积,假设每个快递员一次运输的体积是7000,虚线是一个快递员拿到的一趟的快件。
这种方法确保了每趟的快件是连续的。
多点目标的最佳路径规划,在本文后面的部分也会有DEMO。
如何将地址转换成坐标,不在本文的讨论范围,很多做导航的公司都可以输出这个能力。
但是作为快递公司,还有一种方法可以获得精确的坐标信息,例如快递员的手持GPS终端,收件时扫个条码,同时上报位置信息。
有了一定的基数后,通过文本分析和机器学习,也可以输出地址转坐标的能力。
如果基数非常庞大,可以选择基于PostgreSQL的Greenplum数据仓库,进行文本分析与机器学习(支持MADlib库,支持R)。
Greenplum支持文本分析,支持地理位置信息处理,支持MADlib机器学习库,还支持R语言自定义函数,python函数,支持分布式并行计算。 最重要的是它开源,绝对是有文本和地理位置分析需求的用户最好的选择。
以仓库之间的数据流转为例
需要用到PostgreSQL数据库的PostGIS与pgrouting。
http://workshop.pgrouting.org/chapters/topology.html
基础数据需求,用来表示开通了运输航线的仓库之间的线段数据,公里数据。
Road link ID (gid) 唯一,指路段号
Road class (class_id)
Road link length (length),长度,公里数
Road name (name),路名
Road geometry (the_geom),线段(可以是多点线段,也可以是双点线段)
假设表名为ways,里面存储的就是仓库之间的线段信息
Table "public.ways"
Column | Type | Modifiers
----------+---------------------------+-----------
gid | bigint |
class_id | integer | not null
length | double precision |
name | character(200) |
osm_id | bigint |
the_geom | geometry(LineString,4326) |
Indexes:
"ways_gid_idx" UNIQUE, btree (gid)
"geom_idx" gist (the_geom)
要生成最佳路径,首先要生成合法的拓扑,否则怎么生成路径呢?
生成拓扑前,需要添加两个字段,用来存储线段的首尾编号
-- Add "source" and "target" column
ALTER TABLE ways ADD COLUMN "source" integer;
ALTER TABLE ways ADD COLUMN "target" integer;
调用pgr_createTopology生成拓扑,注意就是生成线段的首位编号的过程
pgr_createTopology(
'', -- 需要生成拓扑的表名
float tolerance, -- 容错值,例如线段的端不能完全吻合时,允许多少误差,单位一般为角度或公里数
'' , -- 线段列名
'' ) -- gid
例如,ABC三条线段,其中B线段的两端都没有和AC完全吻合,误差分别为1米和10米,所以需要设置容错。
生成线段,实际上就是设置source和target的ID,设置完后,可能就变成这样的了
例子
-- Run topology function
SELECT pgr_createTopology('ways', 0.00001, 'the_geom', 'gid');
2. 生成最佳路径
pgrouting支持的最佳路径算法很多
http://docs.pgrouting.org/2.2/en/doc/index.html
这里以Shortest Path A*和Shortest Path Dijkstra为例,介绍如何生成最佳路径
http://workshop.pgrouting.org/chapters/shortest_path.html
如果仓库之间的线段支持双向,回来的成本是多少?
如果回程要考虑堵车更多一点,那么成本就不仅仅是公里数了,还需要加上堵车的成本。
本例加上回程成本的字段,并设置为公里数,也就是说这条线段支持回程。
ALTER TABLE ways ADD COLUMN reverse_cost double precision;
UPDATE ways SET reverse_cost = length;
2.1 Shortest Path Dijkstra算法举例
调用
pgr_costResult[] pgr_dijkstra(
text sql, -- 用于计算最佳路径的数据来源, 用SQL表示, 例如
-- SELECT id (gid), source (线段起点id), target (线段重点ID), cost (起点到重点的成本) [,reverse_cost (重点到起点的成本)] FROM edge_table
integer source, -- 规划路径的起点
integer target, -- 规划路径的终点
boolean directed, -- if the graph is directed
boolean has_rcost -- if true, the reverse_cost column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction.
);
返回多行,即路径。
a set of pgr_costResult (seq (序号), id1 (起点id), id2 (目标ID, -1表示终点), cost (这一段的成本)) rows, that make up a path.
例子
从30到60的最佳路径
SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM ways',
30, 60, false, false);
seq | node | edge | cost
-----+------+------+---------------------
0 | 30 | 53 | 0.0591267653820616
1 | 44 | 52 | 0.0665408320949312
2 | 14 | 15 | 0.0809556879332114
...
6 | 10 | 6869 | 0.0164274192597773
7 | 59 | 72 | 0.0109385169537801
8 | 60 | -1 | 0
(9 rows)
2.2 Shortest Path A*算法举例
与Shortest Path Dijkstra算法类似,只是SQL需要用到每条线段的起点和重点的坐标,其他参数和pgr_dijkstra都一样。
ALTER TABLE ways ADD COLUMN x1 double precision;
ALTER TABLE ways ADD COLUMN y1 double precision;
ALTER TABLE ways ADD COLUMN x2 double precision;
ALTER TABLE ways ADD COLUMN y2 double precision;
UPDATE ways SET x1 = ST_x(ST_PointN(the_geom, 1)); -- 线段起点坐标x
UPDATE ways SET y1 = ST_y(ST_PointN(the_geom, 1)); -- 线段起点坐标y
UPDATE ways SET x2 = ST_x(ST_PointN(the_geom, ST_NumPoints(the_geom))); -- 线段终点坐标x
UPDATE ways SET y2 = ST_y(ST_PointN(the_geom, ST_NumPoints(the_geom))); -- 线段终点坐标y
调用
pgr_costResult[] pgr_astar(
sql text, -- SELECT id, source, target, cost, x1, y1, x2, y2 [,reverse_cost] FROM edge_table ,包含了起点和重点坐标,计算速度比Shortest Path A*算法快一点
source integer,
target integer,
directed boolean,
has_rcost boolean
);
返回结果与pgr_dijkstra一样
a set of pgr_costResult (seq, id1, id2, cost) rows, that make up a path.
例子
SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_astar('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost,
x1, y1, x2, y2
FROM ways',
30, 60, false, false);
结果
seq | node | edge | cost
-----+------+------+---------------------
0 | 30 | 53 | 0.0591267653820616
1 | 44 | 52 | 0.0665408320949312
2 | 14 | 15 | 0.0809556879332114
...
6 | 10 | 6869 | 0.0164274192597773
7 | 59 | 72 | 0.0109385169537801
8 | 60 | -1 | 0
(9 rows)
2.3 生成多目标最佳路径
在使用导航时,我们可以选择途径点,这其实就是多目标规划的一种常见场景。
例如从杭州到万载,途径江山去丈母娘家休息一晚。
本例使用的算法是Multiple Shortest Paths with kDijkstra
用法与kDijkstra类似,只有一个参数不一样,就是targets是使用数组表示的。
生成分段成本
pgr_costResult[] pgr_kdijkstraCost(text sql, integer source,
integer[] targets, boolean directed, boolean has_rcost);
例子
从10出发,到达60,70,80
SELECT seq, id1 AS source, id2 AS target, cost FROM pgr_kdijkstraCost('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM ways',
10, array[60,70,80], false, false);
seq | source | target | cost
-----+--------+--------+------------------
0 | 10 | 60 | 13.4770181770774
1 | 10 | 70 | 16.9231630493294
2 | 10 | 80 | 17.7035050077573
(3 rows)
生成路径
pgr_costResult[] pgr_kdijkstraPath(text sql, integer source,
integer[] targets, boolean directed, boolean has_rcost);
例子
从10出发,到达60,70,80
SELECT seq, id1 AS path, id2 AS edge, cost FROM pgr_kdijkstraPath('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM ways',
10, array[60,70,80], false, false);
seq | path | edge | cost
-----+------+------+---------------------
0 | 60 | 3163 | 0.427103399132954
1 | 60 | 2098 | 0.441091435851107
...
40 | 60 | 56 | 0.0452819891352444
41 | 70 | 3163 | 0.427103399132954
42 | 70 | 2098 | 0.441091435851107
...
147 | 80 | 226 | 0.0730263299529259
148 | 80 | 227 | 0.0741906229622583
(149 rows)
小结
本文用到哪些技术
-
点面判断
用法请参考PostGIS手册
-
点面判断后,按面进行聚合
-
路径规划
具体的用法请参考pgrouting的手册以及workshop
-
支持哪些最优算法
非常多,具体的用法请参考pgrouting的手册以及workshop
-
UDF
PostgreSQL支持python, R, C等各种自定义函数的语言
-
机器学习
PostgreSQL与Greenplum都支持MADlib库,对于Greenplum的R用户,可以使用Greenplum进行隐式的并行数据挖掘,处理大数据量的挖掘很有帮助
-
地址转换成坐标
-
聚类算法
如果小区信息在数据库中存储的不是面,而是点,那么派件的点面判断,可以用PostgreSQL或者Greenplum的K-Means聚类算法,将快件与小区进行聚合,达到同样的目的。
用法举例:
http://blog.163.com/digoal@126/blog/static/163877040201571745048121/
SELECT kmeans(ARRAY[x, y, z], 10) OVER (), * FROM samples;
SELECT kmeans(ARRAY[x, y], 2, ARRAY[0.5, 0.5, 1.0, 1.0]) OVER (), * FROM samples;
SELECT kmeans(ARRAY[x, y, z], 2, ARRAY[ARRAY[0.5, 0.5], ARRAY[1.0, 1.0]]) OVER (PARTITION BY group_key), * FROM samples;
第一个参数是需要参与聚类分析的数组,第二个参数是最终分成几类(输出结果时类是从0开始的,如分2类的话,输出是0和1)。
第三个参数是种子参数,可以是1维或2维数组,如果是1维数组,必须是第一个参数的元素个数乘以第二个元素的值。(可以认为是给每一个类分配一个种子)。
我们需要指定的种子数组,即网点覆盖的小区或写字楼等组成的点值数组。
PostgreSQL在地理位置处理的领域一直处于非常领先的地位,用户群体也非常的庞大,PostGIS和pgrouting只是这个领域的两插件。
以前还写过一篇point cloud的数据处理相关文章,有兴趣的童鞋可以参考如下
https://yq.aliyun.com/articles/57095
PostGIS和pgrouting在阿里云的RDS PG数据库都有提供,欢迎使用。
祝大家玩得开心,欢迎随时来 阿里云促膝长谈 业务需求 ,恭候光临。
阿里云的小伙伴们加油,努力做 最贴地气的云数据库 。
扫我,和云栖在线交流
【云栖快讯】首届阿里巴巴在线技术峰会,将于7月19日-21日20:00-21:30在线举办。峰会邀请到阿里集团9位技术大V,分享电商架构、安全、数据处理、数据库、多应用部署、互动技术、Docker持续交付与微服务等一线实战经验,解读最新技术在阿里集团的应用实践。 详情请点击
评论文章(
0)
(0)
(0)
-
分享到:
-
相关文章
- PostgreSQL 索引扫描offset内核优化 - …
- PostgreSQL 数据访问 offset 的质变 c…
- PostgreSQL 老湿机图解平安科技遇到的垃圾回收"…
- 从传统物流模式到“互联网+物流”
你可能感兴趣的:(大数据,算法)
- [贪心算法]BM96 主持人调度(二)
lanbing
多语言LeeCode的题解贪心算法算法
一、题目牛客题目链接:主持人调度(二)_牛客题霸_牛客网题目描述:有n个活动即将举办,每个活动都有开始时间与活动的结束时间,第i个活动的开始时间是startistart_istarti,第i个活动的结束时间是endiend_iendi,举办某个活动就需要为该活动准备一个活动主持人。一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第i个活动,那么该
- 算法理论知识
Victor Zhong
AI框架算法
算法理论知识排序二分查找冒泡排序插入排序选择排序快速排序堆排序希尔排序归并排序基数排序动态规划排序二分查找start=0end=len(list)mid=(start+end)//2冒泡排序每次都是相邻元素两两比较并交换位置。插入排序就好比扑克牌(分左边排好序,右边待排序),每次都是从右边拿一张牌去左边排好序的序列中找插入的位置。选择排序从后面找最小的和前面那个元素进行交换快速排序从中找一个元素作
- 时间复杂度
高斯林.神犇
数据结构
一、算法的目的:解决一个问题,所需执行代码的效率时间评价法:有很大缺陷,由于硬件CPU结构不同导致时间绝对差异性太大(有可能CPU好一点运行速度块,但算法可能很烂)纯时间法不行,后来人们提出:二、数据增长性来评价耗时间增长性和耗空间增长性比如当我们数据增长十倍,所耗空间或者所耗时间是否增长十倍,在此基础上提出两个概念时间复杂度空间复杂度三、那怎么计算时间复杂度呢1.找核心语句2.看核心语句执行的频
- 【数据结构】排序算法:归并与堆
nanguochenchuan
数据结构排序算法数据结构算法
归并排序:分治策略的经典实现算法原理归并排序采用分治法策略,包含三个关键步骤:分解:递归地将数组分成两半解决:对子数组进行排序合并:将两个有序子数组合并为一个有序数组C语言实现#include#include//合并两个有序子数组voidmerge(intarr[],intleft,intmid,intright){inti,j,k;intn1=mid-left+1;intn2=right-mid
- 多目标路径规划:IMOMD-RRT*算法详解
多目标路径规划项目结构与关键算法解析一、项目版本概览该路径规划项目共包含两个主要版本:两个版本的共同点:配置文件路径:config/algorithm_config.yamlsystem:使用不同算法的编号destination:定义目标点的ID列表map:指定使用的地图文件pseudo:1:仅规划起点到终点0:多目标路径规划两个版本的区别:✅新版特点:路径生成由src/main可执行文件完成;支
- React 核心原理与Fiber架构
旺代
react.js
目录一、虚拟DOM二、Diffing算法三、Fiber架构四、渲染流程1.Render阶段(可中断异步过程)2.Commit阶段(同步不可中断)五、时间切片(TimeSlicing)六、核心流程步骤总结1.状态更新触发2.Render阶段(异步可中断,构建Fiber树)3.Commit阶段(同步不可中断,更新真实DOM)4.双缓存机制切换5.调度系统核心支撑七、组件触发渲染的时机八、Hooks顶层
- 大图处理优化:低分加载、Lazy Decode 与缩放算法加速实践
观熵
影像技术全景图谱:架构调优与实战算法影像Camera
大图处理优化:低分加载、LazyDecode与缩放算法加速实践关键词:大图加载优化、LazyDecode、Region解码、缩放算法、Bitmap分块、滑动加载、内存控制、图像性能优化摘要:在相册、图片浏览器、拍摄预览和编辑器中,用户经常会处理分辨率高达上千万像素的照片(如48MP、64MP、RAW文件等),这类“大图”在加载、缩放、平移过程中容易造成内存抖动、页面卡顿甚至OOM崩溃。本篇文章将围
- Open3D 点到面的ICP配准算法
AtlasCloud
python点云数据处理算法人工智能python矩阵numpy
目录一、算法原理1、算法概述2、点到平面ICP精配准3、参考文献二、主要函数三、代码实现四、结果展示1、初始位置2、配准结果一、算法原理1、算法概述 点到平面度量通常使用标准非线性最小二乘法来求解,例如Levenberg-Marquardt。点到平面ICP算法的每次迭代通常比点到点算法慢,但收敛速度明显更快。两个点云之间的相对旋转小于30°,在旋转矩阵中用θ替换sinθ,用1替换cosθ实现用线
- 解析大数据领域结构化数据的管理模式
大数据洞察
大数据ai
解码结构化数据:大数据时代的高效管理模式与实践指南关键词结构化数据、大数据管理、数据建模、分布式数据库、数据仓库、数据治理、性能优化摘要在大数据的洪流中,结构化数据犹如隐藏在波涛之下的磐石,虽然不如非结构化数据那般引人注目,却是企业决策的基石。本文深入剖析了大数据环境下结构化数据的管理模式,从传统关系型数据库到现代分布式系统,从数据建模到存储架构,全面解读了结构化数据管理的核心技术与实践方法。通过
- 【大厂机试题+多种解法+算法可视化笔记】欢乐的周末
xuwzen
编码训练算法
题目小华和小为是很要好的朋友,他们约定周末一起吃饭。通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达),求小华和小为都能到达的聚餐地点有多少个?输入描述第一行输入m和n,m代表地图的长度,n代表地图的宽度。第二行开始具体输入地图信息,地图信息包含:0为通畅的道路1为障碍物(且仅1为障碍物)2为小华或者小为,地图中必定有且仅有2个(非障碍物)3为被选中的聚餐地点(
- 动态规划、背包问题入门
2303_Alpha
动态规划代理模式算法笔记c语言
目录1、动态规划定义2、数塔问题题目描述:思路:代码实现:3、最长有序子序列问题描述:代码实现:动态规划基本思想特点4、背包问题①01背包问题空间复杂度优化②完全背包③多重背包二进制优化④二维费用背包1、动态规划定义动态规划是一种用于解决优化问题的算法策略,它的核心是把一个复杂的问题分解为一系列相互关联的子问题,并通过求解子问题的最优解来构建原问题的最优解。它将一个问题分解为若干个子问题,然后从最
- ClickHouse【理论篇】01:什么是ClickHouse
ClickHouse是一款开源的列式数据库管理系统(Column-OrientedDBMS),专为高性能实时数据分析(OLAP,OnlineAnalyticalProcessing)场景设计。它由俄罗斯搜索引擎公司Yandex开发(2016年开源),目前由独立基金会ClickHouse,Inc.维护,广泛应用于大数据分析、日志处理、用户行为洞察等领域。一、核心定位:OLAP场景的“性能标杆”传统关
- SpinLock (TTAS) C-A-S 自旋锁实现原理
liulilittle
MarkdownExtensionC/C++c语言redisc++开发语言同步锁cas
SpinLock(TTAS)C-A-S自旋锁实现原理引用SpinLock.hSpinLock.cpp⚙️核心结构解析TTASLock工作原理Test-and-Test-and-Set(TTAS)算法流程:初次测试:快速检查锁状态二次测试:执行原子CAS操作自旋循环:失败后重试线程内存位置(atomic_)读取锁状态CAS(0→1)获取锁成功返回失败/继续自旋alt[CAS成功][CAS失败]等待/
- 无人机一机多控技术要点难点
云卓SKYDROID
无人机人工智能高科技云卓科技科普
一、运行方式1.核心架构:集中式控制(最常见):遥控器作为主控端,通过无线通信模块与多架无人机建立连接。遥控器运行核心控制逻辑,负责:接收操作员的输入指令(如整体移动、队形变换)。根据预设的编队逻辑或算法,将整体指令解算为每架无人机的个体指令(目标位置、速度、航向等)。通过通信链路同时或分时向所有或指定的无人机发送个体指令。接收所有无人机的状态信息(位置、速度、姿态、电池、传感器数据等),进行监控
- JVM垃圾回收算法全解析:从基础到GC调优实战
Java大师兄学大数据AI应用开发
AI人工智能与大数据应用开发AI实战jvm算法ai
JVM垃圾回收算法全解析:从基础到GC调优实战关键词:JVM、垃圾回收算法、基础原理、GC调优、实战应用摘要:本文将全面深入地解析JVM垃圾回收算法,从最基础的概念开始讲起,帮助读者理解垃圾回收的本质和原理。接着详细介绍各种常见的垃圾回收算法,并用通俗易懂的方式解释其工作机制。之后通过实战案例展示如何进行GC调优,让读者不仅了解理论知识,还能掌握实际应用技能。最后对垃圾回收的未来发展趋势进行探讨,
- 力扣题解: 55. 跳跃游戏
胡矣
算法LeetCode算法力扣题解leetcode题解贪心算法
题目给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例1:输入:nums=[2,3,1,1,4]输出:true解释:可以先跳1步,从下标0到达下标1,然后再从下标1跳3步到达最后一个下标。解题思路使用贪心算法从第一个位置开始,找到可以跳跃到的最远位置在这个范围内查找下一次可以跳跃的最远位置重复以上动作,直
- 【Torch】nn.Embedding算法详解
油泼辣子多加
深度学习embedding算法
1.定义nn.Embedding是PyTorch中的查表式嵌入层(lookup‐table),用于将离散的整数索引(如词ID、实体ID、离散特征类别等)映射到一个连续的、可训练的低维向量空间。它通过维护一个形状为(num_embeddings,embedding_dim)的权重矩阵,实现高效的“索引→向量”转换。2.输入与输出输入类型:整型张量(torch.long或torch.int64),必须
- 力扣网编程55题:跳跃游戏之贪心算法
魏劭
逻辑编程题算法leetcode
一.简介本文记录力扣网上涉及数组方面的编程题:跳跃游戏。二.力扣网编程55题:跳跃游戏给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。示例1:输入:nums=[2,3,1,1,4]输出:true解释:可以先跳1步,从下标0到达下标1,然后再从下标1跳3步到达最后
- 力扣网编程121题:买卖股票的最佳时机之动态规划(简单)
魏劭
逻辑编程题C语言leetcode动态规划算法
一.简介前一篇文章使用贪心算法实现了力扣网上121题:买卖股票的最佳时机,文章如下:力扣网编程189题:买卖股票的最佳时机之贪心算法(简单)-CSDN博客本文使用动态规划实现该题目。二.力扣网编程189题:买卖股票的最佳时机之动态规划(简单)给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票
- 《从Backprop到Diffusion:深度学习的算法进化树全景图》
HeartException
学习人工智能
前言前些天发现了一个巨牛的人工智能免费学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站《从Backprop到Diffusion:深度学习的算法进化树全景图》**展开系统性解析。全文基于算法原理-技术突破-产业重塑的三层逻辑链,融合2025年最新研究成果与产业数据,呈现深度学习四十年的底层技术迁徙路径从Backprop到Diffusion:深度学习的算法进化树全景图副标题:一部算法
- 【大数据入门核心技术-DolphinScheduler】(二)DolphinScheduler安装部署-集群模式
forest_long
大数据技术入门到21天通关大数据sparkhivehadoop交互flinkmapreduce
目录一、部署模式1、单机模式2、伪集群模式3、集群模式二、部署安装1、下载2、创建mysql元数据库3、配置一键部署脚本4、初始化数据库5、一键部署DolphinScheduler6、访问DolphinSchedulerUI三、启停命令一、部署模式DolphinScheduler支持多种部署模式,包括单机模式(Standalone)、伪集群模式(PseudoCluster)、集群模式(Cluste
- 利用已有的 PostgreSQL 和 ZooKeeper 服务,启动dolphinscheduler-standalone-server3.1.9 镜像
云游
大数据平台zookeeperdockerpostgresql工作流任务调度
ApacheDolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。ApacheDolphinScheduler旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种OPS编排中的关系。解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。DolphinSchedule
- Alpha系统联结大数据、GPT两大功能,助力律所管理降本增效
资讯分享周
大数据gpt
如何通过AI工具实现法律服务的提质增效,是每一位法律人都积极关注和学习的课题。但从AI技术火爆一下,法律人一直缺乏系统、实用的学习资料,来掌握在法律场景下AI的使用技巧。今年5月,iCourt携手贵阳律协大数据与人工智能专业委员会,联合举办了《人工智能助力律师行业高质量发展巡回讲座》,超过100家律所的律师参与活动。讲座上,iCourtAIGC研究员、AlphaGPT产品研发负责人兰洋,为贵州律协
- 电商API性能优化:策略体系与实施要点
Joe13265449558
性能优化电商返回值淘宝API接口京东
电商API性能优化策略介绍在电商领域,API(应用程序编程接口)作为连接电商平台与外部系统、服务或应用的关键桥梁,其性能直接关系到用户体验、业务效率以及系统的整体稳定性。随着电商业务的快速发展,API接口面临着高并发、大数据量处理等挑战,因此,对电商API进行性能优化显得尤为重要。本文将从多个维度探讨电商API性能优化的策略。一、数据库优化策略数据库是电商API接口的核心组件之一,其性能直接影响A
- 展锐 ISP 模块功能特点与应用场景评估:轻量化影像处理方案的实战能力分析
展锐ISP模块功能特点与应用场景评估:轻量化影像处理方案的实战能力分析关键词:展锐ISP、图像信号处理、3DNR、HDR合成、YUV输出、图像管线、降噪算法、调色引擎、应用场景评估、移动终端影像系统摘要:作为国产SoC平台中的关键影像处理核心,展锐ISP(ImageSignalProcessor)聚焦轻量化、低功耗与快速集成三大特性,广泛应用于中低端移动终端、AIoT摄像头及定制化影像设备。相较于
- ISP(图像信号处理)算法概述、工作原理、架构、处理流程
全栈_xap
接口隔离原则信号处理算法
而DSP功能就比较多了,它可以做些拍照以及回显(JPEG的编解码)、录像以及回放(Video的编解码)、H.264的编解码、还有很多其他方面的处理,总之是处理数字信号了。ISP是一类特殊的处理图像信号的DSP。ISP架构方案:分为独立****(外置)与集成********(内置)****两种形式。CPU处理器包括:AP、BP、CP。其中BP****:基带处理器、AP:应用处理器、CP:****多媒
- 前端如何借助 Postman 进行接口性能调优
前端视界
前端艺匠馆前端postmanluaai
前端如何借助Postman进行接口性能调优关键词:前端开发、Postman、接口性能调优、API测试、性能分析摘要:本文围绕前端开发中借助Postman进行接口性能调优展开。首先介绍了相关背景知识,包括目的、预期读者、文档结构和术语表。接着阐述了核心概念,如接口性能的相关概念及其联系,并给出了对应的文本示意图和Mermaid流程图。详细讲解了核心算法原理和具体操作步骤,结合Python代码示例进行
- ECharts 智慧医疗大屏制作实例详解
在大数据时代,数据可视化已成为信息传递和决策支持的重要手段。ECharts作为一款功能强大、易于上手的开源可视化库,凭借其丰富的图表类型、灵活的配置项和良好的跨平台兼容性,广泛应用于企业级数据大屏、BI报表、实时监控等场景。本教程以“智慧医疗大屏”为例,完整演示了从页面搭建、图表配置到动态交互与响应式适配的全过程。通过循序渐进的讲解,读者将掌握如何使用ECharts构建专业、美观、可交互的数据可视
- Github 2025-07-04 Java开源项目日报 Top10
老孙正经胡说
githubjava开源Github趋势分析开源项目PythonGolang
根据GithubTrendings的统计,今日(2025-07-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下:开发语言项目数量Java项目10Java实现的算法集合:使用Gitpod.io进行编辑和贡献创建周期:2883天开发语言:Java协议类型:MITLicenseStar数量:57266个Fork数量:18692次关注人数:57266人贡献人数:431人OpenIss
- 水下目标检测:突破与创新
加油吧zkf
目标跟踪人工智能计算机视觉
水下目标检测技术背景水下环境带来独特挑战:光线衰减导致对比度降低,散射引发图像模糊,色偏使颜色失真。动态水流造成目标形变,小目标(如10×10像素海胆)检测困难。声呐与光学数据融合可提升精度,但多模态对齐仍是技术难点。核心算法实现要点图像预处理直方图均衡化与Retinex算法结合改善对比度和色偏:defsingle_scale_retinex(img,sigma):retinex=np.log10
- ASM系列五 利用TreeApi 解析生成Class
lijingyao8206
ASM字节码动态生成ClassNodeTreeAPI
前面CoreApi的介绍部分基本涵盖了ASMCore包下面的主要API及功能,其中还有一部分关于MetaData的解析和生成就不再赘述。这篇开始介绍ASM另一部分主要的Api。TreeApi。这一部分源码是关联的asm-tree-5.0.4的版本。
在介绍前,先要知道一点, Tree工程的接口基本可以完
- 链表树——复合数据结构应用实例
bardo
数据结构树型结构表结构设计链表菜单排序
我们清楚:数据库设计中,表结构设计的好坏,直接影响程序的复杂度。所以,本文就无限级分类(目录)树与链表的复合在表设计中的应用进行探讨。当然,什么是树,什么是链表,这里不作介绍。有兴趣可以去看相关的教材。
需求简介:
经常遇到这样的需求,我们希望能将保存在数据库中的树结构能够按确定的顺序读出来。比如,多级菜单、组织结构、商品分类。更具体的,我们希望某个二级菜单在这一级别中就是第一个。虽然它是最后
- 为啥要用位运算代替取模呢
chenchao051
位运算哈希汇编
在hash中查找key的时候,经常会发现用&取代%,先看两段代码吧,
JDK6中的HashMap中的indexFor方法:
/**
* Returns index for hash code h.
*/
static int indexFor(int h, int length) {
- 最近的情况
麦田的设计者
生活感悟计划软考想
今天是2015年4月27号
整理一下最近的思绪以及要完成的任务
1、最近在驾校科目二练车,每周四天,练三周。其实做什么都要用心,追求合理的途径解决。为
- PHP去掉字符串中最后一个字符的方法
IT独行者
PHP字符串
今天在PHP项目开发中遇到一个需求,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符",",最终结果为1,2,3,4,5,6 代码如下:
$str = "1,2,3,4,5,6,";
$newstr = substr($str,0,strlen($str)-1);
echo $newstr;
- hadoop在linux上单机安装过程
_wy_
linuxhadoop
1、安装JDK
jdk版本最好是1.6以上,可以使用执行命令java -version查看当前JAVA版本号,如果报命令不存在或版本比较低,则需要安装一个高版本的JDK,并在/etc/profile的文件末尾,根据本机JDK实际的安装位置加上以下几行:
export JAVA_HOME=/usr/java/jdk1.7.0_25  
- JAVA进阶----分布式事务的一种简单处理方法
无量
多系统交互分布式事务
每个方法都是原子操作:
提供第三方服务的系统,要同时提供执行方法和对应的回滚方法
A系统调用B,C,D系统完成分布式事务
=========执行开始========
A.aa();
try {
B.bb();
} catch(Exception e) {
A.rollbackAa();
}
try {
C.cc();
} catch(Excep
- 安墨移动广 告:移动DSP厚积薄发 引领未来广 告业发展命脉
矮蛋蛋
hadoop互联网
“谁掌握了强大的DSP技术,谁将引领未来的广 告行业发展命脉。”2014年,移动广 告行业的热点非移动DSP莫属。各个圈子都在纷纷谈论,认为移动DSP是行业突破点,一时间许多移动广 告联盟风起云涌,竞相推出专属移动DSP产品。
到底什么是移动DSP呢?
DSP(Demand-SidePlatform),就是需求方平台,为解决广 告主投放的各种需求,真正实现人群定位的精准广
- myelipse设置
alafqq
IP
在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的数倍。因此项目的可维护性、可复用性是衡量一个项目好坏的关键。而注释则是可维护性中必不可少的一环。
注释模板导入步骤
安装方法:
打开eclipse/myeclipse
选择 window-->Preferences-->JAVA-->Code-->Code
- java数组
百合不是茶
java数组
java数组的 声明 创建 初始化; java支持C语言
数组中的每个数都有唯一的一个下标
一维数组的定义 声明: int[] a = new int[3];声明数组中有三个数int[3]
int[] a 中有三个数,下标从0开始,可以同过for来遍历数组中的数
- javascript读取表单数据
bijian1013
JavaScript
利用javascript读取表单数据,可以利用以下三种方法获取:
1、通过表单ID属性:var a = document.getElementByIdx_x_x("id");
2、通过表单名称属性:var b = document.getElementsByName("name");
3、直接通过表单名字获取:var c = form.content.
- 探索JUnit4扩展:使用Theory
bijian1013
javaJUnitTheory
理论机制(Theory)
一.为什么要引用理论机制(Theory)
当今软件开发中,测试驱动开发(TDD — Test-driven development)越发流行。为什么 TDD 会如此流行呢?因为它确实拥有很多优点,它允许开发人员通过简单的例子来指定和表明他们代码的行为意图。
TDD 的优点:
&nb
- [Spring Data Mongo一]Spring Mongo Template操作MongoDB
bit1129
template
什么是Spring Data Mongo
Spring Data MongoDB项目对访问MongoDB的Java客户端API进行了封装,这种封装类似于Spring封装Hibernate和JDBC而提供的HibernateTemplate和JDBCTemplate,主要能力包括
1. 封装客户端跟MongoDB的链接管理
2. 文档-对象映射,通过注解:@Document(collectio
- 【Kafka八】Zookeeper上关于Kafka的配置信息
bit1129
zookeeper
问题:
1. Kafka的哪些信息记录在Zookeeper中 2. Consumer Group消费的每个Partition的Offset信息存放在什么位置
3. Topic的每个Partition存放在哪个Broker上的信息存放在哪里
4. Producer跟Zookeeper究竟有没有关系?没有关系!!!
//consumers、config、brokers、cont
- java OOM内存异常的四种类型及异常与解决方案
ronin47
java OOM 内存异常
OOM异常的四种类型:
一: StackOverflowError :通常因为递归函数引起(死递归,递归太深)。-Xss 128k 一般够用。
二: out Of memory: PermGen Space:通常是动态类大多,比如web 服务器自动更新部署时引起。-Xmx
- java-实现链表反转-递归和非递归实现
bylijinnan
java
20120422更新:
对链表中部分节点进行反转操作,这些节点相隔k个:
0->1->2->3->4->5->6->7->8->9
k=2
8->1->6->3->4->5->2->7->0->9
注意1 3 5 7 9 位置是不变的。
解法:
将链表拆成两部分:
a.0-&
- Netty源码学习-DelimiterBasedFrameDecoder
bylijinnan
javanetty
看DelimiterBasedFrameDecoder的API,有举例:
接收到的ChannelBuffer如下:
+--------------+
| ABC\nDEF\r\n |
+--------------+
经过DelimiterBasedFrameDecoder(Delimiters.lineDelimiter())之后,得到:
+-----+----
- linux的一些命令 -查看cc攻击-网口ip统计等
hotsunshine
linux
Linux判断CC攻击命令详解
2011年12月23日 ⁄ 安全 ⁄ 暂无评论
查看所有80端口的连接数
netstat -nat|grep -i '80'|wc -l
对连接的IP按连接数量进行排序
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
查看TCP连接状态
n
- Spring获取SessionFactory
ctrain
sessionFactory
String sql = "select sysdate from dual";
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
String[] names = wac.getBeanDefinitionNames();
for(int i=0; i&
- Hive几种导出数据方式
daizj
hive数据导出
Hive几种导出数据方式
1.拷贝文件
如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以。
hadoop fs –cp source_path target_path
2.导出到本地文件系统
--不能使用insert into local directory来导出数据,会报错
--只能使用
- 编程之美
dcj3sjt126com
编程PHP重构
我个人的 PHP 编程经验中,递归调用常常与静态变量使用。静态变量的含义可以参考 PHP 手册。希望下面的代码,会更有利于对递归以及静态变量的理解
header("Content-type: text/plain");
function static_function () {
static $i = 0;
if ($i++ < 1
- Android保存用户名和密码
dcj3sjt126com
android
转自:http://www.2cto.com/kf/201401/272336.html
我们不管在开发一个项目或者使用别人的项目,都有用户登录功能,为了让用户的体验效果更好,我们通常会做一个功能,叫做保存用户,这样做的目地就是为了让用户下一次再使用该程序不会重新输入用户名和密码,这里我使用3种方式来存储用户名和密码
1、通过普通 的txt文本存储
2、通过properties属性文件进行存
- Oracle 复习笔记之同义词
eksliang
Oracle 同义词Oracle synonym
转载请出自出处:http://eksliang.iteye.com/blog/2098861
1.什么是同义词
同义词是现有模式对象的一个别名。
概念性的东西,什么是模式呢?创建一个用户,就相应的创建了 一个模式。模式是指数据库对象,是对用户所创建的数据对象的总称。模式对象包括表、视图、索引、同义词、序列、过
- Ajax案例
gongmeitao
Ajaxjsp
数据库采用Sql Server2005
项目名称为:Ajax_Demo
1.com.demo.conn包
package com.demo.conn;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;
//获取数据库连接的类public class DBConnec
- ASP.NET中Request.RawUrl、Request.Url的区别
hvt
.netWebC#asp.nethovertree
如果访问的地址是:http://h.keleyi.com/guestbook/addmessage.aspx?key=hovertree%3C&n=myslider#zonemenu那么Request.Url.ToString() 的值是:http://h.keleyi.com/guestbook/addmessage.aspx?key=hovertree<&
- SVG 教程 (七)SVG 实例,SVG 参考手册
天梯梦
svg
SVG 实例 在线实例
下面的例子是把SVG代码直接嵌入到HTML代码中。
谷歌Chrome,火狐,Internet Explorer9,和Safari都支持。
注意:下面的例子将不会在Opera运行,即使Opera支持SVG - 它也不支持SVG在HTML代码中直接使用。 SVG 实例
SVG基本形状
一个圆
矩形
不透明矩形
一个矩形不透明2
一个带圆角矩
- 事务管理
luyulong
javaspring编程事务
事物管理
spring事物的好处
为不同的事物API提供了一致的编程模型
支持声明式事务管理
提供比大多数事务API更简单更易于使用的编程式事务管理API
整合spring的各种数据访问抽象
TransactionDefinition
定义了事务策略
int getIsolationLevel()得到当前事务的隔离级别
READ_COMMITTED
- 基础数据结构和算法十一:Red-black binary search tree
sunwinner
AlgorithmRed-black
The insertion algorithm for 2-3 trees just described is not difficult to understand; now, we will see that it is also not difficult to implement. We will consider a simple representation known
- centos同步时间
stunizhengjia
linux集群同步时间
做了集群,时间的同步就显得非常必要了。 以下是查到的如何做时间同步。 在CentOS 5不再区分客户端和服务器,只要配置了NTP,它就会提供NTP服务。 1)确认已经ntp程序包: # yum install ntp 2)配置时间源(默认就行,不需要修改) # vi /etc/ntp.conf server pool.ntp.o
- ITeye 9月技术图书有奖试读获奖名单公布
ITeye管理员
ITeye
ITeye携手博文视点举办的9月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。 9月试读活动回顾:http://webmaster.iteye.com/blog/2118112本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《NFC:Arduino、Andro