Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java neo4j中的出租车共享调度_Java_Graph Databases_Schedule - Fatal编程技术网

Java neo4j中的出租车共享调度

Java neo4j中的出租车共享调度,java,graph-databases,schedule,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

我想问您一些建议和想法,让我的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)
两种选择都可以吗

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

Grid4 --- Grid1 --- Grid11 --- Grid9 
10:15     10:30     10:45      11:00
(pick      (pick    (drop       (drop
user2)     user1)    user2)      user1)
我的想法是获取每个用户的拾取时间值,并将其存储到集合(TreeSet)中,然后对丢弃时间执行相同的操作。这样我就可以得到一个有序的集合。这是个好主意吗

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

有什么建议或想法吗


提前谢谢你

当然,这一切都取决于您的需求,但我觉得您缺少了一个实体。我可能会称之为“乘车”或“预订”。以下可能是有意义的:

(:User)-[:BOOKED_RIDE]->(:Ride)
(:Ride)-[:STARTS_AT]->(:GridItem)
(:Ride)-[:ENDS_AT]->(:GridItem)
start\u AT
可以具有
time
属性

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

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
匹配(user1:User),(user2:User)
匹配
(用户1)-[:预订乘车]->(乘车1:RIDE),
(用户2)-[:预定乘车]->(第2排:乘车),
(开始1)(结束1),
(开始2)(结束2)
具有
[
{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}
]停止
作为止动块,松开止动块
停住
按停止时间点菜
返回收集(停止)作为停止

当然可能有更多的逻辑(特别是如果您使用的是Neo4jJavaAPI),但这可能是一个艰难的开始。

谢谢!很好的解释,我要试一试。一些观察结果显示:行驶节点;我不知道它应该有什么属性,或者我可以创建一个没有属性的节点。另外,你能给我一些建议,我应该如何在neo4j中存储时间。我以前问过,但我也想听听你的建议。这样我就可以正常运行查询了。谢谢,没有属性的
骑乘
节点完全可以。你可以把它的三个关系看作是某种数据。我认为关于时间的问题的答案是相当好的,尽管它总是取决于你将如何使用它。我要问你自己的第一个问题是,你是否打算用密码或Choice的编程语言进行计算再次感谢你,我已经用time HH:mm的格式尝试了你的查询,而且它是有效的!你说得对,时间完全取决于我的需要。所以,可能在某个时候我需要使用另一种格式。对于给定的查询结果,感谢您计算在给定时间内必须首先选择哪个用户。你能给我一些建议或想法来计算这组节点之间的最短加权路径吗。例如,假设查询结果是网格4(10:15)-网格1(10:30)-G11(10:45)-G9(11:00),但我需要计算短路径btw Grid4和Grid1,然后从网格1到网格11,依此类推。有没有一种简单的方法可以通过cyhper或代码来实现这一点。感谢您查看
最短路径
所有最短路径
的文档。如果您还有问题,请发布一个SO问题,我们将看看我们能做些什么
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