所以,我正试图解决这个sku分离和配送路线问题。
情况如下:
有一个单一的区域中心或交货起点,
输入:
客户的地理地址-一对(经纬度)。
输入每个客户的订单数量。
问题:
我想建立路由(loc1-->loc2-->loc7-->-->(位置n)每个位置不超过50个,供一个人交付。
我想对这些路线进行分类,以便知道要发送到某个区域的SKU数量。
我尝试使用KMys&HDBSCAN,但它不符合最大集群大小。
我能不能用某种方式推断出this smart solution在我的情况下是有效的,在我看来,我的情况更像是等级制度。
最佳答案
声明:在二维空间中,如果(并且仅当)同时属于同一个簇的一组点
它们在牛身上的投影是簇状的,在羊身上的投影是簇状的。
在ox上,a、b、c、d的投影是簇状的;在oy上,a、b、c、e的投影是簇状的;
总的来说,A、B和C是集群的。
确定在1D空间上聚集的点:
让我们在实心轴上展开一些点。直觉上,两点属于
如果它们被“小距离”分隔开,则为同一簇;如果它们被分隔开
在很大的距离内,它们属于不同的集群。现在我们必须确定
“大距离”和“小距离”。
让我们对所有的距离进行排序,并寻找一个阈值。
对于ox坐标为[0,1,3,4,14,15,16,19,29,30,31]的点集,距离
连续点之间为[1,2,1,10,1,1,3,10,1,1]同样的距离,当排序时,
看起来像[1,1,1,1,1,1,2,3,10,10]在3到10之间有一个阈值,所以我们将表示
距离我们如何选择门槛通过做两个相邻元素之间的差异在我们的
例如,10-3=7是最大的差异。
如果存在多个相同值的阈值,请选择
最右边的;选择最右边的阈值会导致很少的“大距离”,否则,
许多距离将被认为很大,因此,将有许多集群。
但这取决于您的业务需求你可以把30个地点分成3组,每组10个地点,
或者10个集群,每个集群有3个位置。
如果排序的距离类似于[2,4,6,8,10](没有阈值候选),则选择一些百分位数
就像75%的人:最上面的四分之一是“大距离”,其他的都是“小距离”
根据在OX上的投影,将点分组为多个簇:
现在我们知道了如何对实数进行聚类,让我们对这些点进行OX投影,并对它们进行聚类。
让我们有以下几点,以及它们的OX坐标:
p1(101),p2(12),p3(201),p4(13),p5(202),p6(11),p7(102);
相同点,按其OX坐标排序:
P6(11)、P2(12)、P4(13)、P1(101)、P7(102)、P3(201)、P5(202);
接下来,我们将做另一个分组,根据OY预测。
观察1:当点的索引被排序时,ox投影不是;当我们对ox投影排序时,
现在索引将不会被排序。
观察2:当使用ox投影进行聚类时,我们不应该期望得到相同的结果
就像我们用oy投影进行聚类一样。实际上,我们将所得结果进行交叉。
由于一个点的oy坐标与ox坐标完全独立,聚类结果不同。
因此,Oy轴上的一组完全不同的值。
确定实际群集:
我们之前对ox和oy预测都做了一些聚类,得到
相同点的不同分组。现在我们将交叉这些簇,寻找共同点。
回到我们的第一张图片,在ox给出(a,b,c,d)cluster之后聚类,在oy得到(a,b,c,e)之后,
这些集合的交集将是(A,B,C)-最后一个簇但这只是一个简单的例子。
一般的策略是在OX上做簇的carthesian积,在OY上得到簇。
对于Carthesian产品的每个这样的元素,我们将使OX簇中的元素与OY簇中的元素相交。
如果在OX上有3个簇,在OY上有4个簇,那么carthesian产品将有12个元素我们挑一个吧。
它是a和B两个簇的对:a是OX上的簇,B是OY上的簇如果A和B有共同点
那么这些点确实是一个簇。
在上面的例子中,从7个点,我们只得到了一个单簇。不太令人印象深刻。但是我们
可以进一步加入邻居群集别忘了橙色部分代表“小距离”,
而黑色部分代表“大距离”在上图中,从“集群”P1到集群
p5或p3+p7,只有一个“大距离”。从集群p3+p7到集群p4,有两个大距离加
一小段距离。
免责声明:此过程将世界地图视为矩形(子午线是永不相交的平行线)。
而且,与其把1度和179度的经线看得那么近,它们会显得相距很远。
(它们之间的距离是178度,而不是2度)
然而,这不是一个问题,因为在大多数情况下,交付行为具有区域性,或者至多是国家一级的。
只要你的国家不被180子午线横穿,你就没事。
关于algorithm - 基于纬度/经度的物流路由和隔离算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50366949/