#linear-programming #pulp
#линейное программирование #мякоть
Вопрос:
Я решал следующую проблему с линейным программированием: у нас есть несколько массивов данных, которые все состоят примерно из 4 базовых массивов. Мы знаем пропорцию каждого базового массива и пытаемся выяснить, какие базовые массивы приводят к наименьшей ошибке.
В качестве примера с 2 базовыми массивами:
data1: 1 2 3 4 5; 1.0/0.0 data2: 3 3 3 3 3; 0.5/0.5 data3: 5 4 3 2 1; 0.0/1.0
С помощью этого ввода мы можем сделать вывод, что базовый массив 1 есть 1 2 3 4 5
, а базовый массив 2 есть 5 4 3 2 1
, так как это назначение приведет к ошибке 0.
В частности, у нас есть 5 переменных для массива 1, который мы пытаемся оценить, и 5 переменных для массива 2. Данные 2 приведут к ограничениям:
posError1 gt;= 3 - arr_1_0 * 0.5 arr_2_0 * 0.5 posError1 gt;= arr_1_0 * 0.5 arr_2_0 * 0.5 - 3 posError2 gt;= 3 - arr_1_1 * 0.5 arr_2_1 * 0.5 posError2 gt;= arr_1_1 * 0.5 arr_2_1 * 0.5 - 3 posError3 gt;= 3 - arr_1_2 * 0.5 arr_2_2 * 0.5 posError3 gt;= arr_1_2 * 0.5 arr_2_2 * 0.5 - 3 posError4 gt;= 3 - arr_1_3 * 0.5 arr_2_3 * 0.5 posError4 gt;= arr_1_3 * 0.5 arr_2_3 * 0.5 - 3 posError5 gt;= 3 - arr_1_4 * 0.5 arr_2_4 * 0.5 posError5 gt;= arr_1_4 * 0.5 arr_2_4 * 0.5 - 3
В конце концов, мы минимизируем error
, что является суммой всего posErrorX
.
Обычно каждый массив данных содержит около 100 тыс. записей, а у нас около 10 массивов данных и 4 базовых массива.
Это было решаемо с помощью достаточно мощной машины с целлюлозой. Однако сейчас мы находимся в ситуации, когда мы знаем только, в каком проценте включены 2 наших базовых массива, поэтому нам нужно выяснить еще одну переменную на массив данных. Таким образом, у нас было бы x/0,5-x/0,2/0,3 вместо того, чтобы знать все 4 значения. Это не очень большое изменение, за исключением того, что теперь у нас есть нелинейная проблема. Как лучше всего это сделать?
Я не смог линеаризовать эту проблему, есть ли метод, который смог бы решить эту проблему в разумные сроки?
Комментарии:
1. Я изо всех сил стараюсь следить за деталями вашей новой формулировки. Не могли бы вы, пожалуйста, сформулировать это математически, обязательно уточнив, какие части вашей формулировки являются данными, а какие переменными для принятия решений?
2. Можете ли вы отредактировать свой пост и более четко объяснить, что вы подразумеваете под «мы знаем только, какой процент 2 наших базовых массивов включен в …» Я думаю, что понимаю, что у вас есть 4 «базовых массива», которые являются векторами 100 тыс. неизвестных переменных. Вы хотите сказать, что знаете (для каждого массива в 10 массивах данных, какой пропорциональный вклад приходится на 2 неизвестных массива? Было бы странно знать пропорциональный вклад вектора неизвестных… ??