Conjunto de codificación de restricciones a la mayoría de una como un problema de SAT MAX-SAT
-
28-09-2020 - |
Pregunta
Asumir un conjunto de variable $ v $ = $ \ {v_1, ..., v_m \} $ < / span>.
Total Total $ n $ A lo largo de la mayoría de las restricciones (AMO) (a la mayoría de un elemento en un conjunto dado es Verdadero ) Establezca [del formulario siguiente], sobre el conjunto de variables $ v $ ,
$$ Amo \, (v_1, v4, \ net 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.
No puedo representarlo como problema Max-Sat.
Intentado hasta ahora (intento 1): usando una restricción dura para cada una de las restricciones a la mayoría de una. Esto no funcionará como codificación de $ amo (v_i, ..., v_w) $ tendrá múltiples cláusulas para cada $ AMO $ y todos ellos han asignado el mismo peso (peso superior). Una solución a este conjunto puede no ser la máxima.
intento (2): para solucionar el problema anterior, probé el peso de la cláusula relativa; es decir, para cada cláusula asignar peso proporcional al tamaño de la cláusula. Esto dará preferencia de asignar una cláusula más corta. Pero esto no funciona en situaciones extremas como si toda la cláusula tiene la misma longitud.
Tengo experiencia con los solucionadores SAT, pero este es mi primer intento de problema de Max-Sat.
Solución
La forma estándar de crear restricciones suaves en MaxSat es usar variables de etiqueta:
para cada $ amo_j $ restricción, cree una nueva variable $ l_j $ .Luego cree una cláusula de unidad $ (\ lnot l_j) $ con peso $ 1 $ y agregue el literal
Ahora la variable de etiqueta $ l_j $ actúa como un interruptor: configuración $ l_j= true $ will"Desactivar" el $ amo_j $ restricción dura, pero no satisface la cláusula de la unidad $ (\ lnot l_j) $ .