java - neo4j 中的出租车共享调度

标签 java graph-databases schedule

我想向您询问一些关于我的 Java 应用程序的建议和想法,以计算共享乘车的出租车调度。

假设我有一辆出租车,上面有两名用户(乘客)。用户将共享行程,但两位乘客位于不同的地方,并且将在不同的时间上车/下车。具有接送地点的用户模型是:

(Grid1)<-[:PICK_UP {time:'10:30'}]-(user1)-[:DROP_OFF {time:'11:00'}]->(Grid9)
(Grid4)<-[:PICK_UP {time:'10:15'}]-(user2)-[:DROP_OFF {time:'10:45'}]->(Grid11)

或者甚至我可以在用户节点中写入所有属性,例如用户1

pickUpLocation:'Grid1'
pickUpTime:'10:30'
dropOffLocation:'Grid9'
dropOffTime:'11:00'

这两个选项都可以吗?

我想计算出租车路径调度,以便知道必须首先/最后选择哪个用户,如下所示:

Grid4 --- Grid1 --- Grid11 --- Grid9 
10:15     10:30     10:45      11:00
(pick      (pick    (drop       (drop
user2)     user1)    user2)      user1)

我的想法是获取每个用户的拾取时间值,并将其存储到集合(TreeSet)中,然后对掉落时间执行相同的操作。这样我就可以得到一个有序的集合。这是个好主意吗??

但是,我应该在哪里存储网格位置(Grid4、Grid1 等)?所以最后,我可以获得出租车的所有信息,去哪里以及什么时间。

有什么建议或想法吗?

提前谢谢您!

最佳答案

当然,这一切都取决于您的要求,但我觉得您缺少一个实体。我可能会将其称为Ride 或“Reservation”。以下内容可能有意义:

(:User)-[:BOOKED_RIDE]->(:Ride)
(:Ride)-[:STARTS_AT]->(:GridItem)
(:Ride)-[:ENDS_AT]->(:GridItem)

STARTS_AT 可以具有 time 属性。

对于两个用户,以下 Cypher 可能提供如何查询的示例:

MATCH (user1:User), (user2:User)
MATCH
  (user1)-[:BOOKED_RIDE]->(ride1:Ride),
  (user2)-[:BOOKED_RIDE]->(ride2:Ride),
  (start1)<-[start_rel1:STARTS_AT]-(ride1)-[end_rel1:ENDS_AT]->(end1),
  (start2)<-[start_rel2:STARTS_AT]-(ride2)-[end_rel2:ENDS_AT]->(end2)
WITH 
  [
    {grid_item: start1, time: start_rel1.time},
    {grid_item: end1, time: end_rel1.time},
    {grid_item: start2, time: start_rel2.time},
    {grid_item: end2, time: end_rel2.time}
  ] AS stops
UNWIND stops AS stop
WITH stop
ORDER BY stop.time
RETURN collect(stop) AS stops

当然,它可能有更多逻辑(特别是如果您使用 Neo4j Java API),但这可能是一个粗糙的开始。

关于java - neo4j 中的出租车共享调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483757/

相关文章:

azure-cosmosdb - Cosmos Db Graph - Gremlin.Net 与 Microsoft.Graph 的性能和吞吐量

php - 在我的网站中创建类似 Facebook 的搜索

neo4j - 使用 cypher (neo4j) 有条件地创建关系

java - 如何在运行时安排执行方法的特定时间

Java 中的 Java 多重比较

java - java中for循环的作用域规则

python - 资源调度应用

windows - 由于 Windows 更新,Azure 云服务应用程序(Web 角色)偶尔会停机约 10 分钟?我该如何安排它们?

java - 什么是构建自动化软件(例如 Ant)?

java - 调试 ClassNotFoundException