文字列に対する直接の制約は、制約プログラミング コミュニティでは非常にまれです。これにはいくつかの研究がありますが、文字列変数をサポートする一般的な CP システムは見たことがありません。(非一般的な CP システムについては、以下を参照してください。)
MiniZinc では、文字列を整数 (たとえば、a=1、b=2 など) に変換してから、すべての演算を整数演算としてシミュレートすることをお勧めします。
簡単な例の 1 つはクロスワード ジェネレーターです: http://hakank.org/minizinc/crossword3/crossword3.mznで、これについてはhttp://hakank.org/minizinc/crossword3/で説明されています。
重要な文字列操作の 1 つは 2 つの文字列の連結ですが、MiniZinc は静的 (固定長) 配列のみをサポートするため、これは十分な大きさの「ターゲット配列」を定義して処理する必要があります。
Picat に関しては、cp/sat モジュールも文字列をサポートしていないため、整数への同じ変換を適用する必要があります。しかし、Picat はロジック プログラミング言語 (Prolog を考えてください) であるため、従来のロジック プログラミング アプローチを使用できます。
MiniZinc と Picat は、他のほとんどの CP システムと同様に、DFA (決定論的有限オートマトン) を使用して制約を作成するグローバル制約 "regular" をサポートしていることに注意してください。たとえば、ノノグラム ソルバーを参照してください: http://hakank.org/minizinc/nonogram_create_automaton2.mznおよびグローバルな隣接制約の分解: http://hakank.org/minizinc/contiguity_regular.mzn
MiniZinc は、通常の制約の NFA (非決定論的) バリアントもサポートしています。
そうは言っても、文字列変数をサポートする一種の制約解決アプローチを使用するシステムがありますが、知る限りでは、整数やセットなどの一般的なレパートリーではなく、文字列変数のみをサポートする傾向があります。たとえば、Hampi ( http://people. csail.mit.edu/akiezun/hampi/ )。注: これらの専用システムを調べてからかなり時間が経ちました。