Red HatがOptaPlanner 8をリリースした。AIによって制約最適化問題を効率的に解決する、組み込みも可能な軽量プランニングエンジンだ。このフレームワークは、当番表の作成、車両経路の決定、スケジューリングといった計画に関する課題や、その他の制約充足問題の解決に使用することができる。OptaPlannerはこれらの課題を、ユーザ自身がコードを記述したり、手作業でパズルを解いたりする必要なく解決してくれる。
OptaPlanner 8では、QuarkusやGraalVMといった新たなテクノロジが新たにサポートされる一方で、Spring BootやプレーンなJavaも引き続きサポート対象となっている。
新バージョンでは、OptaPlannerのさまざまな機能のサンプルを収めた"OptaPlannerクイックスタート"リポジトリが導入された。それぞれのサンプルは、OptaPlannerのサポートする様々なテクノロジを使って構築されており、開発者がOptiPlannerの多彩な機能を短期間に理解し、自身の慣れたJavaフレームワークを使って開発を開始する上での支援となる。
OptaPlanner 8はメジャーリリースであり、非互換的な変更を含んでいる。Red Hatでは、およそ3年毎のメジャーリリースを計画している。最新リリースでは、GuavaやReflectionといった、OptaPlanner 7で非推奨となっていたメソッドが削除された他、新機能のひとつとして、ソリューションのスコアの理由についての説明が可能になった。以下の例は、ScoreExplanation
インターフェースを使用して、getScore()
、getSolution()
、getSummary()
といったメソッドに関するスコア情報を取得する方法を示したものだ。
ScoreExplanation<TimeTable, HardSoftScore> scoreExplanation =
scoreManager.explain(timeTable);
InfoQは今回、OptaPlannerの開発者であり、Red Hatでプロジェクトのリーダを務めるGeoffrey De Smet氏から、プロジェクトの現状と今後のリリースについて詳しく聞くことができた。
InfoQ: 簡単な自己紹介をお願いします。OptaPlannerに関して、どのような役割で、どのような仕事をしているのでしょうか?
Geoffrey De Smet: OptaPlannerは2006年の夏に、私がホビーとして始めたものです。最初の数年間は週末に作業していたのですが、結婚して子供ができたため、続けられなくなっていました。幸運なことに、2010年、Red Hatに採用されたことによって、そのホビーが仕事になったのです。
以降はRed Hatで、チームによる多くの支援を受けることで、堅牢でスケーラブルな、ドキュメントの整備されたプランニングエンジンに成長しました。現在では、政府機関やFortune 500企業から、スタートアップやNPOに至るまで、世界中で使用されるようになっています。
私の役割は、プロジェクトのテクニカルリーダです。コーディングやチームとのディスカッション、PRレビュー、カスタマとの対話が毎日の仕事です。カンファレンスでの講演も定期的に行っています。
ディスカッションの大部分はオープンなので、参加したい方はオンラインチャットに加わってください。
InfoQ: OptaPlanner 8にはJava 11以降が必要ですが、今でもJava 8を使用し続けている企業が多い中、この発表に対するユーザの反応はどのようなものでしたか?
De Smet: 今のところ、ユーザから不満の声はありません。最終段階になって、Java 8互換JARファイルをリリースしたことが功を奏しているのでしょうね :)
ただし、Java 8はすでにサポートが終了していますので、OptaPlanner 8ではJava 11以降のみを公式にサポートします。ですから、今後の8.xリリースについては、Java 8との互換性は保証できません。さらに、Java 11には削除予定のため非推奨とマークされているAPIがあるので、それらの使用を回避するために、特に来年、Java 17がリリースされた以降については、Java 8には存在しないAPIの使用が必要になるかも知れません。
Java 8を使うのであれば、OptaPlanner 7.x (7.47.0.Finalが2020年12月にリリースされています)の使用を推奨します。
InfoQ: クイックスタートリポジトリは新機能のひとつですが、OptaPlannerのすべての機能をクイックスタートに含める計画はありますか?
De Smet: 現在は6つのクイックスタートがあります。いずれもREST APIを使用した最新のWebアプリケーションです。実はSwing examplesにも21のサンプルがあって、Real-Time PlanningやContinuous Planning、Non-Disruptive Replanningなどの機能をすべてカバーしているのですが、
現実問題としてSwingアプリケーションを運用で使用したいという人はほとんどいないので、大部分は徐々に、最新のWebアプリケーションクイックスタートへと移行する予定です。
InfoQ: 今回の新機能の中で、最も実装上の課題の多かったものは何ですか? その理由も教えてください。
De Smet: QuarkusとSpring Bootとの統合が難しかったですね。Quarkusエクステンションも、Spring BootスターターAPIも、もう少し資料が充実していれば、と思いました。ですが、結果的にはそれだけの価値がありました — 両プラットフォームを使用するユーザにとって、多くのボイラープレートコードが不要になるというメリットがあったからです。さらに一歩進んで、QuarkusでソルバのREST APIを自動的に生成する作業にも着手する予定です。
Javaクイックスタートでは、Gradleのサポート — もちろんMavenに加えて、ですが — が予想以上に手間取りました。
build.gradle
ファイルのチェックはまだ不十分なので、作業を継続しているところです。一方で、Kotlinクイックスタートを書くのは驚くほど簡単でした。Python/Jythonクイックスタートも加えたいと思っていますが、詳しいことは決まっていません。
InfoQ: OptaPlanner 8で一番気に入っている機能は何ですか?
De Smet: もちろんQuarkusエクステンションです。
1時間のプレゼンテーション中に、完全なOptaPlannerアプリケーションをスクラッチから書き上げられるのです。RESTサービスやデータベースパーシステンスが含まれていて、もちろんOptaPlanner用に最適化されています。起動も非常に速いのです。
mvn clean install -Dnative
を使えば、すべてをネイティブにコンパイルすることも可能です。ですが、何よりも重要なのは、
quarkus:dev
モードを使えば、制約を追加してブラウザをリフレッシュするだけで、スケジュール上の動作を — 0.5秒後には — 確認できる、という点です。どのコードを変更しても、更新が遅れることはありません。素晴らしいの一言です。私の開発とプレゼンテーションを革新してくれました。
InfoQ: 今後のリリースに向けて、ユーザからのリクエストが最も多い機能は何ですか?
De Smet: VRPの単純化とConstraints Streamの改善ですね。
車両経路問題をOptaPlannerでモデル化するには、他の多くのユースケースとは違って、現状では"連鎖変数(chained variable)"と私たちが呼んでいる、リンクリストをモデル化する必要があります。非常に効率的に動作しますが、使用方法が複雑な上に、動作の推測が難しいので、"リスト変数"もサポートしたいと考えています。そうすれば、
Vehicle
に単純なList<Visit>
を持たせることができます。1年前に導入したConstraintsStreams APIは大成功でした — Java開発者による増分制約の迅速な実装を極めて容易なものにすると同時に、実際に増分計算を行うことを回避可能にしたのです。しかしながら、何分にもAPIがまだ初期段階にあるため、APIのギャップが見つかることもあります。大部分のギャップはすでに埋められていて、残るものも将来的に解決する予定ですので、実装が難し過ぎるような制約はありません。
さらに私たちは、ConstraintStreamsのパフォーマンスを改善するための作業を続けています。
InfoQ: 次のバージョンに向けて、どのような機能を開発しているのですか?
De Smet: もちろん、VRPの単純化とConstraintsStreamsの改良です。
さらに、モデルからのRESTソルバサービスの自動生成を、Quarkusで(その次にはSpring Bootで)開発中です。これによって、クイックスタートの最後のボイラープレートコードが取り除かれるので、ユーザは基本的にモデルと制約を定義するだけで、その後はすべて、自動的に処理されるようになります。拡張性ももちろん完全です。ユーザが希望するならば、すべての部分をカスタムコード(自身の書いたRESTソルバAPI)に置き換えることができます。
さらにパフォーマンスを上げるために、Gizmoのすべてのリフレクションを生成コードで置き換える実験もしています。
OptaPlanner 8は、Apache License 2.0ライセンスに基いてオープンソースで提供されている。それとは別のエンタープライズソリューションが、2021年上半期に計画されているRed Hat Decision Manager 7に含まれる予定だ。