Я пытаюсь оптимизировать расположение набора коробок w.r.t. места их вешалок s.t. ящики максимально выровнены со своими вешалками и не вытесняют друг друга. С помощью квадропрограммы.
Давы:
1. box hanger x-locations (P). =710 850 990 1130
2. box-sizes (W). =690 550 690 130
3. usable x-spread tuple (S). =-150 2090
4. number of boxes (K). =4
5. minimum interbox spread (G). =50
6. box x-locations (X). =objective
Мы видим, что общий требуемый разброс по оси x равен sum(W) + 3G = 2060 + 150 = 2210, тогда как доступный разброс по оси x равен S[2] - S1 = 2240. Итак, решение должно существовать.
Мин:
sumof (P[i] – X[i])^2
s.t.:
(1) X[i+i] – X[i] >= G + ½ ( W[i+1] + W[i] ); i = 1..(K-1), т.е. ящики не вытесняют друг друга
-X[i] + X[i+1] >= -( -G – ½ (W[i+1] + W[i]) )
(2) X1 >= S[left] + ½ W1 и (3) X[K] ‹= S[right] – ½ W[K], т.е. ящики находятся в пределах заданного x-разброса
X[1] >= - ( S[left] + ½ W[1] )
-X[K] >= - ( S[right] – ½ W[K] )
всего 5 ограничений - 3 для межбоксового разворота и 2 для конечностей.
in R:
> Dmat = matrix(0,4,4)
> diag(Dmat) = 1
> dvec = P, the hanger locations
[1] 710 850 990 1130
> bvec
[1] -670 -670 -460 -195 2025
> t(Amat)
[,1] [,2] [,3] [,4]
[1,] -1 1 0 0
[2,] 0 -1 1 0
[3,] 0 0 -1 1
[4,] 1 0 0 0
[5,] 0 0 0 -1
> solve.QP(Dmat, dvec, Amat, bvec)
Error in solve.QP(Dmat, dvec, Amat, bvec) :
constraints are inconsistent, no solution!
Совершенно очевидно, что я пропустил или неправильно определил проблему (Пакет 'quadprog'< /а>)! Я использую quadprog, так как нашел его порт JavaScript.
Большое спасибо.