GraphGists

供应链管理

简介

全球化和外包是导致供应链复杂性增加的主要驱动力。同时,自然灾害以及经济、社会和伦理方面也推动了对整个供应链有良好概述和理解的重要性,而不仅仅关注您的直接供应商和分销商。

为了更好地建模和理解供应链,越来越多的资源将现代供应链称为供应网络。因此,这似乎是一个完美的环境,可以找出 Neo4j 如何帮助我们应对供应链网络挑战。

初始数据模型

为简单起见,每个节点都具有以下相同的属性,lat = 纬度,lon = 经度。

e906a1f7
图 1. 初始数据模型

我们将供应商分为RawSupplierASupplierA 用于新鲜产品,以及RawSupplierBSupplierB 用于耐用品。其余部分很简单。分销通过批发商和零售商进行。

234c2008
图 2. 通过批发商和零售商进行分销

供应链本质上是复杂的,可以通过多种不同的方式进行建模和聚类。为了便于理解,我们将保持简单,并忽略许多在现实世界应用中必不可少的事项。

现实世界中的例子

此供应链可以作为软饮料供应链的一个很好的例子。链中的每个参与者都是一个样本商品或实体。

5dd14968
图 3. 现实世界中的例子

供应链管理的挑战

供应链管理中最大的挑战是现代供应链固有的复杂性。因此,这些示例中的任何一个都不足以用于决策。还有许多其他需要回答的问题,这些问题超出了这个小场景的范围。

连接图

添加每个供应商之间的距离

添加连接节点之间的距离是基于经度和纬度。

案例:查找最佳批发商

让我们从一个传统的运输问题开始:查找累积到每个零售商的距离最短的批发商。感谢 Cypher,这可以非常轻松地完成。

MATCH    (p:Product)-[r1]->(w)-[r2]->(re:Retailer)
WITH     distinct(substring(w.name, 10)) AS Num,
         toInteger(avg(r1.km + r2.km)) AS Average_Distance,
         toInteger(sum(r1.km + r2.km)) AS Total_Distance
RETURN   "Wholesaler" + Num AS Wholesaler, Total_Distance, Average_Distance
ORDER BY Total_Distance

案例:我们想要新鲜的

假设我们要保证饮料中所有新鲜成分的保质期不超过七天。

MATCH chain=(rs:RawSupplierA)-[*]->(re:Retailer)
WITH reduce(wait = 0, s IN nodes(chain)| wait + s.time) AS waitTime, chain
WHERE waitTime < 8
WITH [n IN nodes(chain)| n.name] AS SupplyChain, waitTime
ORDER BY SupplyChain[1]
RETURN SupplyChain, waitTime
LIMIT 10

提示:几乎所有值都基于随机值生成。如果表为空,只需重新加载图即可。

案例:是时候把它们放在一起了

假设:我们不仅想要新鲜的产品。此外,我们希望它是本地的。因此,我们要确保我们的产品需要不到 8 天的时间,并且从农民到杂货店的货架的运输距离不到 23000 公里。

MATCH    chain=(rs:RawSupplierA)-[*]->(re:Retailer)
WITH     reduce(wait = 0, s IN nodes(chain)| wait + s.time) AS waitTime, chain
WHERE    waitTime < 8
WITH     reduce(dist = 0, s IN relationships(chain)| dist + s.km) AS distance, waitTime, chain
WHERE    distance < 23000
WITH     [n IN nodes(chain)| n.name] AS SupplyChain
RETURN   collect(distinct(SupplyChain[1])) AS Supplier, collect(distinct(SupplyChain[0])) AS RawSupplier
LIMIT 10

在这里,我们想知道哪些 RawSupplier 和 Supplier 可以保证这一承诺。当然,为了履行本地化的承诺,我们将不得不指定网络中的精确路径。

案例:在供应链网络中查找顶级“样本”供应链

我们将“样本”供应链定义为在供应链中每个处理步骤都有一个参与者。“顶级”简单地意味着找到评分最高的链。请记住,我们隔离并对每个“样本”供应链进行评分,并且不会一次评估整个供应链。我们根据成本、时间和浪费比较每条可能的供应链。比较基于加权分数。

总分 = (成本 60%) + (浪费 20%) + (时间 20%)

总分可用作 KPI,并简化复杂决策和不同性质值的快速比较。此外,这对于检查供应链的其他成员并将其测量结果作为改进这些成员或监控整个供应链的切实目标非常有用。如果我们想要减少我们的(原始)供应商数量并只保留表现最佳的供应商,总分也会派上用场。

MATCH supplier_chainA=(p:Product)<--(:SupplierA)<--(rsA:RawSupplierA)
MATCH supplier_chainB=(rsB:RawSupplierB)-->(:SupplierB)-->(p)
MATCH retailer_chain=(p)-->(:Wholesaler)-->(re:Retailer)
RETURN
	round(reduce(wait = 0, s IN nodes(supplier_chainA)| wait + 2*s.timeR/10 + 6*s.costR/10 + 2*s.wasteR/10) +
	reduce(wait = 0, s IN nodes(supplier_chainB)| wait + 2*s.timeR/10 + 6*s.costR/10 + 2*s.wasteR/10) +
    reduce(wait = 0, s IN nodes(retailer_chain)| wait + 2*s.timeR/10 + 6*s.costR/10 + 2*s.wasteR/10)) as totalScore,
    [n IN nodes(supplier_chainA)| n.name] + [n IN nodes(supplier_chainB)| n.name] + [n IN nodes(retailer_chain)| n.name] AS SupplyChain
ORDER BY totalScore ASC
LIMIT 1

结论

  • 由于供应链的本质,它本身就是一个图或网络结构,因此图数据库更适合监控、维护和建模供应链问题,例如风险管理、牛鞭效应、运输优化、质量保证……

  • 结合 RFID 芯片和云计算,图数据库技术为实时监控和流程改进提供了广泛的应用。

如有想法、批评或疑问,请随时通过 LinkedIn 与我联系:linkedin.com/in/marcuswachsmuth