探索アルゴリズム 1

情報工学実験 II
探索アルゴリズム
担当教員 : 當間愛晃
メンバー
大城 健太 (065712D)
金城 裕 (065725F)
仲栄真 言祈 (065744B)
山内 遼史 (065760D)
実験日11月16日
提出日11月26日
締切日11月26日
1
Level1
1.1
Level1.1:コンピュータと人間の違いを述べよ
• コンピュータが人間より得意とするものは何だろうか?逆に人間より不得手のモノは?
注記:レポートでは, 各々2 つ以上を列挙して説明する事。
・コンピュータが人間より得意とするものは、計算処理能力、記憶能力、検索能力、繰り返し処理を行う能力などが挙
げられる。コンピュータは、単純な計算や複雑な計算が得意であり、計算ミスなどの失敗がなくて計算を高速に行うこ
とができる。また、大量のデータを保存したり、そのデータをそのままコピーすることができる。次に、コンピュータ
は大量のデータ・情報から目的のデータ・情報を高速に見つけることができる。そして、上記の作業を何回も繰り返し
ても、人間と違って飽きたり疲れたりすることがない。これらのことから、上記であげた能力はコンピュータが人間よ
り得意とするものといえる。
逆にコンピュータが人間より不得手とするものは、そのコンピュータに定義していないことを処理しようとしたり、あ
やふやなデータに対する判断などが挙げられる。具体的に言えば、人間の知覚や感覚などから判断することが挙げられ
る。例えば、画像に何が描かれているのかを認識したり、角度などが違っているが写真の対象が同じだった際に同じも
のと判断できるか、などである。コンピュータはあらかじめ人間によって定義されたものを処理しているため、それ以
外のことに対する処理は苦手と言える。
2
Level1.2:具体事例をお挙げ、「探索」という観点から考察せよ。
• 具体事例:駐車場の空きスペースを探索
• 入力:階層、お店のジャンル
• 内部モデル:赤外線センサー、探索システム
• 出力:モニターに駐車場の空きスペースを表示
問題:今日のデパートなどの駐車場は、満車・空車などの情報を表示して利用者に知らせている。この表示では、満車
か空車なのかしか判断することができず、混雑している場合は、空きスペースを見つけるのは難しい。もし、見つけた
としても他の人に先に駐車されたりすることもある。その空きスペースの競争で事故に繋がることもある。そこで、空
きスペースをコンピュータで探索できるようにし、その場所を予約して確保できるシステムを考えてみた。このシステ
ムは、人間の目では見つけることが難しい空きスペースをコンピュータが得意とする探索能力を使って見つけている。
提案:駐車場の空きスペースを探索し、目的の場所をパソコン等のディスプレイに表示することを提案する。何階の駐
車場が良いか、行きたい店の入り口付近の空きスペースなどの希望する場所を探索できるようにする。探索して表示し
た場所を、タッチパネルなどで予約できるようにし、その空きスペースを確保する。また、有料駐車場の場合は、Edy な
どを使って支払うようにする。これらを行うことにより、広い駐車場や見通しの悪い駐車場でも簡単に空きスペースを
見つけることができ、スムーズに駐車できる。このシステムを実現するには、各駐車場に赤外線センサーや超音波の送
受信機などを設置することにより車の有無を確認し、その情報をパソコン等のコンピュータで管理し、ディスプレイに
表示する。
3
Level 3.1 : y = x*sin(x) with steps
・これは偶関数なので全探索する必要はない。x が正のときの y の最小値を求めればよく、全探索の半分の時間で済む。
探索の手続き
x を 0 から 10 まで全探索させる。
この作業により、y の最小値が求まる。
4
Level 3.2 : ナップザック問題
考え方
N 個の品物の重さを p1、p2、p3、
・
・
・、pN とする。
ナップザックの再大容量を M とする。
{p1、p2、p3、
・
・
・、pN}の各部分集合に対して、その部分集合の和と M との差を計算する。
このとき、M との差が非負で最小になる部分集合が解となる。
N 個それぞれに、ナップザックに格納する、しないを判断するので、集合は 2 の N 乗個の部分集合をもつ。従って問題空
間サイズは 2 の N 乗となり、計算時間は 2 の N 乗に比例する。
この問題の完璧な最適化を行うには全探索をする必要があるが、N の数が増えると問題空間サイズが指数関数的に増え
る。
上に述べたようにすると、問題空間サイズがかなり大きくなるので (N が 15 のときで 32768)、0.1kg あたりの品物の値
段で格納順を決める。
アルゴリズム
1:0.1kg 当たりの品物の値段が高い順に並べる。
2:品物を格納する。
3:格納後、最大積載量に満たない場合、次の品物を準備。
4:重さが最大積載量を満たすまで、2∼3 を繰り返す。
この方法だと、すでに値段順に並べてあるので、格納する品物の組み合わせは考えなくてよい。
品物を順番に格納していき、最大容量を超える手前では「商品を格納しない」を選択すればいいので、問題空間サイズ
は最大で N となる。
計算時間は速くなるが、値段のみに着目していて重量をあまり考えておらず、最適解は求められない。
問題空間サイズが 20 のとき、最適解に近い解を求めるのに 0.1 秒かかる計算機を用いると下表のようになる。
品物数 N
問題空間サイズ
実行計算時間
20
40
20
40
0.1
0.2
100
1000
100
1000
0.5
5.0
値段順に並べなかった場合の問題空間サイズのグラフ
値段順に並べた場合の問題空間サイズのグラフ
5
Level 3.3 : 巡回セールスマン問題
都市数が 3 の時、解 x は 123(都市 1 →都市 2 →都市 3)、213(都市 2 →都市 1 →都市 3) という表現で表す事ができ、
全部で 6 通りある。これは要素の数の階乗であり、要素の数が N 個のとき問題空間サイズは N!で表される。
巡回セールスマン問題は、問題を解く"有効な"アルゴリズムは知られていない問題の一つである。しかし、この問題に
対する"良い結果"を与える単純なアルゴリズムはよく知られていて、次の方法が考えられる。
1. スタート地点を任意に決定する。
2. 一番近い都市に行く。
3. 移動した都市を新たなスタート地点とし、訪問済みとする。
4. 全部の都市を訪問するまで 2∼3 の動作を繰り返す。
この方法を最近傍法といい、現在の都市からまだ行っていない都市への距離を計算し、 最も近い都市へ移動するという
ことを繰り返す。
全探索に比べると計算量はだいぶ少なくなるが、一番近い都市に移動したあと、そこから一番近い都市へ移動したとき、
その合計が小さくならなくなり、結果として遠回りになってしまい最適解としてふさわしくない場合がある。
問題空間サイズが 100 のとき、実行計算時間に 0.1 秒かかる計算機を用いた場合、計算時間は下表のようになる。
都市の数
問題空間サイズ
実行計算時間 (秒)
5
6
120
720
0.12
0.72
7
8
5040
40320
5.04
40.32
問題空間サイズのグラフ
フローチャート
6
Level X
Level 3.1 において、定義域を自分で設定できた場合、最小値を求める方法を考えようとしたが途中で断念。
失敗作その1
この関数は sin(x) を元にしているので、グラフを見れば分かる通り、x=0、3 π/2、7 π/2、
・
・
・ごとに極小値をとる。
従って、x の定義域が与えられているとき、x が 0 または 3 π/2 + 2n πに一番近い値のとき、y は極小値に近く、最小
値の候補となる。
これは偶関数なので全探索する必要はない。x が正のとき、y の最小値を求めればよい。
まず、定義域の範囲内で x の最大値を選ぶ。
それから 0、または 3 π/2 + 2n πの倍数に一番近い値に移動する。このとき移動する候補は、x より大きいときと小さ
いときの両方があるが、より y が小さい方に移動する。
そのとき y の両隣を比較し、y の値より大きければ、そこが最小値となる。小さければ小さい値の方へ移動する。
x の極小地の数が N のとき、 問題空間サイズは N となるが、極小値の数を求める手段がわからなかった。x の最大値を
3 π/2 で割ればだいたいの数はわかるが、正確ではない。
失敗作その 2
偶関数なので x が負の場合の y の値は無視する。
まず、与えられた定義域のうち、0 以上の x の最小値 x1 と最大値 x2 求める。
例 (-10<= x <= 10 の場合、最小値は 0、最大値は 10、100 <= x <= 1000 の場合、最小値は 100、最大値は 1000)。
そして、x1 と x2 の差が 100 未満の場合、x1 と x2 の間を全探索し、y の最小値を求める。
x1 と x2 の差が 100 以上の場合、x1 と x2 の中点を求め、中点から x2 の間を全探索し、y の最小値を求める。
この方法では、例えば定義域が -100 から 10 までの場合、最小値を求める事が出来ない。
参考文献
参考文献