1

私はここを見てきました:コード例 説明

ベクター マップ データを使用した NetLogo プロジェクト

道路があるベクターマップを使用しています。次に、道路がある場所にリンクを描画します。出発点となるイメージで、それはラトビアの首都(リガ)。左側はベンツピルスの街で、ウィッチはリガから約 200 キロ離れています。一番上にはラトビアとエストニアの国境があり、約 200 km です。底までは約100km。

私が欲しいのは、車の充電ステーションをどこに配置する必要があるかを計算することです。平均的な環境に優しい車では、フル バッテリーで 50 キロメートルを走行できます。そう。ヴェンツピルスまでは約200kmだということはわかっています。その道路には 4 つの充電ステーションが必要です。

アイデア No 1 は、充電ステーションの出発点からあらゆる方向に 50 キロごとにすぐです。(写真上の木の記号)。現時点では、充電ステーション (ツリー) をランダムな場所に配置しています:

to setup-stacijas
  set-default-shape boats "tree"
  create-boats num-boats [
    set speed 0 ; min-speed + random-float (max-speed - min-speed)
    let l one-of links
    set size 18
    set-next-stacija-link l [end1] of l
  ]
end 

to set-next-stacija-link [l n] ;; boat proc
  set cur-link l
  move-to n
  ifelse n = [end1] of l [set to-node [end2] of l] [set to-node [end1] of l]
  face to-node
end

質問:

すべての方向への距離 xx キロメートルを計算するにはどうすればよいですか?

リンクとランダムな充電ステーションを含むベクター マップ

4

1 に答える 1

1

エージェント(パッチまたはタートル)は、MOD演算子とともにDISTANCEプリミティブを使用して、50"マイル"の倍数の距離にある他のエージェントを見つけることができます。

シミュレーションでは、1パッチ=1マイルと仮定します。
「リンク」は「ノード」の品種のカメにつながっていると思います。
STARTは「ノード」を含む変数だと思います。

;; get all nodes that are multiples of 50 miles from start
let stations no-turtles
ask start [ set stations nodes with [ (floor distance myself) MOD 50 = 0 ]

これは多くの理由で完璧ではありません。

  • すべてのリンクの長さが1ユニット以下であると想定しています。
  • 弧を横切って、または弧に沿って50マイルで走る道路はすべて含まれるため、すべてに駅があります。
  • 私が考えていなかった他の奇妙なもの。

他のいくつかの反復法は、それ自体を示唆しています。

  1. 道路に「旅行者」を設定して、50マイル(またはそれ以上)ごとに充電ステーションを「ドロップ」します。

    • 交差点では、旅行者は新しい旅行者に分かれて各支店を旅行します
    • 旅行者が旅行者と出会ったときに、各旅行者から最後の「駅」までの合計距離が50マイルを超える場合、駅が作成されます。いずれにせよ、両方の旅行者が死にます。
    • 旅行者が既存の駅を見つけると、それは死にます。

    このようにして、駅はすべての道路に沿って配置されます。

  2. パッチを、半径25マイルかそこらのヘクスグリッドのステーションで埋めます。それらを移行させます。

    • 道路上にない駅を最寄りの道路に向かって移動させます。
    • すべての駅が道路を見つけ、駅を50マイル未満の駅から遠ざけ、道路に沿って移動します(地図の中心から離れてタイブレークします)。
    • 端にぶつかったステーションは「落ちる」(死ぬ)
    • そのため、ステーションは間隔を空け、余分なステーションはマップの端から外れます。

    これは実際に機能する可能性があります。

  3. ステーションでオーバーフィルし、十分になるまで破壊します

    • 道路の1マイルごとに駅を作成します。
    • 駅を1つ選ぶ
    • ##半径49マイルにある他のすべてのステーションに死ぬように頼む-マークを付ける
    • 50マイル離れた駅の1つを選んでください。
    • すべてのステーションがマークされるまで、##から繰り返します。

    それはおそらく最適ではありません。

  4. 道路上の車をシミュレートし、死ぬ場所にステーションを作成します。

    • 車をランダムに道路に配置します(都市から開始)。車は充電が必要になる前に約50マイル走行できます(死にます)
    • 駅はありません
    • 道路をランダムに運転する車をシミュレートします。
    • 車が駅にぶつかると、完全に充電されます
    • 車の充電がなくなると、車は死に、そのパッチ/ノード/場所のカウンターが増えます
    • 繰り返す
    • パッチのカウンターがある値を超えたら、そこにステーションを置きます。
    • ステーションが作成されると、半径50マイルのすべてのパッチのカウンターが減少します。ステーションに最も近い0に、最も遠い0に段階的に減少します。

    最終的に、ステーションは必要な場所にポップアップ表示されます。これは見ていて楽しいでしょう。

~~ジェームズ

于 2013-02-04T21:26:31.193 に答える