Как решить наименьшее абсолютное отклонение симплекс-методом?


12

Вот проблема наименьшего абсолютного отклонения в данной области:, Я знаю, что это может быть перестроено как проблема LP следующим образом:argminwL(w)=i=1n|yiwTx|

mini=1nui

uixTwyii=1,,n

ui(xTwyi)i=1,,n

Но я понятия не имею, чтобы решить это шаг за шагом, так как я новичок в LP. Есть ли у вас какие-либо идеи? Заранее спасибо!

РЕДАКТИРОВАТЬ:

Вот последний этап, который я достиг в этой проблеме. Я пытаюсь решить проблему, следуя этой заметке :

Шаг 1: Формулировка в стандартную форму

minZ=i=1nui

xTwui+s1=yii=1,,n

xTw+ui+s2=yii=1,,n

с учетом s10;s20;ui0 i=1,...,n

Шаг 2: Построить начальную таблицу

           |      |    0      |    1   |  0  |   0   |   0    
 basic var | coef |  $p_0$    |  $u_i$ |  W  | $s_1$ | $s_2$ 
      $s_1$| 0    |  $y_i$    |   -1   |  x  |   1   |   0
      $s_2 | 0    |  $-y_i$   |    1   |  x  |   0   |   1
      z    |      |    0      |    -1  |  0  |   0   |   0

Шаг 3: Выберите основные переменные

ui выбран в качестве входной базовой переменной. Здесь возникает проблема. При выборе выходной базовой переменной очевидно, что yi/1=yi/1=yi . Согласно примечанию, если yi0 , задача имеет неограниченное решение.

Я полностью потерян здесь. Интересно, если что-то не так и как я должен продолжать следующие шаги.


2
Прагматически, вы используете линейный программный решатель вместо того, чтобы писать свой собственный. Я рекомендую Гуроби.
Мэтью Друри

1
@ MatthewDrury Спасибо за ответ. Но я хочу точно знать, как работает LP в этой проблеме, а не просто принимать ответ.
южная дверь

1
Знаете ли вы, или вы Google "симплекс метод"?

2
Линейная программа - это просто формулировка вашей задачи с точки зрения максимизации (или минимизации) линейной целевой функции с учетом некоторых линейных ограничений. Это не "решает" себя. Существует множество алгоритмов, которые решают эти специально разработанные программы, одним из наиболее часто используемых является Simplex
Łukasz Grad

1
@fcop Да, действительно, я прочитал некоторые заметки о симплекс-методе. Но я понятия не имею, как сгенерировать это для этой проблемы. Так как примеры в этих заметках очень просты и конкретны. Не могу найти начала с общих проблем. Я уже провел две ночи в этой проблеме, но все еще в замешательстве. Сожалею.
южная дверь

Ответы:


5

Вам нужен пример для решения наименьшего абсолютного отклонения с помощью линейного программирования. Я покажу вам простую реализацию в R. Квантильная регрессия - это обобщение наименьшего абсолютного отклонения, которое имеет место для квантиля 0,5, поэтому я покажу решение для квантильной регрессии. Затем вы можете проверить результаты с помощью quantregпакета R :

rq_LP  <-  function(x, Y, r=0.5, intercept=TRUE) {
    require("lpSolve")
    if (intercept) X  <-  cbind(1, x) else X <-  cbind(x)
    N   <-  length(Y)
    n  <-  nrow(X)
    stopifnot(n == N)
    p  <-  ncol(X)
    c  <-  c(rep(r, n), rep(1-r, n), rep(0, 2*p))  # cost coefficient vector
    A  <- cbind(diag(n), -diag(n), X, -X)
    res  <-  lp("min", c, A, "=", Y, compute.sens=1)
### Desempaquetar los coefs:
    sol <- res$solution
    coef1  <-  sol[(2*n+1):(2*n+2*p)]
    coef <- numeric(length=p)
    for (i in seq(along=coef)) {
         coef[i] <- (if(coef1[i]<=0)-1 else +1) *  max(coef1[i], coef1[i+p])
    }
    return(coef)
    }

Затем мы используем это в простом примере:

library(robustbase)
data(starsCYG)
Y  <- starsCYG[, 2]
x  <- starsCYG[, 1]
rq_LP(x, Y)
[1]  8.1492045 -0.6931818

тогда вы сами можете сделать проверку с quantreg.


2
+1 Я большой поклонник делания вещей вручную, а потом сравниваю!
Haitao Du

3
Для поста с чуть более подробным объяснением см. Квантильная регрессия
Стоп, закрытие вопросов, быстрое,

2

Линейное программирование может быть обобщено с помощью выпуклой оптимизации, где помимо симплекса доступно много более надежных алгоритмов.

Я бы посоветовал вам проверить The Convex Optimization Book и набор инструментов CVX, который они предоставили. Где вы можете легко сформулировать наименьшее абсолютное отклонение с регуляризацией.

https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf

http://cvxr.com/cvx/


2
Спасибо за Ваш ответ. Но когда я пытаюсь найти термин «симплекс метод» в книге, я не могу найти ни одного. А набор инструментов CVX - это всего лишь инструмент для принятия входных данных в качестве задачи LP и запуска алгоритма. Но то, что я действительно хочу, - то, как алгоритм работает в этой проблеме. Ни конечного результата, ни того, как сформулировать проблему. Но шаг, чтобы получить результат. спасибо
southdoor
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.