質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

2回答

257閲覧

javaでノードをつなげてルートを作るプログラムを作りたい。

tera_mr

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2017/12/05 09:39

###前提・実現したいこと
移動する複数のノードを用意する。ノードは近くのノードとつながることができる。送信元ノードと宛先ノードを設定して、いくつかのノードを経由した道を作る。(簡易的なモバイルアドホックネットワークのようなもの)

javaで実装する。ただし、java.netはできるだけ使わない。

ノードはクラスで自分で定義しており、ノードの番号、座標、スピード、隣接ノードでできている。必要であれば追加もOK。
移動モデルもランダムウェイポイントモデルを実装済み。

###発生している問題
送信元ノードから宛先ノードにおくる際のルートを決める部分のコーディングがうまくいかない。

例えば、以下のようにノードを5つ用意したとする。
0| 1,2
1| 0,3
2| 0,3
3| 1,2,4
4| 3
左の数字が自身のノードの番号で、右の数字が隣接しているノードの番号である。送信元ノードを0、宛先ノードを4とする。
この場合ルートとしては、0,1,3,4または、0,2,3,4という経路になる。これを、ルートが移動しているので隣接ノードが変わることも考慮してプログラムしなければならない。よって、基本的には現在のノードの隣接ノードに宛先ノードが無いかをチェックして、次のノードに進みまたそのノードの隣接ノードに宛先ノードが無いかをチェックしてというのを最大ホップ数(ノード数)分繰り返すことになる。

もし、送信元ノードの隣接ノードに宛先ノードがあった場合はホップ数が1なので、以下のコードのようにすれば良いだけなのだが、ホップ数が増えるごとに複雑になり、先ほどの例だと2ホップ目の時点でノード1,ノード2という2つの候補からさらに枝分かれしていくような樹形図のような構造になってしまう。どのようにしたらうまくまとめられるか。

java

1if(送信元ノードの隣接ノード.contain(宛先ノード)){ 2 ルート.add(送信元ノード) 3 return ルート 4}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

...ホップ数が増えるごとに複雑になり、...どのようにしたらうまくまとめられるか。

各ノードは隣のことしか知らないという大前提がありますので、それを崩さずアルゴリズムを考えることになると思います。いずれにせよなんらかの探索アルゴリズムの応用になるかと思います。

java.netはできるだけ使わない。

なぜこれを断っておられるのか自分にはわかりませんでした。そもそも本物のネットワークではなくあくまで思考実験だと思います。ゆえにjava.netの出てくる余地はない気がします。


実際のネットワークでは色々な戦略のルーティングアルゴリズムにより経路を決定していると思います。おそらくこうしたもののシミュレーションをすることが意図だと思いますので「ルーティング」で検索すれば様々な方式を知ることができるでしょう。

あるいは思考訓練として「実際にどういう方法かを詳しく調べる前に自分で考える」としてもよいと思います。例えば

  • 閉路を含むネットワーク
  • 深さ優先探索

を使おうとするなら、経由したルーターのリストをパケットにくっつけて送るという想定をするなど。

(1) パケットには送信元と送信先があるとする
(2) パケットには送信元から現在のノードまでの経由ルート情報を持つとする
(3) パケットを送信する際、送信先ノードが隣接ノードであればそこへ送信
(4) (3)でなければ隣接するノードのうち、経由ルートに含まれないノードを選んで送信
(5) (4)ができない(送信先がもうない)なら自分へパケットを送った元にエラーを返す?
etc.

(5)をするかどうかは選択の余地があると思います。あきらめて送信元が再送するのに期待する手もあるかも知れません。(5)のようにして一つ前のルーターに「さっき送ったノードでは到達できなかったから別のノードを選んで送信を継続」とする手もあるかも知れません。この辺りは様々な前提により変化してくるでしょうから色々と考える余地がありそうです。

(ちなみに上記は単なる思いつきですが、自分が過去にどこかで見かけた内容が含まれているかも知れません。よい例だったか悪い例だったかはわかりませんが・・・)

投稿2017/12/05 11:57

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

幅優先探索でできました。

投稿2017/12/08 04:21

tera_mr

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問