2024/09/25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/#10-1
- 乱数のシードを変化させて dtnsim を実行できるようになる。
- mobility.Fixed クラスのコードが読めるようになる。
- mobility.RandomWalk クラスのコードが読めるようになる。
- エージェントの移動モデルに簡単な変更が加えられるようになる。
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/priv/09.pdf
dtnsim を以下の条件で実行せよ。 (1) エージェント数は 1、 (2) 移動モデルは Fixed、 (3) 経路制約なし、 (4) エージェントは CarryOnly。 乱数のシード (種) を変化させて何度か実行し、 乱数のシードによってエージェントの初期位置が変化することを確認せよ。
テキストの 8.2 節を読み mobility/fixed.py のコードを理解せよ。 その後、 mobility/fixed.py を変更し、 エージェントが右下方向に等速度 (1 [m/s]) で移動するようにせよ。
課題 1 において、移動モデルを RandomWalk に変更せよ。
テキストの 8.3 節を読み mobility/randomwalk.py のコードを理解せよ。 その後、 mobility/randomwalk.py を変更し、 エージェントが水平方向にのみランダムウォークする (つまり一次元ランダムウォークする) ようにせよ。
> dtnsim -s 1 -n 1 -m Fixed -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 2 -n 1 -m Fixed -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 3 -n 1 -m Fixed -p NONE -a CarryOnly | cellx -L30
-s の引数がシード。シードの値によって生成される乱数の系列が変化する。
--- mobility/fixed.py.orig 2021-08-23 12:00:54.498395785 +0900
+++ mobility/fixed.py 2021-12-06 21:48:28.322397148 +0900
@@ -51,4 +51,4 @@
def move(self, delta):
"""Move the agent for the duration of DELTA."""
- pass
+ self.current += V(delta, delta)
> dtnsim -s 1 -n 1 -m Fixed -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 2 -n 1 -m Fixed -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 3 -n 1 -m Fixed -p NONE -a CarryOnly | cellx -L30
初期状態から右下に等速移動するようになる (その後フィールドから出てゆく)。
> dtnsim -s 1 -n 1 -m RandomWalk -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 2 -n 1 -m RandomWalk -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 3 -n 1 -m RandomWalk -p NONE -a CarryOnly | cellx -L30
--- mobility/randomwalk.py.orig 2021-08-23 12:00:54.502395716 +0900
+++ mobility/randomwalk.py 2021-12-06 22:02:25.411949205 +0900
@@ -36,8 +36,10 @@
def update_velocity(self):
"""Update agent's velocity using the velocity function."""
vel = self.vel_func()
- theta = random.uniform(0, 2 * math.pi)
- self.velocity = vel * V(math.cos(theta), math.sin(theta))
+ if random.uniform(0, 1) <= .5:
+ self.velocity = V(vel, 0)
+ else:
+ self.velocity = V(-vel, 0)
self.wait = False
def move(self, delta):
> dtnsim -s 1 -n 1 -m RandomWalk -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 2 -n 1 -m RandomWalk -p NONE -a CarryOnly | cellx -L30
> dtnsim -s 3 -n 1 -m RandomWalk -p NONE -a CarryOnly | cellx -L30
初期状態を中心とし、 水平方向にのみランダムウォークするようになる。
「レポート課題 2024/09/25」と同じ。
[<21. シミュレータ解説 (1) (概要、エージェント)] [>23. ソフトウェア設計・実装]