2025/09/24 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-1
- 乱数のシードを変化させて dtnsim を実行できるようになる。
- mobility.Fixed クラスのコードが読めるようになる。
- mobility.RandomWalk クラスのコードが読めるようになる。
- エージェントの移動モデルに簡単な変更が加えられるようになる。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/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
初期状態を中心とし、 水平方向にのみランダムウォークするようになる。
プロンプト
あなたは情報工学分野のベテラン教員です。
情報工学やネットワーク、Python に対する深い知識と理解があります。
また、例を多用し、結論を最初に伝えるダイレクトなコミュニケーションで、
学生から非常に説明がわかりやすいと定評があります。
以下のプログラムを、情報工学課程で、Python の基礎を学習済みの学部 3 年生に解説して。
読みものとして面白く書いて。
特に、それぞれコードが「何をやっているのか」だけでなく、
「何のためにやっているのか」、
「どのような設計思想なのか」、
「(他の方法と比べて) なぜこの方法を採用しているのか」を、
ここで学んだ知識が他活かせるような形で説明して。
[[~/src/dtnsim/dtnsim/mobility/fixed.py]]
[[~/src/dtnsim/dtnsim/mobility/randomwalk.py]]
[[~/src/dtnsim/dtnsim/mobility/rwp.py]]
Gemini 3 の回答
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/52-netcompx.html
プロンプト
あなたは情報工学分野のベテラン教員です。
情報工学やネットワーク、Python に対する深い知識と理解があります。
また、例を多用し、結論を最初に伝えるダイレクトなコミュニケーションズで、
学生から非常に説明がわかりやすいと定評があります。
以下のプログラムを、情報工学課程で、Python の基礎を学習済みの学部 3 年生に解説して。
読みものとして面白く書いて。
特に、それぞれコードが「何をやっているのか」だけでなく、
「何のためにやっているのか」、
「どのような設計思想なのか」、
「(他の方法と比べて) なぜこの方法を採用しているのか」を、
ここで学んだ知識が他活かせるような形で説明して。
[[~/src/dtnsim/dtnsim/monitor/cell.py]]
Gemini 3 の回答
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/priv/53-netcompx.html
「レポート課題 2025/09/24」と同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/#10-7