冗長自由度アームのリーチング問題

探索初期 局所解 最適解
各関節の角度をパラメータとして、アーム先端がターゲット座標に一致するパラメータを探索してください。
ただし、各関節はリンク同士を±90度以内で繋ぐ制約があるので、なるべく関節の可動角度中央付近の角度にするのが好ましいという問題です。
アームの先端がターゲット座標に近く、かつ各関節の可動中央角度からの偏差の2乗合計が小さいほど コスト関数が小さくなります。

本プログラムは 連続な多次元変数の最適化:共役勾配法 のページに示される共役勾配法によるパラメータ探索プログラムの例題として作られています。
探索の様子を視覚的に観察できます。
関節の個数は起動時の引数で指定できます。
空色の円で示されるターゲット座標はマウスで移動させることができます。

ただし、本例題は多峰性関数であるため、共役勾配法では最適解への収束は期待できません!
連続な多次元変数の最適化:滑降シンプレックス法 でも同じ例題のプログラムがあります。


サンプルプログラムの使い方

本フォルダには以下のファイルが含まれています:
【コスト計算プログラム】

  1. CostFuncRoboWin.class  ← 実行するコスト計算プログラム本体
  2. MultiJointArm.class
  3. PLANT_F_Canvas.class
  4. Readme.html   ← このドキュメント
  5. CAP1.gif, CAP2.gif, CAP3.gif ← 本説明書で用いる画像ファイル
  6. 3関節で起動.bat, 4関節で起動.bat, 6関節で起動.bat, 8関節で起動.bat, 10関節で起動.bat ← 自動実行バッチファイル
  7. ObjectiveFuncMultiLinkArm_JavaSourceProgram ← プログラムソースファイルのフォルダ
【パラメータ探索プログラム(共役勾配法)】
  1. Conjugate.class
  2. Conjugate.java
  3. FitnessFuncByFile.class
  4. FitnessFuncByFile.java
  5. FitnessFunction.class
  6. FitnessFunction.java
  7. FunctionOptimization.class     ← パラメータ探索プログラム本体
  8. FunctionOptimization.java
  9. Kansu.class
  10. Kansu.java
  11. MT19937.class             乱数のクラス
  12. MT19937.java              
  13. 共役勾配法で探索.bat ←  自動実行バッチファイル
  14. ConjugateAlgorithm_JavaSourceProgram ← プログラムソースファイルのフォルダ
実行するには JDK1.4以降のJava実行環境が必要です。 本プログラムは version 1.5.0_06 にて動作を確認しています。
Javaのランタイムがインストール済みでJavaインタプリタへパスが通っていれば動くはずです。

デモプログラムを実行するには、
(1)まずコスト計算プログラムを起動するため、 上記の希望する関節数の自動実行バッチファイルをダブルクリックしてください。
   起動には数秒〜数十秒かかります。
(2)次にパラメータ探索プログラムを起動します。 上記の「共役勾配法で探索.bat」とある自動実行バッチファイルをダブルクリックしてください。
   解候補のパラメータを1000個分探索して停止します。

あるいはコマンドプロンプト上(通称DOS窓)において CDコマンドによりプログラムの存在するフォルダまで移動した後、 以下のコマンドを実行します:

> java CostFuncRoboWin 6

引数の数字 6 は、関節の個数を指定しています。数字は変えることができます(2以上)。

このプログラムは、実行時に自動的に config.txt ファイルを生成してパラメータ次元数を指示しますので、 パラメータ探索プログラム(ここでは共役勾配法)を実行する前に走らせておきます。


プログラムの通信仕様

プログラムを実行すると、まずパラメータ探索アルゴリズムのプログラムに対して 解くべき問題のパラメータ数と、パラメータの定義域について指示するため、 config.txt ファイルにそれらを書き出した後、以下の処理を繰り返します:
  1. コスト計算プログラムは、flag.txt ファイルが生成されるまで待ちます。
  2. コスト計算プログラムは、flag.txt ファイルが生成されたことを確認したら param.txt ファイルを開いてパラメータの値を読み込み、コストを計算します。
  3. コスト計算プログラムは、計算結果を result.txt へ書き込みます。
  4. コスト計算プログラムは、計算終了をパラメータ探索プログラムへ通知するために flag.txt ファイルを消去し、処理1に戻ります。
よって、パラメータ探索プログラム側では、 param.txt ファイルへパラメータの値を書き込んでから、flag.txt ファイルを生成することで 本コスト計算プログラムへコスト計算を指示します。
flag.txt ファイルが消去されたら、コストの値が result.txt に書き込まれていますので これを読み込みます。
以上の処理を繰り返して最適化を行います。

【config.txt ファイルの仕様】
解くべき問題のパラメータ数と、パラメータの定義域について指示します。 先頭行において、文字列「NumOfParameters」と空白文字に続いて、パラメータの個数を書きます。 2行目以降は文字列「ParamRangeMin」と空白文字に続いてパラメータの定義域の下界の数値、 さらに空白文字に続いて文字列「ParamRangeMax」と空白文字に続いてパラメータの定義域の上界の数値を書きます。 この行はパラメータの個数分なければなりません。
(4次元のパラメータの最適化を指示するための config.txt ファイルの例)
NumOfParameters 4
ParamRangeMin -5 ParamRangeMax 5
ParamRangeMin -5 ParamRangeMax 5
ParamRangeMin -5 ParamRangeMax 5
ParamRangeMin -5 ParamRangeMax 5

【param.txt ファイルの仕様】
param.txt にはパラメータの数値がスペースで区切られて書き込まれます。
(4次元のパラメータを表すための param.txt ファイルの例)
1.1 1.2 0.4 0.3

【result.txt ファイルの仕様】
result.txt には、cost という文字列に続いて評価値の数値を書き込みます。
小さい値ほど良い評価であるものとします。
(result.txtファイルの例)
cost 20

【flag.txt および end.txt ファイルの仕様】
これらはファイルの有無だけが問題なので、 ファイルの中身は空です。

ご意見・お問い合わせ等は以下のURLにメールアドレス等がありますので、 そちらからお願いします:
http://sysplan.nams.kyushu-u.ac.jp/gen/index.html
Copyright 2008 Hajime Kimura, Kyushu Univ.
九州大学 大学院工学研究院 海洋システム工学部門 木村 元