2024/09/25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/#10-1
- シミュレーション条件を変えて dtnsim を実行できるようになる。
- エージェントの 2 つの通信方式 (CarryOnly と Epidemic) の違いを他人に説明できるようになる。
- 実行ファイルや Python のモジュールがどこに格納されているかを確認できるようになる。
- Python モジュールに動作確認のための print を埋め込めるようになる。
https://lsnl.jp/~ohsaki/lecture/netcompx/2024/priv/08.pdf
Debian のパッケージおよび dtnsim シミュレータ等をアップデートしておく。
> sudo apt update
> sudo apt upgrade
> sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U dtnsim
dtnsim を以下の条件で実行せよ。 (1) エージェント数は 10、 (2) 移動モデルは RandomWaypoint、 (3) 経路制約なし、 (4) エージェントは CarryOnly。
メッセージ保有ノードが、 宛先ノードに直接接触した時にメッセージが中継されることを確認せよ。
課題 1 において、 エージェントのクラスを Epidemic に変更してシミュレーションを実行せよ。 CarryOnly と Epidemic の違いによって、 メッセージの中継がどのように変化するかを確認せよ。
プログラム dtnsim および Agent.CarryOnly クラスを定義している agent/carryonly.py がインストールされている場所を特定し、 それぞれのファイルの中身を確認せよ。
課題 1 のシミュレーション実行中に、 各エージェントの情報を標準エラー出力にダンプせよ。
> dtnsim -n 10 -m RandomWaypoint -p NONE -a CarryOnly | cellx -L30
末尾の -L30 を変えると描画されるスピードを調整できる (-L30 で 30 フレーム/秒)
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic | cellx -L30
> which dtnsim
/usr/local/bin/dtnsim
> python3
Python 3.11.2 (main, Mar 13 2024, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/ohsaki/lib/python', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/usr/local/lib/python3.11/dist-packages', '/usr/lib/python3/dist-packages']
>>> import dtnsim.agent.carryonly
>>> dtnsim.agent.carryonly.__file__
'/usr/local/lib/python3.11/dist-packages/dtnsim/agent/carryonly.py'
>>> (Ctrl-D で終了)
> less /usr/local/bin/dtnsim
> less /usr/local/lib/python3.11/dist-packages/dtnsim/agent/carryonly.py
例えば、 /usr/local/lib/python3.11/dist-packages/dtnsim/agent/carryonly.pyに以下のような変更を加えればよい。
--- carryonly.py.orig 2021-11-29 15:25:46.432520640 +0900
+++ carryonly.py 2021-11-29 15:24:30.312284452 +0900
@@ -190,6 +190,8 @@
self.mobility.move(self.scheduler.delta)
self.monitor.move_agent(self)
self.forward()
+ import sys
+ print(self, file=sys.stderr)
def flush(self):
"""Merge all newly-received messages with existing ones."""
> cd /usr/local/lib/python3.11/dist-packages/dtnsim/agent
> sudo cp carryonly.py carryonly.py.orig ← 元のファイルを別名で保存
> sudo chmod 666 carryonly.py ← 一般ユーザで書き込めるように
> emacs carryonly.py ← ファイルを編集
「レポート課題 2024/09/25」と同じ。
[<20. 最終レポート課題 (実施報告書)] [>22. シミュレータ解説 (2) (モビリティ、可視化)]