Cardinalityとは、数を数える制約のことです。基数制約とか不等式制約とか、言い方の変遷がありますが、皆同じです。制約の範疇を分けるものとして、
Cardinalityか、NonCardinalityかの2種類があります。
■Cardinality ー数を数える制約
■NonCardinality ーブール演算制約
一般に数理ソルバの制約は、全てCardinalityで記述されます。従い、数理ソルバは、Cardinality制約が得意です。というより、数理ソルバは、Cardinality制約でしか記述できません。ブール演算は得意ではありません。一方アルゴリズム1系のソルバは、ブール演算が得意で、Cardinality制約は苦手です。Cardinalityのスケジュールナースの特徴は、常に、許容範囲というソフト範囲が明示されていることです。ソフト範囲が限定されて、ある値を境にハード制約になる、というのは、恐らくは、スケジュールナースユニークであり、他のソフトでは扱わないと思います。便利な反面、初心者には、とっつきにくく,これで苦労された方も多いのではないでしょうか?実は、ブール演算で、数を数えようとすると、必然になるのですが、これについては、別の機会に。
余談ですが、情報は全て0/1だけで表現できることを示したのは、シャノンという学者です。0/1が最もプリミティブな表現です。そこから出発するのがブール演算です。なので、数を数えるということもブール演算で表現可能です。つまり、コンピュータの動作の最も基礎は、0/1であり、その合成集合は、AND/NOT/ORの3つのブール演算オペレータでどんなものでも合成出来ます。
一方、制約は、2種類しかありませんという話はよくします。一つは、ハード制約、もう一つはソフト制約です。
数理表現への橋渡しは、グラフ理論上のグラフになります。制約理論で言えば、リソース制約下の最小パス問題(RCSPP)、になります。実装という観点でみると、下のような難易度になります。
| Hard | Soft
ーーーーーーーーーーーーーーーーーーーーーー
Cardinality | 難 | 超難
NonCardinality | 超簡単 | 簡単
つまり、Soft Cardinalityの実装は超難しいのです。上のHard Cardinality制約については、2022年に特許化しましたが、そのときは、Soft Cardinalityについては解決していませんでした。
今回INRC2の難問を解くに当たって、副産物として出てきたのは、このSoft Cardinalityに対するアルゴリズムです。
未だ解けてはいないし、改善も進行中なのですが、ドラスティックな変化があるので、中間報告しておきます。
下は、池上ベンチをアルゴリズム3現行スケジュールナースで解いた様子です。
アルゴリズム1は、数秒で解けるのに対して、このように時間がかかっているのは、Soft Cardinalityのコンパイルに時間がかかっているからです。
0 件のコメント:
コメントを投稿