MAX-SAT問題としての最も1つの制約のエンコードセット
-
28-09-2020 - |
質問
$ v $ = $ \ {v_1、...、v_m \} $ < /スパン>。
合計 $ n $ at-mont-one(most)制約(指定されたセット内の最大1つの要素は true です)変数set $ v $ 、
を越えて、下のフォームの設定を設定します。$$ amo \、(v_1、v4、\ neg v_6、v_6、v_ {10})\\ ... \\ amo \、(v_2、\ neg v3、v_7 )$$
Problem: Find an assignment to $V$ that maximize
the number of satisfiable AMO constraint set.
.
マックスSAT問題として表現できません。
これまでに試してみた(試み1):最も1つの制約のそれぞれにハード制約を使用する。これは $ amo(v_i、...、v_w)のエンコーディングとしては機能しません。 $に複数の句を持ちます。 AMO $ とそれらのすべてが同じ重み(最上位)を割り当てました。このセットの解決策は最大のものではないかもしれません。
試み(2):上記の問題を解決するために、私は相対節の重みを試しました。すなわち、各句については、節のサイズに比例した重みを割り当てる。これにより、満足短縮句を割り当てることが好みます。しかし、これはすべての節が同じ長さを持っている場合のような極端な状況では機能しません。
私はSATソルバーで経験がありますが、これは私の最初のMAX-SAT問題試行です。
解決
MAXSATでソフト制約を作成するための標準的な方法は、ラベル変数を使用することです。
各 $ amo_j $ 制約で、新しい変数 $ l_j $ を作成します。その後、UNIT句を作成します。 $(\ l not l_j)$ を使用して、 $ 1 $ を追加し、リテラルxを追加します。class="math-container"> $ L_J $ 標準 $ amo_j $ のすべての節に、ハード(無限の重さ)句のみを含むエンコーディング。
ラベル変数 $ L_J $ はスイッチとして機能します。 $ l_j= true $ $ amo_j $ ハード制約を "OFF" $(\ lnot l_j)$