経路問題
提供: Internet Web School
目次 |
有向グラフ
有向グラフは,ここではUNIQ102338cc2fdd4986-MathJax-165-QINUで表すが,コンピュータや,ネットワークにもよく使われる。有向グラフUNIQ102338cc2fdd4986-MathJax-166-QINUは
(1) 節点の集合UNIQ102338cc2fdd4986-MathJax-167-QINU
(2) UNIQ102338cc2fdd4986-MathJax-168-QINUの点の順序対UNIQ102338cc2fdd4986-MathJax-169-QINUの集合UNIQ102338cc2fdd4986-MathJax-170-QINU
からなる.
UNIQ102338cc2fdd4986-MathJax-171-QINUのときUNIQ102338cc2fdd4986-MathJax-172-QINUである.
また
UNIQ102338cc2fdd4986-MathJax-173-QINU
UNIQ102338cc2fdd4986-MathJax-174-QINUはUNIQ102338cc2fdd4986-MathJax-175-QINUの自乗直積 UNIQ102338cc2fdd4986-MathJax-176-QINU の部分集合である. すなわち,
UNIQ102338cc2fdd4986-MathJax-177-QINU
順序対UNIQ102338cc2fdd4986-MathJax-178-QINUは向きのついた枝,あるいは弧と呼ばれ,
のように表すことができる。UNIQ102338cc2fdd4986-MathJax-179-QINUは始点,UNIQ102338cc2fdd4986-MathJax-180-QINUは終点と呼ばれる。 このような枝のまたは弧の図をつなぎ合わせば,有向グラフ UNIQ102338cc2fdd4986-MathJax-181-QINUを平面図で表すことができる。
UNIQ102338cc2fdd4986-MathJax-182-QINU
ラベル
有向グラフUNIQ102338cc2fdd4986-MathJax-183-QINUの弧には,長さや,所要時間などのデータでラベル付けされているとき UNIQ102338cc2fdd4986-MathJax-184-QINUをラベル付き有向グラフといいます。
路
節点の多重対 UNIQ102338cc2fdd4986-MathJax-185-QINUで,各UNIQ102338cc2fdd4986-MathJax-186-QINUがUNIQ102338cc2fdd4986-MathJax-187-QINU の元,すなわち弧であるものを 路といいます。
上の図では,UNIQ102338cc2fdd4986-MathJax-188-QINUなどが路である.
最短路問題
UNIQ102338cc2fdd4986-MathJax-189-QINUをラベル付き有向グラフとする。ただし,
のUNIQ102338cc2fdd4986-MathJax-190-QINUのように「閉じた路」は含まないものとする。
さて,簡単にするため、集合UNIQ102338cc2fdd4986-MathJax-191-QINUがUNIQ102338cc2fdd4986-MathJax-192-QINU個の節点からなっているとして
UNIQ102338cc2fdd4986-MathJax-193-QINUとし,夫々の弧に付けられている,ラベルはその弧の長さを 表すものとしておく。
弧をつなぎ合わせて作られる路の長さは,それを構成している弧の長さの和で 表します。例えば(図5)で路UNIQ102338cc2fdd4986-MathJax-194-QINUの長さは,UNIQ102338cc2fdd4986-MathJax-195-QINUでUNIQ102338cc2fdd4986-MathJax-196-QINUである.
節点1から出発して,節点nへ行くための長さ最小の路をどう求めるかという問題を考えます。(図5.5)の例では,路(1,2,5,6)が解で,長さUNIQ102338cc2fdd4986-MathJax-197-QINUである.
UNIQ102338cc2fdd4986-MathJax-198-QINUの点の数が少なければ,路を全て調べてみるのも一つの方法であるが,数が多くなると 実用的ではない。
D.P.(ダイナミック・プログラミング)と最短路
D.P.の原理
節点UNIQ102338cc2fdd4986-MathJax-199-QINUから節点UNIQ102338cc2fdd4986-MathJax-200-QINUへの最短路が与えられたとする。その路が途中に節点UNIQ102338cc2fdd4986-MathJax-201-QINUを経由しているとすると, その経路のUNIQ102338cc2fdd4986-MathJax-202-QINUからUNIQ102338cc2fdd4986-MathJax-203-QINUへの部分の路も,やはりUNIQ102338cc2fdd4986-MathJax-204-QINUからUNIQ102338cc2fdd4986-MathJax-205-QINUへの最短経路になっている.
実際,UNIQ102338cc2fdd4986-MathJax-206-QINUからUNIQ102338cc2fdd4986-MathJax-207-QINUへの別の最短路があったとすると,例えば,(図6)の 節点UNIQ102338cc2fdd4986-MathJax-208-QINUを経由して,UNIQ102338cc2fdd4986-MathJax-209-QINUに行く路がそうであったとすると
UNIQ102338cc2fdd4986-MathJax-210-QINU
となり,これから
UNIQ102338cc2fdd4986-MathJax-211-QINU
であるから,路UNIQ102338cc2fdd4986-MathJax-212-QINUが最短路UNIQ102338cc2fdd4986-MathJax-213-QINUより短くなってしまい, 路UNIQ102338cc2fdd4986-MathJax-214-QINUが最短であることに矛盾する.
結局, 「全体が最短(最適)ならその部分も最短(最適)」 である.
このような,性質を体系的に扱った最適化法の研究がベルマンによってなされた.
ベルマンのUNIQ102338cc2fdd4986-MathJax-215-QINU(ダイナミック・プログラミング)とか最適性の原理と呼ばれている.
再帰的な計算法
最適性の原理を使うと,例えば,接点UNIQ102338cc2fdd4986-MathJax-216-QINUからUNIQ102338cc2fdd4986-MathJax-217-QINUまでの路が存在するとして,その中の 最短路UNIQ102338cc2fdd4986-MathJax-218-QINUの長さをUNIQ102338cc2fdd4986-MathJax-219-QINUで表すと
UNIQ102338cc2fdd4986-MathJax-220-QINUからUNIQ102338cc2fdd4986-MathJax-221-QINUまでの弧UNIQ102338cc2fdd4986-MathJax-222-QINUが存在しない場合はUNIQ102338cc2fdd4986-MathJax-223-QINU としておき,
UNIQ102338cc2fdd4986-MathJax-224-QINU
UNIQ102338cc2fdd4986-MathJax-225-QINU
という「再帰的」な定義ができる。
ここで,UNIQ102338cc2fdd4986-MathJax-226-QINUとする。
これは,節点UNIQ102338cc2fdd4986-MathJax-227-QINUからの弧UNIQ102338cc2fdd4986-MathJax-228-QINUが存在する節点UNIQ102338cc2fdd4986-MathJax-229-QINUについて,
節点UNIQ102338cc2fdd4986-MathJax-230-QINUから節点UNIQ102338cc2fdd4986-MathJax-231-QINU までの最短の長さUNIQ102338cc2fdd4986-MathJax-232-QINUをもつ路UNIQ102338cc2fdd4986-MathJax-233-QINUと 長さUNIQ102338cc2fdd4986-MathJax-234-QINUの弧UNIQ102338cc2fdd4986-MathJax-235-QINU をつなげた路UNIQ102338cc2fdd4986-MathJax-236-QINU の長さ
UNIQ102338cc2fdd4986-MathJax-237-QINU
のうち,最短のものがUNIQ102338cc2fdd4986-MathJax-238-QINUであるという意味である.
に適用すると
UNIQ102338cc2fdd4986-MathJax-239-QINU
Dijkstraの方法
DPの原理を使った効率的な方法として,Dijkstraの方法が知られている. Dijkstraのアルゴリズム (Wikipedia)
準備 UNIQ102338cc2fdd4986-MathJax-240-QINU
手順1 UNIQ102338cc2fdd4986-MathJax-241-QINU
UNIQ102338cc2fdd4986-MathJax-242-QINU
手順2 UNIQ102338cc2fdd4986-MathJax-243-QINU
UNIQ102338cc2fdd4986-MathJax-244-QINUがUNIQ102338cc2fdd4986-MathJax-245-QINUの元で,かつ,UNIQ102338cc2fdd4986-MathJax-246-QINUがUNIQ102338cc2fdd4986-MathJax-247-QINU の要素となる全てのUNIQ102338cc2fdd4986-MathJax-248-QINU に対して以下の手続き[]を繰り返す。
[もしUNIQ102338cc2fdd4986-MathJax-249-QINU ならば UNIQ102338cc2fdd4986-MathJax-250-QINU そうでなければ何もしない.]
手順1にもどる。
このアルゴリズムの終了時には,
UNIQ102338cc2fdd4986-MathJax-251-QINUには節点UNIQ102338cc2fdd4986-MathJax-252-QINUから節点UNIQ102338cc2fdd4986-MathJax-253-QINUへの最短の長さ, UNIQ102338cc2fdd4986-MathJax-254-QINUには節点UNIQ102338cc2fdd4986-MathJax-255-QINUから節点UNIQ102338cc2fdd4986-MathJax-256-QINUへの最短路で,節点UNIQ102338cc2fdd4986-MathJax-257-QINUの直前の節点の番号
が書き込まれている.
以下このDijkstraの方法を図5の例に適用してみる.
図5.5は、
UNIQ102338cc2fdd4986-MathJax-258-QINU
準備 UNIQ102338cc2fdd4986-MathJax-259-QINU
UNIQ102338cc2fdd4986-MathJax-260-QINU を999として
UNIQ102338cc2fdd4986-MathJax-261-QINU
手順1(1回目) UNIQ102338cc2fdd4986-MathJax-262-QINU
となり、m=1を選ぶ。
手順2(1回目) UNIQ102338cc2fdd4986-MathJax-263-QINU
手順1(2回目) UNIQ102338cc2fdd4986-MathJax-264-QINU
となり、UNIQ102338cc2fdd4986-MathJax-265-QINUを選ぶ。
手順2(2回目) UNIQ102338cc2fdd4986-MathJax-266-QINU
手順1(3回目) UNIQ102338cc2fdd4986-MathJax-267-QINU
手順2(3回目) UNIQ102338cc2fdd4986-MathJax-268-QINU
手順1(4回目) UNIQ102338cc2fdd4986-MathJax-269-QINU
となり、UNIQ102338cc2fdd4986-MathJax-270-QINUを選ぶ。
手順2(4回目) UNIQ102338cc2fdd4986-MathJax-271-QINU
手順1(5回目) UNIQ102338cc2fdd4986-MathJax-272-QINU
となりUNIQ102338cc2fdd4986-MathJax-273-QINUを選ぶ。
手順2(5回目) UNIQ102338cc2fdd4986-MathJax-274-QINU
手順1(6回目) UNIQ102338cc2fdd4986-MathJax-275-QINU
となり、UNIQ102338cc2fdd4986-MathJax-276-QINUを選ぶ。
手順2(6回目) UNIQ102338cc2fdd4986-MathJax-277-QINU
手順1(7回目) UNIQ102338cc2fdd4986-MathJax-278-QINUなのでUNIQ102338cc2fdd4986-MathJax-279-QINUとなり終了
節点1から節点UNIQ102338cc2fdd4986-MathJax-280-QINUへの最短の長さ UNIQ102338cc2fdd4986-MathJax-281-QINU 節点1から節点6への最短路で節点6の直前の節点の番号 UNIQ102338cc2fdd4986-MathJax-282-QINU
無向グラフ
最短路問題ではラベル付き有向グラフを扱ったが,ここでは,弧で結ばれている節点間は, 双方向に行き来できるものとする。
従って,図示した場合も始点,終点といった「向き」はない。 このようなグラフUNIQ102338cc2fdd4986-MathJax-283-QINUは無向グラフと呼ばれる。これは UNIQ102338cc2fdd4986-MathJax-284-QINU
からなる。
UNIQ102338cc2fdd4986-MathJax-285-QINUである.
この非順序対\{a,b\}も弧と呼ぶことにする。有向グラフのような始点,終点はない.
のように表すことができる。有向グラフと同様に枝のまたは弧の図をつなぎ合わせば,
グラフUNIQ102338cc2fdd4986-MathJax-286-QINUを平面図で表すことができる。
(図5.8)
UNIQ102338cc2fdd4986-MathJax-287-QINU
ラベル
有向グラフと全く同様に無向グラフG=(P,V)の弧にも,長さや,所要時間などのデータでラベル付け することができる。
(図5.9)
路
有向グラフと同様に節点の多重対 UNIQ102338cc2fdd4986-MathJax-288-QINUで,各UNIQ102338cc2fdd4986-MathJax-289-QINU がUNIQ102338cc2fdd4986-MathJax-290-QINUの元,すなわち弧であるものを 路と呼ぶことにする。
上の図では,UNIQ102338cc2fdd4986-MathJax-291-QINUなどが路である.
巡回セールスマン問題
さて,簡単にするため,集合UNIQ102338cc2fdd4986-MathJax-292-QINUがUNIQ102338cc2fdd4986-MathJax-293-QINU個の節点からなっているとして
UNIQ102338cc2fdd4986-MathJax-294-QINUとし,夫々の弧に付けられている,ラベルはその弧を移動する 費用は表すものとしておく。
弧をつなぎ合わせて作られる路を移動する費用は,それを構成している弧の費用の和で 表します。上の図で路UNIQ102338cc2fdd4986-MathJax-295-QINUの費用は,20+20+40で80である.
巡回セールスマン問題は,各節点を,例えば都市に,費用を運賃として,都市1を出発して各都市UNIQ102338cc2fdd4986-MathJax-296-QINUを巡回(1回だけ訪れて)して, 再び都市1に戻ってくる,路の内費用最少の ものを求めるといった問題である.
(図5)の例では,路UNIQ102338cc2fdd4986-MathJax-297-QINUとUNIQ102338cc2fdd4986-MathJax-298-QINUが解で,費用が130である.
可能な路を全てを調べても,1番目の都市3通りUNIQ102338cc2fdd4986-MathJax-299-QINU2番目の都市2通りUNIQ102338cc2fdd4986-MathJax-300-QINU3番目の都市1通り=3!通りで順序を 逆に回っても同じであるから2で割って,結局3!/2通りである.しかし,都市の数が増えると非常に難しくなる。
D.P.の適用
有グラフ最短路問題と同様に最適性の原理を使って組織的に調べることができる。
例えば,都市UNIQ102338cc2fdd4986-MathJax-301-QINUを出発して,UNIQ102338cc2fdd4986-MathJax-302-QINUを巡回して,
最後に都市UNIQ102338cc2fdd4986-MathJax-303-QINUを訪れるまでの最小費用をUNIQ102338cc2fdd4986-MathJax-304-QINUで表すと, その最小になる路を通ってさらに都市UNIQ102338cc2fdd4986-MathJax-305-QINUに戻ってくるまでの費用は
UNIQ102338cc2fdd4986-MathJax-306-QINU
である.全く同様に,費用最少で,UNIQ102338cc2fdd4986-MathJax-307-QINUを巡回後,都市3を訪れ,都市UNIQ102338cc2fdd4986-MathJax-308-QINU に戻る費用は
UNIQ102338cc2fdd4986-MathJax-309-QINU
UNIQ102338cc2fdd4986-MathJax-310-QINUを巡回して,最後に都市4を訪れ,都市1に戻る費用は
UNIQ102338cc2fdd4986-MathJax-311-QINU
である. 結局,最小の費用は
UNIQ102338cc2fdd4986-MathJax-312-QINU
であり,その最少費用を実現する路が求めるものである.
有グラフの場合と同様にUNIQ102338cc2fdd4986-MathJax-313-QINUも再帰的に, 都市1を出発して,UNIQ102338cc2fdd4986-MathJax-314-QINUを巡回して,最後に都市2を訪れるまでの 最小費用であるから
都市1を出発して,UNIQ102338cc2fdd4986-MathJax-315-QINUを巡回して都市3を訪れ,ついで都市2を訪れる費用
UNIQ102338cc2fdd4986-MathJax-316-QINU
都市1を出発して,UNIQ102338cc2fdd4986-MathJax-317-QINUを巡回して都市4を訪れ,ついで都市2を訪れる費用
UNIQ102338cc2fdd4986-MathJax-318-QINU
のうち何れか小さい方:
UNIQ102338cc2fdd4986-MathJax-319-QINU
で求められる。
さらに,
UNIQ102338cc2fdd4986-MathJax-320-QINUは路UNIQ102338cc2fdd4986-MathJax-321-QINUの費用であるからUNIQ102338cc2fdd4986-MathJax-322-QINU
UNIQ102338cc2fdd4986-MathJax-323-QINUは路UNIQ102338cc2fdd4986-MathJax-324-QINUの費用であるからUNIQ102338cc2fdd4986-MathJax-325-QINU
である.
結局,最小の費用は以下の再帰的な計算により求めることができる。
UNIQ102338cc2fdd4986-MathJax-326-QINU
しかしながら,この方法は組織的ではあるが,「全件探索」(全ての可能な候補を全て当たる) であり,都市の数が10~20ぐらいまでが限界である.
分岐限定法
ここで扱っている,巡回セールスマン問題には,解法の「決定打」はない。 問題の難しさを表す場合によく出てくる「NP困難問題」の一つである. 種々な方法が考案されている。「分岐限定法」もその一つである.