(57)【特許請求の範囲】
【請求項１】
自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得する位置取得手段と、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得する変数取得手段と、
自身からの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出する選択手段と、を有し、
前記選択手段は、
前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、前記始点ノードと前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する、ノード。
【請求項２】
自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得する位置取得手段と、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得する変数取得手段と、
自身からの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出する選択手段と、を有し、
前記選択手段は、
前記通信負荷Ｂが前記最大通信負荷ＭＡＸＢに満たない前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、前記始点ノードと前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する、ノード。
【請求項３】
自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得する位置取得手段と、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得する変数取得手段と、
自身からの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出する選択手段と、を有し、
前記選択手段は、
中継ノードとして選択されたことがなく、且つ、データの送信元のノードでない前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、前記始点ノードと前記終点ノードとの間で送受信される前記データを中継する中継ノードとして選択する、ノード。
【請求項４】
前記選択手段により選択された前記中継ノードを通じて前記終点ノードとアドホックモードで通信する通信手段を更に有する、請求項１乃至３のいずれか１項に記載のノード。
【請求項５】
始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得し、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得し、
前記始点ノードからの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出し、
前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、前記始点ノードと前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する、通信方法。
【請求項６】
始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得し、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得し、
前記始点ノードからの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷ＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出し、
前記通信負荷Ｂが前記最大通信負荷ＭＡＸＢに満たない前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、前記始点ノードと前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する、通信方法。
【請求項７】
始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得し、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得し、
前記始点ノードからの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出し、
中継ノードとして選択されたことがなく、且つ、データの送信元のノードでない前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、前記始点ノードと前記終点ノードとの間で送受信される前記データを中継する中継ノードとして選択する、通信方法。
【請求項８】
コンピュータに、
自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得する位置取得手順、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得する変数取得手順、
自身からの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出する手順、及び
前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、自身と前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する選択手順、
を実行させるためのプログラム。
【請求項９】
コンピュータに、
自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得する位置取得手順、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得する変数取得手順、
自身からの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出する手順、及び
前記通信負荷Ｂが前記最大通信負荷ＭＡＸＢに満たない前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、自身と前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する選択手順、
を実行させるためのプログラム。
【請求項１０】
コンピュータに、
自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードと、の間の地理的な距離をｒ ＲＥ、前記始点ノードと該終点ノードとの間の地理的な距離をｒ ＳＥとして取得する位置取得手順、
１以上の前記隣接ノードの通信負荷の平均値をＡＶとして算出し、該隣接ノードごとの前記通信負荷をＢとして取得する変数取得手順、
自身からの電波が到達する範囲の半径をＲ、前記隣接ノードにおいて許容される最大の通信負荷である最大通信負荷をＭＡＸＢとして、
Ｚ＝ｒ ＲＥ−（ｒ ＳＥ−Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）
を和として算出する手順、及び
中継ノードとして選択されたことがなく、且つ、データの送信元のノードでない前記隣接ノードのうち、前記和が最小となる前記隣接ノードを、自身と前記終点ノードとの間で送受信される前記データを中継する中継ノードとして選択する選択手順、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、移動体通信機器などのノードがアドホックモードで通信する技術に関する。
【背景技術】
【０００２】
アドホックネットワークにおいては、クライアントのノード自体にデータ中継機能を持たせることにより、それぞれのノードは、基地局やアクセスポイントなどの固定局を介さずに通信することができる。これらの固定局を要しないので、アドホックモードは、コンサート会場、イベント会場、または災害地などにおいて構築される一時的なネットワークや、自動車などにおける移動体通信に適している。但し、アドホックモードでは、各ノードが中継局となり、各ノードが移動することにより経路が変更されることがあるので、輻輳が発生しやすい。
【０００３】
輻輳を緩和するため、特許文献１および特許文献２に記載のノードは、トラフィック量又は通信負荷が小さいノードを中継用のノードとして選択する構成としている。また、アドホックネットワークで一般的に用いられるＧｒｅeｄｙ方式では、隣接ノードのうち、通信対象である終点ノードと地理的な距離が最も近いノードを中継用のノードとして選択し、中継用のノード数を最小とすることで輻輳の緩和を図っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１４２９０９号公報
【特許文献２】特開２００６−２１１３７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１および特許文献２に開示された構成では、通信量は小さいが、終点ノードから地理的に遠い位置のノードを中継用のノードとして選択してしまうことがある。この場合、中継するノード数が多くなってしまうが、ホップ数が大きいと、各ノード間の通信量の変動の影響を受けやすくなり、始点と終点との間の通信が不安定になりやすい。
【０００６】
また、Ｇｒｅｅｄｙ方式では、終点ノードに地理的に近いが、通信量が大きいノードを選択してしまうことがある。この場合も、通信量の増大により、輻輳が生じやすくなる。
【０００７】
このため、アドホックネットワークにおいて、輻輳が十分に緩和されないという問題があった。
【０００８】
本発明は、アドホックネットワークにおいて、始点と終点との間の安定な通信を確保するとともに、中継ノードにおける輻輳を緩和する技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明のノードは、自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードとの間の地理的な距離を算出する距離算出手段と、前記隣接ノードにおける通信量に応じて変動する変数を取得する変数取得手段と、前記距離算出手段により算出された前記距離と、前記変数取得手段により取得された前記変数とに基づいて、１以上の前記隣接ノードのうち、いずれかを前記始点ノードと前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する選択手段と、を有する。
【００１０】
本発明の通信方法は、始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードとの間の地理的な距離を算出し、前記隣接ノードにおける通信量に応じて変動する変数を取得し、前記距離と前記変数とに基づいて、１以上の前記隣接ノードのうち、いずれかを始点ノードと前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する、通信方法である。
【００１１】
本発明のプログラムは、コンピュータに、自身を始点ノードとして、該始点ノードからの電波が到達する範囲内にある１以上の隣接ノードと、終点ノードとの間の地理的な距離を算出する距離取得手順、前記隣接ノードにおける通信量に応じて変動する変数を取得する変数取得手順、及び前記距離算出手順により算出された前記距離と、前記変数取得手順により取得された前記変数とに基づいて、１以上の前記隣接ノードのうち、いずれかを自身と前記終点ノードとの間で送受信されるデータを中継する中継ノードとして選択する選択手順、を実行させるためのプログラムである。
【発明の効果】
【００１２】
本発明によれば、ノードは、隣接ノードから終点ノードまでの地理的な距離と、通信量に応じて変動する変数とに基づいて中継ノードを選択するため、終点ノードから地理的に遠すぎるノードを選択しない結果、中継ノード数が少なくなり、通信が安定する。また、ノードは、通信量が多すぎるノードを選択しないので、輻輳が緩和される。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態の通信システムの構成を示す全体図である。
【図２】第１の実施形態のノードの構成を示すブロック図である。
【図３】第１の実施形態のｒ_ＳＥおよびｒ_ＲＥを示す図である。
【図４】第１の実施形態のノード情報の構成の一例を示す図である。
【図５】第１の実施形態の選択処理を示すフローチャートである。
【図６】第１の実施形態の中継ノード決定処理を示すフローチャートである。
【図７】第１の実施形態の例外処理を示すフローチャートである。
【図８】第１の実施形態の選択処理の結果を示す図である。
【図９】第１の実施形態の選択処理の結果を示すグラフである。
【図１０】第１の実施形態の中継ノード決定処理を示すフローチャートである。
【発明を実施するための形態】
【００１４】
（第１の実施形態）
本発明を実施するための第１の形態について図面を参照して詳細に説明する。
【００１５】
図１は、本実施形態の通信システム１の構成を示す全体図である。通信システム１は、複数のノードがピア・ツー・ピアで相互に無線通信を行うための通信システムである。同図を参照すると、通信システム１は、複数のノード（例えば１０、１１、１２、および１３）を有する。これらのノードは、基地局やアクセスポイントを介さずに相互に無線通信を行う機能を有する通信機器である。具体的には、これらのノードは、アドホックモードで通信する機能を有するカーナビゲーション装置、ＰＤＡ（Personal Digital Assistant）、携帯ゲーム機、またはノートパソコンなどの移動体通信機器である。
【００１６】
アドホックモードで通信するとき、各ノードは、自身を始点ノードとして、それぞれの電波が到達する範囲内に、通信対象のノード（終点ノード）がないのであれば、電波の到達範囲内のいずれかの隣接ノードを中継して、終点ノードと無線通信を行う。
【００１７】
ここで、始点ノードは、終点ノードへの経路が選択される際に、起点とされるノードである。データの送信元であるエッジのノードは、経路選択において最初の始点ノードとなる。そして、この送信元のノードが中継用の中継ノードを選択したのであれば、その中継ノードは、自身を始点ノードとして終点ノードへの経路を選択する。
【００１８】
終点ノードは、始点ノードがデータの送信先とするエッジのノードである。
【００１９】
中継ノードは、始点ノードと終点ノードとの間で送受信されるデータを中継するノードである。
【００２０】
隣接ノードは、始点ノードからみて、同一セグメント内にある終点ノード以外のノードである。
【００２１】
図１において、例えば、ノード１０が、自身の電波が到達する範囲外のノード１３と無線通信を行うとき、ノード１０は、自身からの電波が到達する範囲内のノード１１を中継ノードとして選択する。ノード１１は、自身を起点ノードとして、ノード１２を、中継ノードとして選択し、ノード１０は、これらの中継ノード（１１および１２）を介して、終点ノード（１３）と通信する。同図において、一点鎖線の円は、ノード１０の電波の到達範囲Ｅである。
【００２２】
図２を参照して、ノード１０の構成について説明する。同図は、ノード１０の構成を示すブロック図である。同図を参照すると、ノード１０は、距離算出部１０１、パラメータ取得部１０３、および選択部１０５を有する。
【００２３】
距離算出部１０１は、通信システム１における各ノード（１０、１１、１２、および１３等）の地理的な位置を取得する。例えば、各ノードがＧＰＳ（Global Positioning System）を利用して自身の位置を示す位置情報を取得し、取得した位置情報を相互に通知しあう。
【００２４】
そして、図３に示すように、距離算出部１０１は、始点ノード（１０）と終点ノード（Ｄ−１）との間の距離ｒ_ＳＥを算出し、ｒ_ＳＥが始点ノードの電波が到達する範囲の半径Ｒ以下であるか否かを判断する。ｒ_ＳＥがＲより大きいと、終点ノードが始点ノードの電波到達範囲外にあるので、データを中継する中継ノードを介しなければ、始点ノードは終点ノードと通信することができない。同図に示すように、ｒ_ＳＥがＲより大きければ、中継ノードを決定するために、距離算出部１０１は、半径Ｒ内の各隣接ノード（Ｎ−１、Ｎ−２）と終点ノード（Ｄ−１）との間の距離ｒ_ＲＥを算出する。これらの距離（Ｒ_ＲＥおよびＲ_ＳＥ）の単位は、例えば、メートルとする。
【００２５】
パラメータ取得部１０３は、終点ノード以外の各隣接ノードについて、通信量により変動するパラメータを取得する。例えば、パラメータとして各ノードに割り当てられたバッファのうち、使用中のバッファ数（使用中バッファ数）Ｂを求める。
【００２６】
選択部１０５は、始点ノード（１０）の電波が到達する範囲（半径Ｒ）内に終点ノードがないのであれば、半径Ｒ内の隣接ノードのうちのいずれかを終点ノードへ送信するデータを中継する中継ノードとして選択する。具体的には、選択部１０５は、半径Ｒ内の隣接ノードごとに、下記（１）式で示される選択関数Ｚを算出する。
【００２７】
Ｚ＝ｒ_ＲＥ−（ｒ_ＳＥ―Ｒ）＋ＡＶ／（ＭＡＸＢ＋１−Ｂ）・・・（１）
ここで、ｒ_ＲＥは、距離算出部１０１により算出された、隣接ノードと終点ノードとの間の地理的な距離（ｍ）を所定の基準値（例えば、１０ｍ）で除した値である。ｒ_ＳＥは、距離算出部１０１により算出された、始点ノード（１０）と終点ノードとの間の地理的な距離（ｍ）を所定の基準値で除した値である。
【００２８】
Ｒは、ノード１０の電波が到達する範囲の半径（ｍ）である。ＡＶは、パラメータ取得部１０３により取得された、隣接ノードの使用中バッファ数Ｂの平均値である。ＭＡＸＢは、隣接ノードが許容する最大のバッファ数（最大バッファ数）である。Ｂは、各隣接ノードの使用中バッファ数である。
【００２９】
ＭＡＸＢおよびＲの値は、予めノード１０のメモリ（不図示）内に記憶されている。
【００３０】
この選択関数Ｚは中継ノードを選択するための指標となる。このＺにおいて、地理的な距離と通信量とが指標を決める要素となる。いずれかの要素あるいは両方の要素に係数を乗算することにより、中継ノードの選択における各要素の寄与度を適切な比率に設定してもよい。例えば、通信量を重視する場合、通信量の寄与度が高くなるような重みづけをすればよい。
【００３１】
なお、通信量に基づくパラメータを使用するのであれば、使用中バッファ数の代わりに、バッファサイズや空いているバッファ数などを求め、（１）式を変形して選択関数Ｚを算出してもよい。
【００３２】
選択部１０５は、算出した選択関数Ｚが最小のノードを中継ノードとして選択する。但し、トラフィックの集中を避けるため、使用中バッファ数Ｂが、最大バッファ数ＭＡＸＢを超えるノード、つまり通信負荷の高いノードは除く。また、ループの発生を防ぐため、一度通ったノード、すなわち、中継ノードとして既に選択されたノードは除外する。
【００３３】
選択部１０５は、中継ノードとして選択したノードに、ノード情報１０５１を送信する。
【００３４】
図４は、ノード情報１０５１の構成の一例を示す図である。同図を参照すると、ノード情報１０５１は、「ノード識別番号」、「隣接ノード数」、「隣接ノード識別番号」、「選択関数」、「選択フラグ」を示す情報を含む。
【００３５】
「ノード識別番号」は、データの送信元のノードおよび中継ノードを識別するための番号である。「隣接ノード数」は、「ノード識別番号」の示すノードからの電波の到達範囲内にある隣接ノードの数である。「隣接ノード識別番号」は、隣接ノードを識別するための番号である。「選択関数」は、隣接ノードについて算出された選択関数Ｚの値である。「選択フラグ」は、中継ノードとして選択されたか否かを示すフラグであり、選択された場合「１」、選択されなかった場合「０」が設定される。
【００３６】
例えば、ノード１０によりノード１１が中継ノードとして選択し、ノード１１がノード１２を中継ノードとして選択したとき、ノード１１は、データの送信元のノード１０および中継ノード１１についての「ノード識別番号」等を示す情報を含むノード情報１０５１を、ノード１２に送信する。
【００３７】
選択部１０５は、中継ノードでない隣接ノードの使用中バッファ数ＢがいずれもＭＡＸＢを超える場合、すなわち、選択関数Ｚを算出した隣接ノードが１つもない場合、ノード情報１０５１を利用して中継ノードを選択する。具体的には、この場合、選択部１０５は、「ノード識別番号」の示すノードのうち、「隣接ノード数」が最大のノードを求める。そして、選択部１０５は、求めたノードを始点ノードとし、その始点ノードに対応する「選択フラグ」が「０」のノードのうち、「選択関数」が最小のノードを、始点ノードに対応する中継ノードとして選択する。
【００３８】
例えば、ノード１１により、ノード１２が中継ノードとして選択されたものの、ノード１２の半径Ｒ内の隣接ノードはいずれも、中継ノード１１を除き、使用バッファ数ＢがＭＡＸＢ以上であった場合、これらの隣接ノードについてＺは算出されない。この場合、ノード１２は、「ノード識別番号」が１０、１１のノードのうち、「隣接ノード数」が最大のノード１１を始点ノードとする。そして、ノード１２は、ノード１１の半径Ｒ内の「選択フラグ」が「０」の隣接ノードのうち、「選択関数」が最小のノード１２ａを、ノード１１に対応する中継ノードとして選択する。
【００３９】
ノード１０は、選択部１０５により選択された中継ノードを介して終点ノードとアドホックモードで通信を行う。
【００４０】
ノード１１、１２、および１３の構成は、ノード１０と同様である。
【００４１】
次に、図６〜図７を参照して、ノード１０の動作について説明する。図５は、ノード１０の実行する選択処理を示すフローチャートである。選択処理は、始点ノード（１０）から終点ノードへの経路を求める処理である。選択処理は、ノード１０の電源が投入されたときに開始する。
【００４２】
なお、ノード１０は、所定のアプリケーションが開始されたときや、始点ノードと終点ノードとが通信を行うときに、選択処理を開始してもよい。
【００４３】
選択処理において、ノード１０は、ノード情報（１０５１）を受信する（ステップＳ１）。ただし、ノード１０は、自身がデータの送信元のノードであれば、ステップＳ１を実行しない。距離算出部１０は、始点ノード（１０）と終点ノードとの間の地理的な距離ｒ_ＳＥを算出する（ステップ２）。距離算出部１０は、ｒ_ＳＥがＲ以下であるか否かを判断する（ステップ３）。ｒ_ＳＥがＲより大きければ、すなわち、終点ノードが電波の到達範囲になければ（ステップＳ３：ＮＯ）、距離算出部１０１は、半径Ｒ内の各隣接ノードと終点ノードとの間の地理的な距離ｒ_ＲＥを算出する（ステップＳ４）。そして、パラメータ取得部１０３は、半径Ｒ内の各隣接ノードの使用中バッファ数Ｂを取得する（ステップＳ５）。選択部１０５は、中継ノード決定処理を実行する（ステップＳ６）。ｒ_ＳＥがＲ以下である場合（ステップＳ３：ＹＥＳ）、またはステップＳ６の後、選択部１０５は、ノード情報１０５１において、選択した中継ノードの「選択フラグ」を「１」にして、その中継ノードに送信する（ステップＳ７）。ステップＳ７の後、ノード１０は、選択処理を終了する。
【００４４】
図６は、中継ノード決定処理を示すフローチャートである。選択部１０５は、半径Ｒ内の隣接ノードのいずれか１つを選択し、その隣接ノードの使用中バッファ数Ｂが、最大バッファ数ＭＡＸＢより大きい否かを判断する（ステップＳ６１）。ＢがＭＡＸＢ以下であれば（ステップＳ６１：ＮＯ）、隣接ノードが中継ノードとして選択されたか否か、即ち、始点ノードから終点ノードへの経路において一度通ったノードであるか否かを判断する（ステップＳ６２）。隣接ノードが一度通ったノードでなければ（ステップＳ６２：ＮＯ）、選択部１０５は、上記（１）式を使用して、その隣接ノードの選択関数Ｚを算出する（ステップＳ６３）。
【００４５】
隣接ノードのＢがＭＡＸＢより大きい場合（ステップＳ６１：ＹＥＳ）、隣接ノードが一度通ったノードである場合（ステップＳ６２：ＹＥＳ）、またはステップＳ６３の後、選択部１０５は、半径Ｒ内にある隣接ノードの全てについてステップＳ９１〜Ｓ９５の処理を行ったか否かを判断する（ステップＳ６４）。半径Ｒ内の隣接ノードの全てについて処理していない場合（ステップＳ６４：ＮＯ）、選択部１０５は、他の隣接ノードについてステップＳ９１〜Ｓ９５の処理を実行する。
【００４６】
半径Ｒ内の隣接ノードの全てについて処理したのであれば（ステップＳ６４：ＹＥＳ）、Ｚを算出したノードが1以上であるか否かを判断する（ステップＳ６５）。Ｚを算出したノードが１つもなかったのであれば（ステップＳ６５：ＮＯ）、選択部１０５は、例外処理を実行する（ステップＳ６６）。
【００４７】
Ｚを算出したノードが1以上である場合（ステップＳ６５：ＹＥＳ）、選択部１０５は、Ｚを算出した隣接ノードのうち、Ｚが最小のノードを中継ノードとして選択する（ステップＳ６７）。ステップＳ６６またはステップＳ６７の後、選択部１０５は、中継ノード決定処理を終了する。
【００４８】
図７は、例外処理を示すフローチャートである。同図を参照すると、選択部１０５は、ノード情報１０５１の示すノード、即ちデータの送信元のノードまたは中継ノードのうち、そのノードの半径Ｒ内の隣接ノード数が最大のノードを求め、求めたノードを始点ノードとする（ステップＳ６６１）。選択部１０５は、ノード情報１０５１において、始点ノードに対応する隣接ノードのうち、選択フラグが「０」で、且つ、「選択関数」が算出されたノードがあるか否かを判断する（ステップＳ６６２）。
【００４９】
選択フラグが「０」で、且つ、「選択関数」が算出されたノードがあれば（ステップＳ６６２：ＹＥＳ）、選択部１０５は、「選択フラグ」が「０」の隣接ノードのうち、「選択関数」が最小のノードを、始点ノードに対応する中継ノードとして選択する（ステップＳ６６３）。ステップＳ６６３の後、選択部１０５は、例外処理を終了する。
【００５０】
選択フラグが「０」で、且つ、「選択関数」が算出されたノードがなければ（ステップＳ６６２：ＮＯ）、選択部１０５は、残りのノードのうち、隣接ノード数が最大のノード、すなわち、次に隣接ノード数が大きいノードを始点ノードとし（ステップＳ６６４）、ステップＳ６６２に戻る。
【００５１】
なお、ステップＳ６６２において、ステップＳ６６１において、半径Ｒ内の隣接ノード数が最大のノードを求めているが、選択部１０５は、隣接ノード数にかかわりなく、直前に選択された中継ノードを始点ノードとしてもよい。この場合、直前の隣接ノードにおいて、２番目に小さな選択関数が算出された隣接ノードが、中継ノードとして選択される。
【００５２】
また、ステップＳ６６２において、選択部１０５は、ノード情報１０５１から既に算出された「選択関数」を読み出す構成としているが、再度、各ノードの使用中バッファ数Ｂを取得し、各隣接ノードの選択関数Ｚを算出しなおす構成としてもよい。
【００５３】
また、ノード情報１０５１において、Ｚを算出したノードが１つもない場合、選択部１０５は、（１）式を使用しないで中継ノードを選択してもよい。この場合、選択部１０５は、例えば、Ｇｒｅｅｄｙ方式を使用して、中継ノードを使用してもよいし、単に使用中バッファ数Ｂが最小のノードを選択してもよい。
【００５４】
続いて、図８および図９を参照して、ノード１０による選択処理の動作結果について説明する。
【００５５】
図８は、通信システム１における各ノードの位置および使用中バッファ数の一例を示した図である。同図を参照すると、通信システム１は、ノード１０、Ｎ−１、Ｎ−２、Ｎ−３、Ｎ−４、およびＤ−１を有する。このうち、ノード１０がノードＤ−１と無線通信を行う場合について考える。
【００５６】
ノード１０にとって、同一セグメント内にある終点ノード以外のノードＮ−１、Ｎ−２、Ｎ−３、Ｎ−４は隣接ノードである。ノード１０が最終的なデータの送信先とするノードＤ−１は終点ノードである。
【００５７】
ノード１０は、自身と終点ノードＤ−１との距離であるｒ_ＳＥを算出する（ステップＳ１）。ｒ_ＳＥは１００ｍと算出され、ノード１０の電波の到達範囲Ｒは８０ｍである。ｒ_ＳＥがＲより大きいので（ステップＳ３：ＮＯ）、ノード１０は、半径Ｒ内の各隣接ノードＮ−２、Ｎ−３、およびＮ−４について、隣接ノードと終点ノードとの間の距離ｒ_ＲＥを算出する（ステップＳ４）。隣接ノードＮ−１は、ノード１０の半径Ｒ内にないので、中継ノードの選択対象から除かれる。
【００５８】
そして、ノード１０は、半径Ｒ内の各隣接ノードＮ−２、Ｎ−３、およびＮ−４について、使用中バッファ数Ｂを求める（ステップＳ５）。ここで、ノードＮ−２、Ｎ−３、およびＮ−４のそれぞれのＢは、５、２２、および１０である。
【００５９】
ノード１０は、ＢがＭＡＸＢ以下であり（ステップＳ６１：ＮＯ）、一度通ったノードでない（ステップＳ６２：ＮＯ）、半径Ｒ内の隣接ノードのそれぞれについて選択関数Ｚを算出する（ステップＳ６３）。最大バッファ数ＭＡＸＢは２１であり、隣接ノードＮ−３のＢは２２でＭＡＸＢより大きいので、ノード１０は、隣接ノードＮ−３を除き、Ｎ−２およびＮ−４についてＺを算出する。
【００６０】
隣接ノードＮ−２およびＮ−４のｒ_ＲＥは、それぞれ８０ｍおよび６０ｍであり、Ｂは、それぞれ５および１０である。また、基準値Ｓは１０ｍである。（１）式に、これらの値を代入することにより、ノード１０は、隣接ノードＮ−２およびＮ−４のＺとして、１１および１４を算出する（ステップＳ６３）。そして、ノード１０は、Ｚが最小の隣接ノードＮ−２を中継ノードとして選択する（ステップＳ６７）。図６において、斜線部分は、選択されたノードである。
【００６１】
このように、ノード１０は、Ｚを算出して、終点ノードまでの距離ｒ_ＲＥが比較的遠く、且つ、使用中バッファ数Ｂが比較的小さいノードを選択する。このため、ノード１０は、終点ノードまでの距離が遠すぎるノードを選択しないので、中継ノード数が少なくなり、通信が安定する。また、ノード１０は、通信量が大きすぎるノードを選択しないので、輻輳が緩和される。
【００６２】
これに対して、（１）式を使用せずに、単にｒ_ＲＥが小さいノードを選択するＧｒｅｅｄｙ方式を用いる場合、中継ノードとしてノードＮ−４がノード１０により選択される。しかし、ノードＮ−４の使用中バッファ数Ｂは、ノードＮ−２よりも多いので、Ｎ−４を中継ノードとすると、輻輳が生じやすくなることがある。
【００６３】
また、（１）式を使用せずに、単にＢの小さいノードを選択する方法を使用すると、終点ノードから地理的に遠いノードが選択され、中継ノード数が多くなる結果、輻輳が生じやすくなることがある。
【００６４】
図９は、Ｇｒｅｅｄｙ方式と（１）式を使用する方式とを比較した結果を示す図である。詳細には、同図は、一辺が１０００ｍの正方形の空間内においてノードを１０００個、各ノードの電波の到達距離Ｒを２００ｍ、基準値Ｓを１０ｍとし、これらのノードについてランダムに始点ノードと終点ノードを３０００回選択し、それぞれの方式で中継ノードを選択して通信したときの、１０００個のノードそれぞれの使用中バッファ数Ｂをシミュレートした結果である。同図の縦軸は、使用中バッファ数Ｂ、横軸はノードそれぞれに付されたノード識別番号である。同図の実線は、（１）式を使用した場合の折れ線グラフであり、点線は、Ｇｒｅｅｄｙ方式を使用した場合の折れ線グラフである。また、最大バッファ数ＭＡＸＢは２１である。
【００６５】
図９を参照すると、Ｇｒｅｅｄｙ方式を使用した場合は、Ｂが最大バッファ数ＭＡＸＢに達するノードが全体の約５％に達しており、輻輳が生じていることが確認できる。一方、（１）式を使用した場合はＢがＭＡＸＢに達するノードはなく、輻輳が緩和されていることが確認できる。
【００６６】
以上説明したように、本実施形態によれば、隣接ノードと終点ノードとの間の地理的な距離ｒ_ＲＥと、使用中バッファ数Ｂとに基づいて、具体的には、これらの値の和が最小のノードを中継ノードとして選択するので、終点ノードまでの地理的な距離が遠すぎたり、通信量が多すぎるノードを中継して各ノードが通信することがなくなる結果、アドホックネットワークにおいて輻輳が緩和される。
【００６７】
また、ノード１０、通信量に応じて変動するパラメータとして、使用中バッファ数を取得する。輻輳はノードがバッファ数を使いきったときに発生するので、使用中バッファ数が比較的低いノードを中継することにより、輻輳を緩和することができる。
【００６８】
ノード１０は、使用中バッファ数Ｂが最大バッファ数ＭＡＸＢに満たないノードを選択するので、輻輳が生じているノードを誤って選択することがなく、輻輳を確実に緩和できる。
【００６９】
そして、ノード１０は、一度通ったノードを中継ノードとして選択しないので、ループが生じることがなくなる。
【００７０】
Ｚが算出された隣接ノードが１つもなければ、選択部１０５は、ノード情報１０５１において、「隣接ノード数」が最大のノードを始点ノードとして、その始点ノードに対応する隣接ノードのうち、「選択フラグ」が「０」で、「選択関数」が最小のノードを中継ノードとして選択する。このため、隣接ノードの使用中バッファ数ＢがいずれもＭＡＸＢ以上で、Ｚが算出されない場合でも、選択部１０５は、ノード情報１０５１を使用して中継ノードを選択することができる。
【００７１】
（第２の実施形態）
本発明の第２の実施形態について、図１０を参照して説明する。本実施形態のノード１０の構成は、第１の実施形態の構成と同様である。同図は、本実施形態の選択処理を示すフローチャートである。
【００７２】
図１０を参照すると、本実施形態の選択処理は、ステップＳ５の代わりに、パラメータ算出部１０３がパラメータとして各ノードの単位時間当たりの受信データ量（通信負荷）を求める、ステップＳ５ａを実行する。本実施形態のノード１０は、通信量に応じて変動するパラメータとして通信負荷を求める点で、第１の実施形態と異なる。
【００７３】
そして、選択部１０５は、（１）式において、バッファ数Ｂ、最大バッファ数ＭＡＸＢの代わりに、通信負荷および許容される最大の通信負荷を代入してＺを算出する。
【００７４】
通信負荷の増大によっても輻輳が生じうるので、本実施形態によれば、通信負荷が比較的低いノードを中継することでノード１０は輻輳を緩和することができる。
【００７５】
なお、ノード１０は通信量に応じて変動するパラメータであれば、通信量自体を求めてもよいし、他のパラメータを（１）式に使用してもよい。ノード１０は、通信量に応じて変動する、複数の種類のパラメータを組み合わせて選択関数Ｚを算出してもよい。
【００７６】
また、選択関数Ｚは、（１）式に限らず、隣接ノードと終点ノードとの距離が比較的大きく、且つ、通信量が比較的小さなノードを選択できるものであれば、他の式を使用して算出してもよい。例えば、選択部１０５は、それぞれの隣接ノードについて、隣接ノードから終点ノードまでの距離（ｒ_ＲＥ）と、通信量に基づくパラメータ（Ｂ）との積を、求め、その値が最小のノードを中間ノードとして選択してもよい。
【００７７】
図５〜図７、および図１０に示したフローチャートの一部または全部の処理はコンピュータプログラムの実行により実現することもできる。
【符号の説明】
【００７８】
１    通信システム
１０、１１、１２、１３    ノード
１０１    距離算出部
１０３    パラメータ取得部
１０５    選択部
Ｂ    使用中バッファ数
Ｅ  電波到達範囲
Ｄ−１    終点ノード
Ｎ−１、Ｎ−２、Ｎ−３、Ｎ−４    隣接ノード
Ｒ    半径
ｒ_ＳＥ、ｒ_ＲＥ    距離
Ｓ１〜Ｓ９、Ｓ９１〜Ｓ９９、Ｓ７ａ    ステップ
【図１】
0005545342.tif 000002
【図２】
0005545342.tif 000003
【図３】
0005545342.tif 000004
【図４】
0005545342.tif 000005
【図５】
0005545342.tif 000006
【図６】
0005545342.tif 000007
【図７】
0005545342.tif 000008
【図８】
0005545342.tif 000009
【図９】
0005545342.tif 000010
【図１０】
0005545342.tif 000011