第2章 プランニングの問題とは
プランニングの問題では、限られたリソースや個別の制約の中で最適なゴールを見つけ出します。最適なゴールは、以下に示すように何らかの物の数となります。
- 最大の利益: 最適なゴールにより、可能な限り高い利益が得られます。
- 経済活動の最小フットプリント: 最適なゴールでは、環境負荷が最小となります。
- スタッフ/顧客の最大満足: 最適なゴールでは、スタッフ/顧客のニーズが優先されます。
これらのゴールに到達できるかどうかは、利用できるリソースの数に依存します。たとえば、以下のようなリソースには制限があります。
- 要員の人数
- 時間
- 予算
- 装置、車両、コンピューター、施設などの物理資産
これらのリソースに関連する個別の制約についても考慮する必要があります。たとえば、要員が働くことのできる時間数、特定の装置を使用することのできる技能、または機器同士の互換性などです。
Business Optimizer は、最適化のためのヒューリスティック法およびメタヒューリスティック法を効率的なスコア計算と組み合わせ、Java プログラマーが制約充足問題を効率的に解くことができるようにします。
2.1. プランニングの問題では検索する領域が膨大に リンクのコピーリンクがクリップボードにコピーされました!
プランニングの問題には、多数の解が存在します。
以下に示すように、解は複数のカテゴリーに分類されます。
- 可能解
- 可能解とは、制約に違反するかどうかは問わず、あらゆる解を指します。通常、プランニングの問題には膨大な数の可能解が存在します。ただし、それらの解の多くは、無価値なものです。
- 実行可能解
- 実行可能解とは、いずれの (負の) ハード制約にも違反しない解を指します。実行可能解の数は、可能解の数に比例する傾向にあります。実行可能解が存在しないケースもあります。実行可能解は、可能解の部分集合です。
- 最適解
- 最適解とは、最高のスコアを持つ解を指します。通常、プランニングの問題には数個の最適解が存在します。実行可能解が存在せず、最適解が現実的ではない場合でも、プランニングの問題には少なくとも 1 つの最適解が必ず存在します。
- 見つかった最善解
- 見つかった最善解とは、与えられた時間内に実施した検索で見つかった最高スコアの解を指します。通常、見つかった最善解は現実的で、十分な時間があれば最適解を見つけることができます。
直観には反していますが、小規模なデータセットの場合であっても、膨大な数の可能解が存在します (正しく計算された場合)。
planner-engine ディストリビューションフォルダーのサンプルでも、ほとんどのインスタンスには膨大な数の可能解が存在します。最適解を確実に見つけ出すことのできる方法は存在しないため、いかなる実行方法も、これらすべての可能解の部分集合を評価することしかできません。
膨大な数の可能解全体を効率的に網羅するために、Business Optimizer はさまざまな最適化アルゴリズムをサポートしています。
ユースケースによっては、ある最適化アルゴリズムが他のアルゴリズムより優れることがあります。ただし、それを事前に予測することは不可能です。Business Optimizer では、XML またはコード中のソルバー設定を数行変更するだけで、最適化アルゴリズムを切り替えることができます。
2.2. プランニングの問題における制約 リンクのコピーリンクがクリップボードにコピーされました!
通常、プランニングの問題には、少なくとも 2 つの制約レベルがあります。
(負の) ハード制約 は、絶対に違反してはならない。
例: 1 人の教師は同時に 2 つの講義を受け持つことはできない。
(負の) ソフト制約 は、避けることが可能であれば違反してはならない。
例: 教師 A は金曜日の午後に講義を受け持ちたくない。
正の制約を持つ問題もあります。
正のソフト制約 (ボーナス) は、可能であれば満たす必要がある。
例: 教師 B は月曜日の午前中に講義を受け持つことを希望している。
基本的な問題の中には、ハード制約しか持たないものや、3 つ以上の制約レベル (例: ハード、ミディアム、およびソフト制約) を持つものもあります。
これらの制約により、プランニングの問題における スコア計算方法 (または 適合度関数) が定義されます。プランニングの問題の解は、それぞれスコアで等級付けすることができます。Business Optimizer のスコア制約は、Java コード等のオブジェクト指向言語または Drools ルールで記述されます。
このタイプのコードは柔軟で、スケーラビリティーに優れます。