1 of 27

Разработка алгоритма для поиска совпадений таблиц истинности

Воробьев Алексей Михайлович

Руководитель: Куликов Александр Сергеевич

Разработка Программного Обеспечения

Университет ИТМО

2024

2 of 27

Актуальность

/22

2

Таблица

Соответствует ли таблице 1

Формула 1

Соответствует ли таблице 2

Формула 2

Соответствует ли таблице 3

Формула 3

База данных оптимальных формул

Логический синтез – процесс получения наиболее оптимальной логической формулы по заданной таблице истинности. Наиболее часто данная задача встречается в цифровой электронике.

3 of 27

Таблицы истинности

/22

3

00

01

10

11

1

1

0

1

0

1

1

1

00

01

10

11

1

1

0

1

0

1

1

1

 

 

индекс

0

1

2

3

(0,0)

(0,1)

(1,0)

(1,1)

1

1

0

1

0

1

1

1

Таблица истинности (2 входа и 2 выхода)

4 of 27

Трансформации

/22

4

 

 

 

Трансформация выхода

 

 

Результирующая таблица истинности

Исходная таблица истинности

Трансформация таблицы

5 of 27

Актуальность

/22

5

Таблица

Соответствует ли таблице 1 с трансформацией

Формула 1

Соответствует ли таблице 2 с трансформацией

Формула 2

Соответствует ли таблице 3 с трансформацией

Формула 3

База данных оптимальных формул

Найденная трансформация

Найденная трансформация

Найденная трансформация

Объединим таблицы, равные с точностью до трансформаций, в один кластер и будем хранить одну оптимальную формулу для каждого кластера.

6 of 27

Конференция IWLS

IWLS – это международная конференция по логическому синтезу.

Наша команда в данный момент участвует в соревновании.

Надо найти оптимальные формулы для 100 таблиц.

/22

6

Таблицы соревнования имеют количество переменных от 6 до 16.

  • Таблицы соревнования можно использовать для проверки алгоритма
  • Благодаря алгоритму можно будет получить логические формулы

7 of 27

Анализ существующих решений

/22

7

  • The Art Of Computer Programming [1]
    • обрабатываются только таблицы с небольшим количеством переменных n ≤ 6
  • Large-Scale Boolean Matching [2]
    • обрабатываются формулы, а не таблицы истинности
    • не обрабатываются инвертирования, только перестановки
  1. https://cs.stanford.edu/~knuth/taocp.html
  2. https://www.researchgate.net/publication/221339893_Large-Scale_Boolean_Matching

8 of 27

Цель: реализовать эффективный алгоритм для поиска совпадений таблиц истинности и генерации оптимальных логических формул.

Задачи:

  • Придумать и реализовать эффективный алгоритм для поиска совпадений
  • Написать скрипт для генерации формул в соответствии с найденной трансформацией
  • Сгенерировать 100 оптимальных формул для таблиц соревнования

/22

8

9 of 27

Фиктивные входы и выходы

/22

9

000

001

010

011

100

101

110

111

0

0

0

0

1

1

1

1

 

000

001

010

011

100

101

110

111

1

0

1

0

1

0

1

0

 

 

 

Используемые переменные

00001111

10101010

100 01

001 10

Сокращённая таблица истинности

 

 

10 of 27

Тривиальные подходы

Полный перебор был реализован для проверки алгоритма на небольших таблицах истинности.

/22

10

Полный перебор

Использование SAT солвера

11 of 27

Полезные наблюдения

  • При перестановках и инвертированиях входов количество единиц в строке таблицы (выход) не меняется
  • При инвертировании выхода 0 и 1 в строке меняются местами
  • По количеству единиц можно определить мог ли один выход преобразоваться в другой, а также определить инвертирование выхода

/22

11

0010

0110

1011

 

 

12 of 27

Идея алгоритма

Для каждой переменной определим набор:

/22

12

Количество 0 в строке при x=0

Количество 1 в строке при x=0

Количество 0 в строке при x=1

Количество 1 в строке при x=1

 

00

01

10

11

1

1

0

1

 

00

10

1

0

01

11

1

1

 

 

 

13 of 27

Идея алгоритма

При инвертировании входа инвертируется первый индекс:

/22

13

При инвертировании выхода инвертируется второй индекс:

 

 

Данные наборы сохраняются (с точностью до инвертирований) при перестановках и инвертированиях переменных, с помощью этого можно упростить перебор.

14 of 27

Поиск общей трансформации

Каждый выход может иметь много трансформаций, нам надо найти общую трансформацию.

/22

14

Трансформации конфликтуют:

Трансформации не конфликтуют:

Общая трансформация:

 

 

 

 

 

 

Преобразование множеств трансформаций:

15 of 27

A – таблицы с малым числом трансформаций для каждого выхода.

B – таблицы с большим числом трансформаций для выходов и большим числом конфликтов.

С – таблицы с большим числом трансформаций для выходов и малым числом конфликтов.

D – таблицы с одним выходом.

/22

15

Подход

Идея

A (21 шт.)

B (27 шт.)

C (29 шт.)

D (13 шт.)

Поиск в ширину

Храним сет замен, для каждого выхода считаем все замены и комбинируем с предыдущими

14

17

7

12

Ленивый поиск в глубину

Для каждой замены рекурсивно вызываем поиск в глубину

12

5

16

12

Ленивый поиск в глубину с хешированием

Досчитав все замены текущего выхода, сохраним их в хеш-таблицу

16

19

18

12

Ограничение по времени ≈ сутки

16 of 27

Маски

  •  

/22

16

 

 

17 of 27

Маски

Ленивый поиск в глубину с хешированием не совместим с масками, потому что потребуется много памяти, будет мало переиспользования.

/22

17

Подход

A (21 шт.)

B (27 шт.)

C (29 шт.)

D (13 шт.)

Поиск в ширину

Ленивый поиск в глубину

18 of 27

Перестановка выходов

  •  

/22

18

Выход

Трансформации

Анализ не обработанных таблиц пролил свет на такой случай:

19 of 27

Перестановка выходов

  •  

/22

19

Выход

Трансформации

Сделаем перестановку выходов:

20 of 27

Перестановка выходов

Для того, чтобы обработать последнюю таблицу, я воспользовался информацией о её структуре.

/22

20

Подход

A (21 шт.)

B (27 шт.)

C (29 шт.)

D (13 шт.)

Поиск в ширину

Ленивый поиск в глубину

Суммарно

21

27

29

12

21 of 27

Скрипт для генерации формул (BENCH)

BENCH файл

/22

21

INPUT(x0)

INPUT(x1)

x0_inv = NOT(x0)

y0 = AND(x0_inv, x1)

y1 = OR(x0_inv, y0)

OUTPUT(y0)

OUTPUT(y1)

INPUT(x1_inv)

x1 = NOT(x1_inv)

INPUT(x0)

x0_inv = NOT(x0)

y0 = AND(x0_inv, x1)

y1 = OR(x0_inv, y1)

OUTPUT(y0)

y1_inv = NOT(y1)

OUTPUT(y1_inv)

Новый BENCH файл:

 

 

22 of 27

Результаты

  • Было реализовано семейство эффективных алгоритмов для поиска совпадений таблиц истинности
  • Был реализован скрипт для генерации формул по заданной трансформации
  • Были сгенерированы 100 оптимальных формул для таблиц из соревнования

/22

22

23 of 27

Вопрос №2

Когда алгоритм находит возможную трансформацию, запускается функция, которая проходит по строкам и сравнивает их посимвольно.

Так как перестановки столбцов таблицы истинности затрагивают много столбцов, появилась идея, что можно сравнивать не все значения.

Множество проверяемых значений можно выбрать случайно, но для того, чтобы провести эксперимент, я решил ходить по строкам с шагом.

/22

23

24 of 27

Вопрос №2

Идея была проверена на одной из таблиц

/22

24

Шаг

Количество промахов

Процент промахов (%)

Время

работы (с)

1

0

0

7,1

10

1

0,09

6,8

100

1

0,09

6,4

120

2

0,18

5,5

130

9

0,88

6,2

300

16

1,56

6,7

1000

72

7,03

6,9

Параметр таблицы

Значение

Количество входов

10

Длина

1024

Количество трансформаций

355

25 of 27

Последняя таблица

Последняя таблица представляет собой худший случай алгоритма поиска подстановок – много одинаковых наборов.

/22

25

[20192, 12576, 21824, 10944]

[20192, 12576, 21824, 10944]

[21824, 10944, 20192, 12576]

[20192, 12576, 21824, 10944]

[19648, 13120, 22368, 10400]

[22368, 10400, 19648, 13120]

[22368, 10400, 19648, 13120]

[21824, 10944, 20192, 12576]

[20192, 12576, 21824, 10944]

[21824, 10944, 20192, 12576]

[21824, 10944, 20192, 12576]

[22368, 10400, 19648, 13120]

[22368, 10400, 19648, 13120]

[19648, 13120, 22368, 10400]

[22368, 10400, 19648, 13120]

[22368, 10400, 19648, 13120]

Одним цветом указаны наборы, равные с точностью до инвертирований.

 

26 of 27

Последняя таблица

  •  

/22

26

OR

AND

AND

F

 

 

 

 

 

 

 

27 of 27

Скрипт для проверки получившихся BENCH файлов

Была использована система ABC (система для синтеза и верификации) для проверки того, что:

  • Сгенерированный BENCH файл соответствует таблице истинности
  • Сгенерированный BENCH файл не стал больше оригинального (больше не по размеру, по количеству AND узлов)

/22

27