Як вирішити найменше абсолютне відхилення симплексним методом?


12

аргхвшL(ш)=i=1н|уi-шТх|

хвi=1нуi

уiхТш-уii=1,,н

уi-(хТш-уi)i=1,,н

Але я не маю ідеї вирішувати це поетапно, оскільки я новачок у LP. У вас є ідея? Спасибі заздалегідь!

Редагувати:

Ось останній етап, який я досяг у цій проблемі. Я намагаюся вирішити проблему, слідуючи цій примітці :

Крок 1: Формулювання його до стандартної форми

хвZ=i=1нуi

хТш-уi+с1=уii=1,,н

хТш+уi+с2=-уii=1,,н

за умовис10;с20;уi0 i=1,...,н

Крок 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: Виберіть основні змінні

y i / - 1 = - y i / 1 = - y i y i0уi обрана вхідною базовою змінною. Тут виникає проблема. Вибираючи вихідну базову змінну, очевидно, що . Згідно з приміткою, якщо , проблема має необмежене рішення.уi/-1=-уi/1=-уiуi0

Я тут абсолютно загублений. Цікаво, чи є щось не так і як слід продовжувати наступні кроки.


2
Прагматично ви використовуєте лінійну програмну розв'язку замість того, щоб писати власну. Я рекомендую гуробі.
Меттью Друрі

1
@MatthewDrury Дякуємо за вашу відповідь. Але я хочу точно знати, як працює LP у цій проблемі, а не просто приймати відповідь.
південний зал

1
Чи знаєте ви чи вчинили в Google "симплексний метод"?

2
Лінійна програма - це лише постановка вашої проблеми з точки зору максимізації (або мінімізації) функції лінійної цілі з урахуванням деяких лінійних обмежень. Він не сам "вирішує". Існує маса алгоритмів, які вирішують ці спеціально сформульовані програми. Один з найбільш часто використовуваних - Simplex
Łukasz Grad

1
@fcop Так, я дійсно прочитав деякі примітки симплексного методу. Але я поняття не маю, як породжувати це до цієї проблеми. Оскільки приклади в цих записках дуже прості та конкретні. Не можу знайти початок із загальних проблем. Я вже провів дві ночі в цій проблемі, але все ще розгублений. Вибачте.
південний зал

Відповіді:


5

Ви хочете приклад для вирішення найменшого абсолютного відхилення лінійним програмуванням. Я покажу вам просту реалізацію в Р. Квантільна регресія - це узагальнення найменшого абсолютного відхилення, що стосується квантиля 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 Я великий фанат робити речі вручну і по-іншому, а потім порівнювати!
Хайтао Ду

3
Повідомлення з трохи більше пояснень див. Квантовою регресією
Зупиніть закриття питань Швидкий

2

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

Я б запропонував вам переглянути книгу оптимізації конвексів та пакет інструментів 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.