🎶制約プログラミングとダブルドラゴン エンペラータイム

前から気になっている書き方がある

  (function(rr){
   var f=function(c){
     rr.apply(this,[c]);    
     return f; 
   }
   return f;
 })(background)(220)   

その後Yコンビネータというものがあるのをしり、少しすっきりしたが、用途があまりはっきりしない。

趣味で継続的になにかしたいとおもっていたが、大掛かりになるのは面倒だし甲斐性もないので、やるとしたらシンタックスシュガーみたいなものだと思った。

そして本日制約プログラミングなるものを知るに至るが、どういうものなのか皆目見当がつかない。

Chocoは、制約プログラミングに特化したフリーのオープンソースJavaライブラリです。ユーザは、制約のセットを記述することで、宣言的な方法で問題をモデル化します。そして、この問題は、探索機構を持つ交互制約フィルタリングアルゴリズムによって解かれます。

javaがなんとなく可読性高そうだが、制約の説明は置いといて、JAVAでPrologみたいなことができるということみたいだが宣言と制約は違うとおらがwikipediaがいう。

こういう問題がまあ解けると。

int n = 8;
Model model = new Model(n + "-queens problem");
IntVar[] vars = new IntVar[n];
for(int q = 0; q < n; q++){
   vars[q] = model.intVar("Q_"+q, 1, n);
}
for(int i  = 0; i < n-1; i++){
   for(int j = i + 1; j < n; j++){
       model.arithm(vars[i], "!=",vars[j]).post();
       model.arithm(vars[i], "!=", vars[j], "-", j - i).post();
       model.arithm(vars[i], "!=", vars[j], "+", j - i).post();
   }
}
Solution solution = model.getSolver().findSolution();
if(solution != null){
   System.out.println(solution.toString());
}

modelに配列みたいなものをぶっこんでソルバー作って解放をみる、と、分かりやすいが、もともと言っていたものとはなんか違う。制約の概念も指の股からすりぬけてゆく。

理論的に、論理プログラミングはエルブラン領域(Herbrand universe)という有限木で表される領域上でのユニフィケーションによる等号制約を扱う制約プログラミングと見なすことができ、制約論理プログラミングはその自然な拡張となっている。論理プログラミングの代表的な言語であるProlog処理系の多くには、何らかの制約論理プログラミングの機能やライブラリが用意されている。

制約論理プログラミングの応用分野は、スケジューリング、要員計画・輸送・資源割り当て、アナログ回路設計、トレーディングなどさまざまなものがある

当たり前と言われるのかもしれないが、量子コンピューターの応用分野とかぶる。

論理制約プログラミングでSKETCHPADが出てくるとカント風のボッコちゃんの気が利かない世界観から、ユークリッドデカルトニュートンと続く幾何学の世界に我々を導いてくれる気持ちになる

1963年でフルトランジスターといっているから、トランジスターでこれをすべてこさえてるんだろうからすごい。量子もこういうのなんかやったほうがよい。


お願い致します