2016-03-06 5 views
0

Мне нужно создать таблицу фонем с определенным распределением вероятности для кодирования вещей. Теперь существует 22 базовых элемента (каждый с заданной вероятностью, сумма 100%), которые должны отображаться в таблице из 12 элементов, которая имеет желаемых вероятности элемента (сумма 100%).Matlab нелинейный двоичный Минимизация

Таким образом, часть минимизации заключается в объединении нескольких базовых элементов для получения 12 элементов таблицы. Каждый базовый элемент должен выполняться ровно один раз.

Кроме того, таблица имеет 3 ряда. Таким образом, тот же 12-элементный состав из 22 базовых элементов должен минимизировать ошибку для трех целевых векторов. Скажем, данные целевые векторы b1, b2, b3 (размер 12х1), то данное основание вектор х (размер 22x1), и они связаны неизвестной матрицы А (12x22) по:

b1 + Err1 = Ах

b2 + ERR2 = Ах

b3 + ERR3 = Ах

Подводя итог: А можно найти так что dot_prod (Err1 + ERR2 + ERR3, Err1 + err2 + err3) = min (наименьшие квадраты). И - согласно приведенному выше объяснению - A должен содержать только 1 и 0, имея ровно по одному на столбец.

К сожалению, я не знаю, как подойти к этой проблеме. Может ли это быть выражено иначе, чем матрично-векторная форма? Какие инструменты в Matlab могли бы сделать это?

+0

Вы ищете A или x? – percusse

+0

Типичным решением для этого является 'x '\ b'', но это не будет ограничивать записи A целыми числами 1-0. Это более сложная проблема, связанная с линейным программированием 0-1. Если у вас больше ограничений, вы можете попытаться добавить их, сумма столбцов будет равна 1 строке суммы 1 и т. Д., Чтобы помочь оптимизации. – percusse

+0

Правильно, x '\ b' будет делать это для произвольных матриц A. Любая идея о том, как реализовать до 2 требований для A? – flok3r

ответ

0

Я думаю, что нашел ответ, разбирая некоторые разделы документации Matlab.

Прежде всего, эта проблема может быть переписано как:

errSum = ERR1 + ERR2 + ERR3 = 3Ax-b1-b2-b3

=> dot_prod (errSum, errSum) = мин (A)

Применение точечного произведения (наименьшие квадраты) дает квадратичное скалярное выражение.

Синтаксис, fmincon Инструмент в пределах поля оптимизации может выполнять эту работу. Он имеет параметры ограничений, которые позволяют заставить Aij быть двоичным, а каждый столбец равен 1.

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

Поскольку уравнение было бы очень длинным в моем случае и должно быть выписано, я еще не пробовал. Пожалуйста, поправьте меня, если я ошибаюсь. Или добавьте дополнительные методы решения, если они доступны.

 Смежные вопросы

  • Нет связанных вопросов^_^