私はNetLogoのaskプリミティブのドキュメントとparallelsimのシミュレーション方法を読んでいます。私はまたhereなぜNetLogoが並行していないことがわかりました。なぜ私は依然としてプリミティブをパラレルにすることができないのか分かりませんが?誰かがこの選択の背後にある理由は何かを説明してくれますか?NetLogoはなぜ並行しないのですか?
ありがとうございました
私はNetLogoのaskプリミティブのドキュメントとparallelsimのシミュレーション方法を読んでいます。私はまたhereなぜNetLogoが並行していないことがわかりました。なぜ私は依然としてプリミティブをパラレルにすることができないのか分かりませんが?誰かがこの選択の背後にある理由は何かを説明してくれますか?NetLogoはなぜ並行しないのですか?
ありがとうございました
技術的な理由が多数あるask
(ほとんどが共有状態を操作するに)平行であるが、高レベルで、次のコードを検討することができない。
create-turtles 3
ask turtles [
let target one-of other turtles-here
ask target [
die
]
]
と仮定ask
がで走っ平行。次に、異なる亀は、上記のコマンドの実行を予測できないほど(多かれ少なかれ)織り交ぜます。まず、何が起こるかを見てみましょう。
turtle 2 assigns target to turtle 1
turtle 2 asks turtle 1 to die
turtle 1 dies
turtle 0 assigns target to turtle 2
turtle 0 asks turtle 2 to die
turtle 2 dies
ask
が並列した場合は、しかし、次のことが発生する可能性があります:
turtle 2 assigns target to turtle 1
turtle 0 assigns target to turtle 1
turtle 0 asks turtle 1 to die
turtle 1 dies
turtle 2 asks turtle 1 to die, but turtle 1 no longer exists, so an error occurs
をこのように、我々は正確にこのモデルを実行した場合(現在のNetLogoセマンティクスの下で発生する可能性がある)、次のような何か同じ状態を2回、成功する可能性があります。もう1回はエラーが発生する可能性があります。パラレル実行に内在するランダム性に依存します。
さらに悪いことに、予期せぬ状態でもエラーは発生しません。上記と同様の理由により
ask turtles [
let target one-of other turtles with [ not any? link-neighbors ]
create-link-with target
]
二カメ、モデルの無効な状態になり、同じカメに接続を終了することが、その時点で:リンクを持つカメをオフペアリングしようとする次のコードを検討モデルは実際にエラーを起こすことなく誤った結果を与えます。
この場合、どうしますか?
ask turtles [move-to one-of patches with [not any? turtles-here]]
以下の両方の回答は、並列処理によってエラーが発生する特定の例を示しています。より理論的なレベルでは、並列処理は、より大きなタスクを独立して実行できる小さなタスクに分割する能力に依存します。しかし、エージェントベースのモデリングは基本的にエージェント間の相互作用を必要とするため、悪用する独立性はありません。インタラクションがない場合は、その方法論を使用する上で実際のポイントはありません。しかし、NetLogoのバッチ操作であるBehaviorSpaceは、別々のシミュレーションを並行して実行します。 – JenB
ありがとう、あなたの説明とブライアンの答え、今私はなぜ私は並列 '尋ねる'と思ったように簡単ではないことを理解して –
要するに、並列プログラミングは非常に困難でNetLogoは簡単にする必要がある。 –