OptaPlannerというlocal searchによるCSPソルバがあるのだけれど、Javaのクラスのどの部分が制約充足問題の変数や値域なのかといった情報をアノテーションで書くという風になっている。

OptimJはJavaを言語拡張してたけれど、こちらは同じようなことを言語拡張せずにアノテーションでやろうとしている感じか。

ドキュメントを見ると、クラス図にアノテーションの情報を追加したような図があるが、こういう風になっていると問題領域のクラス図によるモデリングから最適化のためのモデリングがスムーズに繋がりそうで、興味深い。

ただし、コンフィギュレーションをXMLファイルで書いたりとか、目的関数をDroolsのルールで書いたりとか、悪い意味でのJavaっぽい面倒臭さはあるなぁ。 目的関数はDroolsを使わずにJavaで書くこともできるけれど、単純な書き方ではインクリメンタルな計算ができないせいで遅くなり、インクリメンタルな計算ができるものはJavaで書くのは結構面倒そう。

OptaPlannerの存在は Discrete Optimization のコースで、Local Search Solver として参考に挙げられていて知ったのだった。 Discrete Optimization の課題では使ってみようかともちょっと思ったのだけど、〆切直前になってから使いはじめるには結構面倒そうだったので、結局使わなかったが……

OptaPlanner
http://www.optaplanner.org/ 

OptimJ
http://www.ateji.com/optimj/index.html

#optimization #dopt003