Разработка целевой функции для целочисленного линейного программирования

Я работаю над созданием целевой функции для модели целочисленного линейного программирования. Цель состоит в том, чтобы определить количество копий двух генов, а также произошло ли событие конверсии генов (когда одна копия перезаписывается другой, похоже, что одна была удалена, но номер сетевой копии не изменился).

Проблема включает в себя два вектора данных, 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". Добавьте в ваш текущий фрагмент кода и ошибки, которые вы получаете, для более подробной информации.

Другие вопросы по тегам