- dtnsim の monitor.Log モジュールを用いて、シミュレーションのログを出力できるようになる
- monitor.Log モジュールが出力するログの意味を理解できるようになる
- エピデミックブロードキャストにおける代表的な性能指標 (p% 配送遅延) を理解し、シミュレーション結果のログから計算できるようになる
- 乱数のシードの異なるシミュレーションを繰り返し実行し、性能指標の平均や信頼区間を計算できるようになる。
dtnsim を以下の条件で実行せよ。 (1) エージェント数は 10、 (2) 移動モデルは RandomWaypoint、 (3) 経路制約なし、 (4) エージェントは Epidemic。 次に、 デフォルトの monitor.Cell クラスではなく、 シミュレーションのログを標準出力に書出す monitor.Log モジュールを用いて実行せよ。
monitor.Log モジュールの出力の意味 (各フィールドの意味) を、 monitor/log.py を読んで推測せよ。 また、 monitor.Log モジュールの出力と、 monitor.Cell モジュールを用いた可視化結果と比較し、 推測の正しさを確認せよ。
p% 配送遅延を求めるフィルタプログラム p-coverage を作成せよ。
標準入力から monitor.Log モジュールからの出力を読み込み、 標準出力に p% 配送遅延を出力せよ。 プログラム p-coverage の引数は、 ノード数と p% 配送率の p とせよ。
例えば 50% 配送遅延であれば、 ノード数が N の時、 N / 2 のノードにメッセージが配送された時刻を求めて出力すればよい。
p-coverage を正しく作成すれば、 例えば以下のような結果が得られるようになる。 シミュレーションの特性上、 表示される値は実行する度に毎回変化することに注意する。
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage 10 50
1410
課題 3 のシミュレーションを、 乱数のシードを変化させて 10 回実行し、 その時の 50% 配送遅延の平均および 95% 信頼区間を求めよ。
平均および 95% 信頼区間の計算には py-stats を使用せよ。
stats - calcurate statistics of values in each column
https://github.com/h-ohsaki/py-stats
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic | cellx -L30
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log
605 forward 1 6 1-2-1
605 status 1 1 0 0 0 0
615 forward 1 4 1-2-1
615 status 2 2 0 0 0 0
615 forward 6 1 1-2-1 dup
615 status 3 3 1 0 0 0
630 forward 4 5 1-2-1
630 status 4 4 1 0 0 0
670 forward 5 1 1-2-1 dup
670 status 5 5 2 0 0 0
700 forward 1 5 1-2-1 dup
700 status 6 6 3 0 0 0
705 forward 5 6 1-2-1 dup
705 status 7 7 4 0 0 0
740 forward 1 5 1-2-1 dup
:
:
※ プログラムの中断は C-c (Ctrl キーを押しながら c キーを押す)
2 カラム目が forward の行:
シミュレーション時刻
forward
送信元エージェントの ID
宛先エージェントの ID
メッセージ ID
メッセージのステータス
2 カラム目が status の行:
シミュレーション時刻
status
送信メッセージ数の総和
受信メッセージ数の総和
重複メッセージ数の総和
ユニークメッセージ数の総和 ※
配送完了したメッセージ数 ※※
配送完了したユニークメッセージ数 ※※
※ 未使用
※※ ブロードキャスト時には意味を持たない
p-coverage の例 (Python)
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage
> wget https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage
> chmod +x p-coverage
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage 10 50
(別解)
p-coverage の例 (シェルスクリプト)
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage.sh
> wget https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage.sh
> chmod +x p-coverage.sh
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage.sh 10 50
同じ処理を 10 回繰り返すには、シェルの for ループを使えばよい。
> for i in (seq 10)
> dtnsim -s $i -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage 10 50
> end | tee log
1565
2720
3440
3330
2140
2155
1410
4640
2755
これにより、実行結果 (実行したコマンドの標準出力) がファイル log に保存される。
py-stats のインストール
> sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U py-stats
10 回の試行で得られた 50% 配送遅延の統計値を求める。
> pystats -v log
count 9
sum 24155
min 1410
max 4640
mean 2683.89
median 2720
mode 2755
var 919127
stddev 958.711
cv 35.721
skew 0.556121
kurt -0.43412
quant10 1410
quant25 2140
quant50 2720
quant75 3330
quant90 4640
conf90 525.693
conf95 626.358
conf99 823.213
findex 0.88684
平均が 2683.89、95% 信頼区間が +/-626.358 であることがわかる。