示例#1
0
def clausulasCombinarMCD(transf, n):
    clausulas2 = []
    for numG in xrange(n):
        varG = VariableSat(False, 'g', [numG])
        varG1 = VariableSat(True, 'g', [numG])
        clsPorLoMenos1 = ''
        for numCopiaX in xrange(n):
            numVarGX = transf.var2NumSimple(varG, numCopiaX)
            clsPorLoMenos1 = clsPorLoMenos1 + transf.var2NumSimple(
                varG1, numCopiaX) + ' '
            for numCopiaY in xrange(numCopiaX + 1, n):
                numVarGY = transf.var2NumSimple(varG, numCopiaY)
                clausulas2.append(numVarGX + ' ' + numVarGY + ' 0\n')
            clausulaSimet = numVarGX + ' '
            if numG > 0 and numCopiaX > 0:
                for numGmenor in xrange(numG):
                    varG2 = VariableSat(True, 'g', [numGmenor])
                    clausulaSimet = clausulaSimet + transf.var2NumSimple(
                        varG2, numCopiaX - 1) + ' '
                clausulas2.append(clausulaSimet + '0\n')
            elif numG == 0 and numCopiaX == 0:
                varG2 = VariableSat(True, 'g', [0])
                clausulas2.append(transf.var2NumSimple(varG2, 0) + ' 0\n')
        clausulas2.append(clsPorLoMenos1 + '0\n')
    return clausulas2
示例#2
0
def clausula78a(varz, varg, varm, subObQ, subObV, vis, ltaux, c7, c8, vista, is_spec):
    global varsT
    global contribVT
    c8temp1 = [varz, varm.negarVar()]
    c8temp2 = [varm]
    lt = set([])
    i = 0
    for x in subObQ.orden:
        y = subObV.orden[i]
        varT = VariableSat(True, 't', [int(x), int(y)])
        lt.add(varT)
        varsT[(int(x), int(y))]=varT
        contribVT.setdefault(vista, set([])).add((int(x), int(y)))
        c7temp = [varm.negarVar(), varz.negarVar(), varT]
        c7.append(c7temp)
        #if is_spec:
            #c7temp = [varm.negarVar(), varz.negarVar(), varT]
            #c7.append(c7temp)
        c8temp1.append(varT.negarVar())
        c8temp2.append(varT.negarVar())
        i = i + 1
        ltaux.setdefault((varT,varm),set([])).add(varz)    
    c8.append([varz.negarVar(), varg])
    c8.append([varz.negarVar(), varm])
    return lt
示例#3
0
def variablesV(q, vistas):
    global varsV
    vnula = VariableSat(True, 'v', [-1])
    lv = [vnula]
    varsV[-1] = vnula
    c2 = []
    numVista = 0
    for v in vistas:
        var = VariableSat(True, 'v', [numVista])
        lv.append(var)
        varsV[numVista] = var
        numVista = numVista + 1
    n = len(lv)
    for x in xrange(n):
        for y in xrange(x + 1, n):
            c2.append([lv[x].negarVar(), lv[y].negarVar()])
    return lv, [lv], c2
示例#4
0
def clausula78a(varz, varg, varm, subObQ, subObV, vis, ltaux, c7, c8):
    global varsT
    c8temp1 = [varz, varm.negarVar()]
    c8temp2 = [varm]
    lt = Set([])
    i = 0
    for x in subObQ.orden:
        y = subObV.orden[i]
        varT = VariableSat(True, 't', [int(x), int(y)])
        lt.add(varT)
        varsT[(int(x), int(y))] = varT
        c7temp = [varm.negarVar(), varz.negarVar(), varT]
        c7.append(c7temp)
        c8temp1.append(varT.negarVar())
        c8temp2.append(varT.negarVar())
        i = i + 1
        ltaux.setdefault((varT, varm), Set([])).add(varz)
    c8.append([varz.negarVar(), varg])
    c8.append([varz.negarVar(), varm])
    return lt
示例#5
0
def clausulas678(q, vistas):
    global varsT
    global varsZ
    global varsG
    global varsV
    c6 = []
    c7 = []
    c8 = []
    c9 = []
    c10 = []
    lz = []
    lt = Set([])
    ltaux = {}
    c6temp = []
    c14temp = {}
    i = 0
    for subOb in q.cuerpo:
        pred = subOb.predicado
        m = 0
        varg = varsG[i]
        for v in vistas:
            j = 0
            varm = varsV[m]
            c6temp = [varg.negarVar(), varm.negarVar()]
            c9temp = []
            subObCubre = False
            for subObtemp in v.cuerpo:
                predtemp = subObtemp.predicado
                if pred == predtemp:
                    varz = VariableSat(True, 'z', [i, j, m])
                    lz.append(varz)
                    varsZ[(i, j, m)] = varz
                    c6temp.append(varz)
                    c9temp.append(varz)
                    lttemp = clausula78a(varz, varg, varm, subOb, subObtemp, m,
                                         ltaux, c7, c8)
                    lt |= lttemp
                    subObCubre = True
                j = j + 1
            c9 = c9 + clausula9(c9temp)
            m = m + 1
            if len(c6temp) > 2:
                c6.append(c6temp)
            if not subObCubre == True:
                c14temp.setdefault(varm.negarVar(), []).append(varg.negarVar())
        i = i + 1
    return lt, lz, c6, c7, c8, c9, clausula14(c14temp), ltaux
示例#6
0
def variablesG(q, lv):
    global varsG
    lg = []
    c3 = []
    numSO = 0
    for v in q.cuerpo:
        var = VariableSat(True, 'g', [numSO])
        lg.append(var)
        varsG[numSO] = var
        numSO = numSO + 1
    for g in lg:
        c3temp = [lv[0].negarVar(), g.negarVar()]
        c3.append(c3temp)
    for v in lv[1:]:
        c3temp = [v.negarVar()] + lg
        c3.append(c3temp)
    return lg, c3