2

接続時間の問題を解決するためにグラフをモデル化しようとしています。たとえば、次のグラフがあります

    F1,F2     F3     F4

ST_B-------->ST2----->ST3----->ST_E

   F5,F6      F7       F8

ST_B-------->ST4---->ST5------>ST_E

    F9

ST_B-------->ST_E

ST_B、ST2、ST3、ST4、ST5、ST_E をステーション (ノード) としてモデル化します。F1-F9 は flt ノードです。また、各 flt ノードには出発時刻と到着時刻があります。そしてご縁がつながる。また、この場合、F2 の到着時刻は F3 の出発時刻より 30 分短く、F6 は F7 より 30 分短いと仮定します。(接続が無効であることを意味します) したがって、ST_B から ST_E への有効なルートは、F1-F3-F4、F5-F7-F8、および F9 である必要があります。私はサイファーを使用してこの問題を解決しようとしましたが、成功しませんでした。(私はそれを間違ってモデリングしているかもしれません)。

4

1 に答える 1

4

フライトとステーションを区別するために、ノードにラベルを追加しました。すべてのフライト F1 ~ F9 には :Flight のラベルが付けられ、すべてのステーション ST_B、ST_E、および ST_2 ~ ST_5 には :Station のラベルが付けられます。

Match path=stb:Station-[:Connect*]->ste:Station
Where stb.name='ST_B' and ste.name='ST_E'
With filter(x in nodes(path) where x:Flight ) as flts
Where all ( i in Range(0,length(flts)-2) Where flts[i].arrvTime < flts[i+1].dptrTime)
Return extract(flt in flts | flt.name)
  1. 「Match」句と「Where」句は、ST_B から ST_E へのすべてのパスを取得します。
  2. "With" 句は、パス上のすべてのフライト ノードを取得し、次の "Where" 句に渡します。
  3. 次の "Where" 句は、各フライトの到着時刻と接続されたフライトの出発時刻をチェックして、有効なフライトの組み合わせのみを返します。
  4. 最後の "Return" 句は、有効なルートを形成するフライトの名前を返します。
于 2013-09-21T03:19:00.830 に答える