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.

¿Fue útil?

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 $ l_j $ a cada cláusula del estándar $ amo_j $ codificación que contiene solo cláusulas duras (peso infinito).

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) $ .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top