QUBO как демонстрация разницы между математиком и инженером
QUBO (Quadratic unconstrained binary optimization) это метод поиска оптимального решения. В основе метода формулирование задачи в виде матрицы Q. Решение задачи - бинарный вектор x. Упрощено метод решения можно представить так:
xT * Q * x -> min
Суть решения задачи - определить такой бинарный вектор, при котором "энергия" минимальна. Код, который напишет математик, будет выглядеть примерно так:
int[] x = new int[size]; //... for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { // Вычисление значения целевой функции: x^T * Q * x energy += x[i] * Q[i, j] * x[j]; } }
Это прямое выражение математической модели. Но инженер должен учесть постановку задачи (бинарный вектор) и знать, что исполнять код будет реальный компьютер с ограниченными ресурсами. А значит написать его иначе:
BitVector32 x = new(); //... for (var row = 0; row < size; row++) { for (var column = 0; column < size; column++) { if (x[row] && x[column]) { energy += Q[row, column]; } } }
Пример крайне простой, а потому наглядный. Спросите у LLM :-) В общем, математика и программирование - это не одно и то же.
