Разработка целевой функции для целочисленного линейного программирования
Я работаю над созданием целевой функции для модели целочисленного линейного программирования. Цель состоит в том, чтобы определить количество копий двух генов, а также произошло ли событие конверсии генов (когда одна копия перезаписывается другой, похоже, что одна была удалена, но номер сетевой копии не изменился).
Проблема включает в себя два вектора данных, P_A
а также P_B
, Векторы содержат непрерывные значения, большие нуля, которые соответствуют показателю количества копий, выполненному в каждой позиции. P_{A,i}
не обязательно в том же месте по гену, как P_{B,i}
потому что позиции уникальны для каждой копии (и могут быть сопоставлены с абсолютной позицией в геноме).
Учитывая это, я планировал попытаться минимизировать разницу между моими переменными решения и измеренными данными в разных окнах генома, давая мне разные срезы двух векторов данных, которые соответствуют одной и той же области.
Переменные решения:
A_w = copy number of A in window in {0,1,2,3,4}
B_w = copy number of B in window in {0,1,2,3,4}
C_w = gene conversion in {-2,-1,0,1,2}
Тогда цель состоит в том, чтобы минимизировать разницу между левой и правой сторонами приведенных ниже уравнений:
A_w - C_w ~= mean(P_{A,W})
B_w + C_w ~= mean(P_{B,W})
С учетом нескольких ограничений, таких как 2 <- A_w + B_w <= 4
Но я не уверен, как сформулировать это в функцию, чтобы минимизировать. У меня есть два уравнения, которые на самом деле не являются функциями, и переменные решения не имеют коэффициентов.
Я также не уверен, как обращаться с отрицательными значениями C_w
,
Я также не уверен, как вернуть результаты вместе; после того, как я решу LP в каждом окне, мне все еще нужно объединить его в один общегенетический вызов (и в идеале определить, какие окна имеют ненулевые значения C_w
,
1 ответ
Создайте экземпляр LpProblem:
problem = LpProblem("Another LpProblem", LpMinimize)
Цель (согласно тому, что вы смутно описали выше):
problem += (mean(P_{A,W}) - (A_w - C_w)) + (mean(P_{B,W}) - (B_w + C_w))
Это все, что я могу сказать по твоему действительно довольно расплывчатому вопросу. Вам нужно быть более конкретным с тем, что вы подразумеваете под такими терминами, как "вернуть результаты вместе" или "обрабатывать отрицательные значения в C_w". Добавьте в ваш текущий фрагмент кода и ошибки, которые вы получаете, для более подробной информации.