- ベストアンサー
評価関数の作成について
アルゴリズムの優劣を評価する評価関数を定義したいのですが、係数の決め方や、具体的な評価関数の作成方法が分からず、根本で詰まってしまっています。 評価関数に関する、分かり易い書籍やサイト等をお知りでしたら、教えて頂きたいです。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
評価の対象がアルゴリズムであれ、関数であれ、人であれ、…何でも同じ事なんですが、「優劣」を主観的・定性的に語っていてもしょうがないんで得点として数値化する、というのが評価関数です。どういうものを優れていると言い、どういうものは劣っていると言うのか、それを言う人の価値観を表現する手段が評価関数であって、これによってこそ「優劣」の意味、定義が定まることになります。従って、決まった作り方なんてものはありません。とにかく評価する人の価値観をうまく反映するように工夫するしかないのです。 そのためには、価値観の中身を徹底的に突き詰めて、「評価を行う目的に照らして、本当に評価すべき性質は何か」をぎりぎりまで煮詰めてみるのが定石でしょう。 例えば「速くて使うメモリが少なくて分かりやすいアルゴリズムがいい」なんて曖昧な価値観の場合、 ●「速い」とはどんな規模の入力に対しての話なのか、どの程度なら「速い」うちなのか。測り方を決める必要がある。 ●どの程度なら「短い」うちなのか。測り方を決める必要がある。 ●「分かりやすい」を客観的に表すための測り方を決める必要がある。 ●どの性質をどの程度優先するのか、たとえば「速くて使うメモリが多くて分かりやすいアルゴリズム」と「速くて使うメモリが少なくてうんと分かりにくいアルゴリズム」とではどっちを優れていると見るのか。 などの課題があります。 たとえば、もしそのアルゴリズムが「機器に組み込まれるプログラム用であって、そのプログラムはある一定の範囲に収まる数値を入力してリアルタイムで答を出さねばならない。プログラムは安いマイコン(機種限定。メモリはxxバイト)上で動く必要がある」というような、具体的な状況があれば、評価の仕方が必然的に絞られてきて、「速い」「使うメモリが少ない」をどう評価すれば良いかがはっきりしてきます。(この例の場合なら、アルゴリズムそのものを評価しようとするよりも、プログラムを作って性能を測って評価すべきであるし、「分かりやすい」は評価する必要がない。) 評価関数によってアルゴリズムの評価をすることとはまた別に、評価関数そのものについても、その評価関数が「容易に計算できる」という性質を持つかどうかを問う必要があります(評価関数を評価する評価関数を作る必要はありませんが)。なぜなら、評価関数を作ったものの、実際に評価をおこなう(評価関数の値を計算する)ことが簡単ではない場合もしばしばあります。例えば「プログラマの何割が「分かりやすい」と言うか」で分かりやすさを評価する、という形で評価関数を定義したら、こりゃ大変です。 一方、もし、簡単に計算できて、しかも価値観をそこそこうまく反映している評価関数が手に入れば実用的価値が高い訳です。 ともあれ、「係数の決め方」なんてレベルの話ではありません。
お礼
ありがとうございます! 非常に参考になります。