Minimización de mútiples expresiones booleanas

¿Tienes problemas con tu equipo?, preguntanos.

Moderador: Fundadores

Responder
Avatar de Usuario
cacharreo !Sinclair 1
Moderador
Moderador
Mensajes: 5889
Registrado: 09 Ago 2019, 10:17
Ubicación: /home/cacharreo/
Has thanked: 1210 times
Been thanked: 2836 times
Contactar:

Minimización de mútiples expresiones booleanas

Mensaje por cacharreo »

¿Conocéis alguna metodología (algorítmica, heurística,...) o, incluso mejor, un programa/aplicación que sea capaz de minimizar/reducir/simplificar de forma óptima y en un tiempo razonable un conjunto dado de expresiones booleanas? No hablo de Karnaugh, Petrick, Quine-McCluskey u otras variaciones que cuando se trabaja en sistemas con, p.e., 12 dimensiones/variables serían una pesadilla y, aparte, solo operan sobre una única expresión. Tampoco hablo de buscar a mano posibles cambios de variables o grupos comunes de implicantes primos y temo que la estrategia de ir buscando óptimos locales quede muy lejos de ser óptima.

El problema sería: Dadas N expresiones booleanas de M variables del tipo:
E1=ABC...Z
E2=C+D+F+I
E3=!(J+K)
...
En=BC...!P!Q...!Z
obtenerlas de forma que, por ejemplo, la implementación con puertas lógicas fuera mínima tanto en cuanto a número de puertas como en cuanto a número de niveles.

Me consta que es un problema NP-complejo (NP-hard) pero pregunto por si conocierais que exista alguna solución aproximativa práctica razonablemente aceptable.

Edito: Se me olvidó comentar que he oído hablar de los avances de Brayton pero no he sido capaz de encontrar nada concreto.
© cacharreo
Avatar de Usuario
explorer
Aspirante a demonio
Aspirante a demonio
Mensajes: 206
Registrado: 22 Oct 2017, 03:27
Ubicación: Valladolid, España
Has thanked: 8 times
Been thanked: 32 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por explorer »

Pero... ¿Cómo se relacionan las expresiones entre sí? Algoritmos como el Algorithm::QuineMcCluskey sirve para funciones compuestas de varias expresiones, pero cuyo resultado son siempre 0 o 1.

Más información...
Avatar de Usuario
wilco2009 !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 8153
Registrado: 01 Abr 2013, 23:47
Ubicación: Valencia
Has thanked: 47 times
Been thanked: 101 times

Re: Minimización de mútiples expresiones booleanas

Mensaje por wilco2009 »

Has probado a escribirlo en verilog y compilarlo con quartus o vivado?
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".

Douglas Adams. Guía del autoestopista galáctico.
Avatar de Usuario
cacharreo !Sinclair 1
Moderador
Moderador
Mensajes: 5889
Registrado: 09 Ago 2019, 10:17
Ubicación: /home/cacharreo/
Has thanked: 1210 times
Been thanked: 2836 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por cacharreo »

Gracias por las respuestas a ambos. Temí que me quedaría más solo que la una en esto. ;)
explorer escribió: 20 Ene 2024, 06:21Pero... ¿Cómo se relacionan las expresiones entre sí?
Comparten las variables aunque no necesariamente todas. Llevándolo al terreno de la electrónica son funciones lógicas (o de conmutación completamente especificadas/circuitos combinacionales) basadas en el mismo conjunto finito de entradas aunque las salidas son diferentes (pueden coincidir para ciertos vectores de entrada pero las funciones en sí no son idénticas).
explorer escribió: 20 Ene 2024, 06:21Algoritmos como el Algorithm::QuineMcCluskey sirve para funciones compuestas de varias expresiones, pero cuyo resultado son siempre 0 o 1.
En efecto, todas son expresiones booleanas por lo que su resultado es siempre 0 ó 1 pero en los casos que me interesan cada expresión (función) es independiente y aunque cada una comparta variables con el resto, no incluye ninguna de las otras (en sentido estricto no serían funciones compuestas).

Por poner un ejemplo trivial (que desgraciadamente son casi los únicos que se leen en Internet),
E1=AB+C+!D
E2=AB+!C (ó, en su forma canónica/expandida/normalizada, E2=AB+!C+0*D)

puede escribirse como,
E3=AB
E1=E3+C+!D
E2=E3+!C

En su primera forma trasladando las ecuaciones al ámbito electrónico, implican el uso de dos puertas AND de doble entrada, dos puertas OR de triple entrada y dos puertas NOT. En su segunda forma, una puerta AND de doble entrada, dos puertas OR de triple entrada y dos puertas NOT por lo que se ahorra una puerta AND de doble entrada manteniendo el número de niveles (ó etapas). Este ejemplo podría no ser el ideal u óptimo pero creo que deja entrever qué busco (que es evitar el método algebraico y la dependencia de una "idea feliz"). ;)
© cacharreo
Avatar de Usuario
cacharreo !Sinclair 1
Moderador
Moderador
Mensajes: 5889
Registrado: 09 Ago 2019, 10:17
Ubicación: /home/cacharreo/
Has thanked: 1210 times
Been thanked: 2836 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por cacharreo »

wilco2009 escribió: 20 Ene 2024, 10:33Has probado a escribirlo en verilog y compilarlo con quartus o vivado?
Sinceramente no lo he probado pero, aunque salvo descuido o error siempre implemento estos diseños en su forma óptima, por lo que he visto estas optimizaciones (ISE, Vivado, Quartus,...) al sintetizar diseños de los ejemplos son del tipo de las que he mencionado (variaciones de Quine-McCluskey).
© cacharreo
Avatar de Usuario
explorer
Aspirante a demonio
Aspirante a demonio
Mensajes: 206
Registrado: 22 Oct 2017, 03:27
Ubicación: Valladolid, España
Has thanked: 8 times
Been thanked: 32 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por explorer »

En Perl he hecho pruebas. Por ejemplo:
$perl -MAlgorithm::QuineMcCluskey -E '$q = Algorithm::QuineMcCluskey->new(width => 4, columnstring => "1011101110111111"  ); print $q->all_solutions '
(AB) + (C) + (D')
Pero el tema está en que son varias funciones. Logic::TruthTable sí que permite definir un problema con varias funciones, y ofrecer una reducción, pero el ejemplo que muestras ya de por sí está muy reducido y estas bibliotecas no me dan ninguna respuesta que me digo que sirven para lo que quieres.

¿No tienes un ejemplo más complejo?
Avatar de Usuario
cacharreo !Sinclair 1
Moderador
Moderador
Mensajes: 5889
Registrado: 09 Ago 2019, 10:17
Ubicación: /home/cacharreo/
Has thanked: 1210 times
Been thanked: 2836 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por cacharreo »

Muchas gracias por el intento.

Ciertamente el ejemplo era trivial pero, más que nada, para que se comprendiera el objetivo.

La solución que ofrece el algoritmo es obviamente la expresión/ecuación/función E1. El resultado debe ofrecer E1, E2 y quizás alguna (sub)función más (p.e. E3) en sus formas reducidas (reducción de las 2 expresiones a la vez, no de cada una de forma independiente).
explorer escribió: 22 Ene 2024, 22:09¿No tienes un ejemplo más complejo?
Claro que sí, un ejemplo práctico real. Un conjunto de 13 variables (de la A a la M) y 4 funciones en su forma bruta (al menos sin una optimización previa intencional). No las he normalizado porque creo que así se verán mejor.

Código: Seleccionar todo

E1 = B + !E + F + !G + !H + !I + !J + !K + !L
E2 = C + F + !G + !H + !I + !J + !K + !L
E3 = C + !D + !E + !F + !G + !H + !I + !J + K + !L
E4 = A + D + E + !F + !G + H + I + !J + !K + L + M
Una vez reducidas el resultado deberían ser 4 funciones reducidas y, si se aplica, un número indeterminado de subfunciones.
© cacharreo
Avatar de Usuario
explorer
Aspirante a demonio
Aspirante a demonio
Mensajes: 206
Registrado: 22 Oct 2017, 03:27
Ubicación: Valladolid, España
Has thanked: 8 times
Been thanked: 32 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por explorer »

13 variables son 2^13 combinaciones, o sea 8192.

Al final me sale como resultado
F0 => (ADEF'G'HIJ'K'LM) + (BE'FG'H'I'J'K'L') + (CD'E'F'G'H'I'J'KL') + (CFG'H'I'J'K'L')
Avatar de Usuario
cacharreo !Sinclair 1
Moderador
Moderador
Mensajes: 5889
Registrado: 09 Ago 2019, 10:17
Ubicación: /home/cacharreo/
Has thanked: 1210 times
Been thanked: 2836 times
Contactar:

Re: Minimización de mútiples expresiones booleanas

Mensaje por cacharreo »

Muchas gracias por el intento.
explorer escribió: 25 Ene 2024, 01:13
F0 => (ADEF'G'HIJ'K'LM) + (BE'FG'H'I'J'K'L') + (CD'E'F'G'H'I'J'KL') + (CFG'H'I'J'K'L')
Curiosamente este F0 es la suma de las 4 expresiones en el orden E4, E1, E3 y E2 después de haber cambiado sumas por productos en cada una de ellas (variando su resultado porque ni se aplican las leyes de De Morgan para dicho cambio) pero, en definitiva, no hay ninguna minimización como resultado de añadir subfunciones que sean comunes a dos o más expresiones, subfunciones que a simple vista se ve que existen.
© cacharreo
Responder

Volver a “Consultas”