पुराना सवाल है, लेकिन जब से मैं उसी समस्या का सामना कर रहा हूँ मैंने सोचा कि मैं अपना 2p पोस्ट करूँ ...
@ एल्विस द्वारा सुझाए गए द्विघात प्रोग्रामिंग का उपयोग करें लेकिन प्रकर्मा पैकेज से sqlincon का उपयोग करें । मुझे लगता है कि बाधाओं को निर्दिष्ट करने के लिए अधिक लाभ एक सरल उपयोगकर्ता इंटरफ़ेस है। (वास्तव में, चारों ओर एक आवरण है )।quadrpog::solve.QP
lsqlincon
solve.QP
उदाहरण:
library(pracma)
set.seed(1234)
# Test data
X <- matrix(runif(300), ncol=3)
Y <- X %*% c(0.2, 0.3, 0.5) + rnorm(100, sd=0.2)
# Equality constraint: We want the sum of the coefficients to be 1.
# I.e. Aeq x == beq
Aeq <- matrix(rep(1, ncol(X)), nrow= 1)
beq <- c(1)
# Lower and upper bounds of the parameters, i.e [0, 1]
lb <- rep(0, ncol(X))
ub <- rep(1, ncol(X))
# And solve:
lsqlincon(X, Y, Aeq= Aeq, beq= beq, lb= lb, ub= ub)
[1] 0.1583139 0.3304708 0.5112153
एल्विस के समान परिणाम:
library(quadprog)
Rinv <- solve(chol(t(X) %*% X));
C <- cbind(rep(1,3), diag(3))
b <- c(1,rep(0,3))
d <- t(Y) %*% X
solve.QP(Dmat = Rinv, factorized = TRUE, dvec = d, Amat = C, bvec = b, meq = 1)$solution
संपादित करें यहाँ कुछ स्पष्टीकरण के लिए गोंग की टिप्पणी को संबोधित करने का प्रयास करें । sqlincon ने matlab के lsqlin का अनुकरण किया जिसमें एक अच्छा सहायता पृष्ठ है। यहाँ प्रासंगिक बिट्स के साथ कुछ (मामूली) मेरे संपादन हैं:
X
गुणक मैट्रिक्स, युगल के मैट्रिक्स के रूप में निर्दिष्ट। C, अभिव्यक्ति x * Y में C हल x के गुणक का प्रतिनिधित्व करता है। C, M-by-N है, जहाँ M समीकरणों की संख्या है, और N, x के तत्वों की संख्या है।
Y
लगातार वेक्टर, युगल के वेक्टर के रूप में निर्दिष्ट। Y अभिव्यक्ति C * x में योगात्मक निरंतर शब्द का प्रतिनिधित्व करता है - Y. Y, M-by-1 है, जहाँ M समीकरणों की संख्या है।
Aeq
: रैखिक समानता बाधा मैट्रिक्स, युगल के मैट्रिक्स के रूप में निर्दिष्ट। Aeq बाधाओं में रैखिक गुणांक का प्रतिनिधित्व करता है Aeq * x = beq। Aeq का आकार Meq-by-N है, जहां Meq बाधाओं की संख्या है और N, x के तत्वों की संख्या है
beq
रैखिक समानता बाधा वेक्टर, युगल के वेक्टर के रूप में निर्दिष्ट। beq बाधाओं में निरंतर वेक्टर का प्रतिनिधित्व करता है Aeq * x = beq। beq की लंबाई Meq है, जहाँ Aeq Meq-by-N है।
lb
निचले सीमा, युगल के वेक्टर के रूप में निर्दिष्ट। lb, represents x ub represents lb में कम सीमा वाले तत्व का प्रतिनिधित्व करता है।
ub
ऊपरी सीमा, युगल के वेक्टर के रूप में निर्दिष्ट। ub lb ≤ x। ub में ऊपरी सीमा तत्व को दर्शाता है।