Разработка алгоритма для поиска совпадений таблиц истинности
Воробьев Алексей Михайлович
Руководитель: Куликов Александр Сергеевич
Разработка Программного Обеспечения
Университет ИТМО
2024
Актуальность
/22
2
Таблица
Соответствует ли таблице 1
Формула 1
Соответствует ли таблице 2
Формула 2
Соответствует ли таблице 3
Формула 3
База данных оптимальных формул
Логический синтез – процесс получения наиболее оптимальной логической формулы по заданной таблице истинности. Наиболее часто данная задача встречается в цифровой электронике.
Таблицы истинности
/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 выхода)
Трансформации
/22
4
Трансформация выхода
Результирующая таблица истинности
Исходная таблица истинности
Трансформация таблицы
Актуальность
/22
5
Таблица
Соответствует ли таблице 1 с трансформацией
Формула 1
Соответствует ли таблице 2 с трансформацией
Формула 2
Соответствует ли таблице 3 с трансформацией
Формула 3
База данных оптимальных формул
Найденная трансформация
Найденная трансформация
Найденная трансформация
Объединим таблицы, равные с точностью до трансформаций, в один кластер и будем хранить одну оптимальную формулу для каждого кластера.
Конференция IWLS
IWLS – это международная конференция по логическому синтезу.
Наша команда в данный момент участвует в соревновании.
Надо найти оптимальные формулы для 100 таблиц.
/22
6
Таблицы соревнования имеют количество переменных от 6 до 16.
Анализ существующих решений
/22
7
Цель: реализовать эффективный алгоритм для поиска совпадений таблиц истинности и генерации оптимальных логических формул.
Задачи:
/22
8
Фиктивные входы и выходы
/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
Сокращённая таблица истинности
Тривиальные подходы
Полный перебор был реализован для проверки алгоритма на небольших таблицах истинности.
/22
10
Полный перебор | Использование SAT солвера |
| |
| |
Полезные наблюдения
/22
11
| 0010 |
| 0110 |
| 1011 |
Идея алгоритма
Для каждой переменной определим набор:
/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 |
Идея алгоритма
При инвертировании входа инвертируется первый индекс:
/22
13
При инвертировании выхода инвертируется второй индекс:
Данные наборы сохраняются (с точностью до инвертирований) при перестановках и инвертированиях переменных, с помощью этого можно упростить перебор.
Поиск общей трансформации
Каждый выход может иметь много трансформаций, нам надо найти общую трансформацию.
/22
14
Трансформации конфликтуют:
Трансформации не конфликтуют:
Общая трансформация:
Преобразование множеств трансформаций:
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 |
Ограничение по времени ≈ сутки
Маски
/22
16
Маски
Ленивый поиск в глубину с хешированием не совместим с масками, потому что потребуется много памяти, будет мало переиспользования.
/22
17
Подход | A (21 шт.) | B (27 шт.) | C (29 шт.) | D (13 шт.) |
Поиск в ширину | | | | |
Ленивый поиск в глубину | | | | |
Перестановка выходов
/22
18
Выход | Трансформации |
| |
| |
| |
Анализ не обработанных таблиц пролил свет на такой случай:
Перестановка выходов
/22
19
Выход | Трансформации |
| |
| |
| |
Сделаем перестановку выходов:
Перестановка выходов
Для того, чтобы обработать последнюю таблицу, я воспользовался информацией о её структуре.
/22
20
Подход | A (21 шт.) | B (27 шт.) | C (29 шт.) | D (13 шт.) |
Поиск в ширину | | | | |
Ленивый поиск в глубину | | | | |
Суммарно | 21 | 27 | 29 | 12 |
Скрипт для генерации формул (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
22
Вопрос №2
Когда алгоритм находит возможную трансформацию, запускается функция, которая проходит по строкам и сравнивает их посимвольно.
Так как перестановки столбцов таблицы истинности затрагивают много столбцов, появилась идея, что можно сравнивать не все значения.
Множество проверяемых значений можно выбрать случайно, но для того, чтобы провести эксперимент, я решил ходить по строкам с шагом.
/22
23
Вопрос №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 |
Последняя таблица
Последняя таблица представляет собой худший случай алгоритма поиска подстановок – много одинаковых наборов.
/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] |
Одним цветом указаны наборы, равные с точностью до инвертирований.
Последняя таблица
/22
26
OR
AND
AND
F
Скрипт для проверки получившихся BENCH файлов
Была использована система ABC (система для синтеза и верификации) для проверки того, что:
/22
27