1

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

Проблема состоит из двух векторов данных: 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

Это, похоже, больше о том, как сделать алгоритм, а не о том, как писать код. Я также не понимаю, что вы просите. – Llopis

+0

Вы действительно не объяснили, что вы пытаетесь сделать вообще. Что вы подразумеваете под «Минимизировать разницу между левой/правой сторонами»? Можете привести несколько примеров? Кроме того, в Stackoverflow вы должны показать нам, какой код вы пытались до сих пор. – SashaZd

ответ

0

Создать экземпляр LpProblem:.

problem = LpProblem("Another LpProblem", LpMinimize) 

Цель (за то, что вы смутно описаны выше):

problem += (mean(P_{A,W}) - (A_w - C_w)) + (mean(P_{B,W}) - (B_w + C_w)) 

Это все, что я мог бы сказать от вашего действительно довольно расплывчатого вопроса вы должен быть гораздо более конкретным с тем, что вы имеете в виду. такие термины, как «вернуть результаты вместе» или «обрабатывать негатив ive в C_w ". Добавьте в свои текущие фрагменты кода и ошибки, которые вы получаете для получения более подробной информации.

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