用R

用R,r,optimization,constraints,quadprog,quadratic-programming,R,Optimization,Constraints,Quadprog,Quadratic Programming,我真的很喜欢R,但有时它真的让我头疼 我有以下简单的二次极小化问题,可以在Excel中很快制定和解决(单击图片放大): 及 问题本身非常简单:我想通过找到w1、w2和b的最佳组合,在所有Y*(w1*X1+w2*X2+b)>=1的约束条件下最小化(w1^2+w2^2)/2 我知道有解决这类问题的quadprog软件包,但我发现它太不直观,以至于我无法正确地指定问题:-(我不想这么说,但Excel似乎更适合指定以下优化问题:-((( 我的问题 如何正确地表述上述问题,以便用R(无论是哪个包)解决

我真的很喜欢R,但有时它真的让我头疼

我有以下简单的二次极小化问题,可以在Excel中很快制定和解决(单击图片放大):

问题本身非常简单:我想通过找到
w1
w2
b
的最佳组合,在所有
Y*(w1*X1+w2*X2+b)>=1的约束条件下最小化
(w1^2+w2^2)/2

我知道有解决这类问题的
quadprog
软件包,但我发现它太不直观,以至于我无法正确地指定问题:-(我不想这么说,但Excel似乎更适合指定以下优化问题:-(((

我的问题
如何正确地表述上述问题,以便用R(无论是哪个包)解决它,并使程序得到
w1
w2
b
的正确值(如上图所示)。请不要只是发布链接,但请给出实际的代码。如果您可以对代码进行注释,以便清楚地了解您为什么要做这些事情,那将是非常棒的。谢谢

必要的数据如下:

data <- matrix(c(2.947814,6.626878, 1,
                 2.530388,7.785050, 1,
                 3.566991,5.651046, 1,
                 3.156983,5.467077, 1,
                 2.582346,4.457777,-1,
                 2.155826,6.222343,-1,
                 3.273418,3.520687,-1),ncol=3,byrow=T)
colnames(data) <- c("X1","X2","y")

data实际上,这个问题有点棘手,因为
b
只存在于不等式约束矩阵中,而不存在于目标函数中。因此,二次规划问题中的矩阵只有半正定矩阵,而不是正定矩阵

因此,我的方法是将对应于
b
的矩阵项设置为一个非常小的值——在我的例子中是
1e-9
。其他更熟悉此类优化问题的人可能知道如何正确解决问题

计算
solve.QP
输入

c1=data[,"X1"]*data[,"y"]
c2=data[,"X2"]*data[,"y"]

#I use 1e-9 for the b entry
Dmat=matrix(`[<-`(numeric(9),c(1,5,9),c(1,1,1e-9)),3,3)
dvec=rep(0,3)
Amat=cbind(c1,c2,data[,"y"])
bvec=rep(1,nrow(Amat))

与excel一样。

实际上,问题有点棘手,因为
b
只存在于不等式约束矩阵中,而不存在于目标函数中。因此,二次规划问题中的矩阵仅为半正定矩阵,而非正定矩阵

因此,我的方法是将对应于
b
的矩阵项设置为一个非常小的值——在我的例子中是
1e-9
。其他更熟悉此类优化问题的人可能知道如何正确解决问题

计算
solve.QP
输入

c1=data[,"X1"]*data[,"y"]
c2=data[,"X2"]*data[,"y"]

#I use 1e-9 for the b entry
Dmat=matrix(`[<-`(numeric(9),c(1,5,9),c(1,1,1e-9)),3,3)
dvec=rep(0,3)
Amat=cbind(c1,c2,data[,"y"])
bvec=rep(1,nrow(Amat))

与excel相同。

excel图片没有告诉我您实际想要实现的目标。您应该在问题中解释这一点。excel似乎与您的实际问题无关。如果您认为我会找出这些excel单元格引用,请三思。@Roland:问题本身很简单,我相应地编辑了问题-现在这样更好了吗?这里有很多关于这个主题的问题和答案。我觉得你要求答案而没有链接是不礼貌的。这不是一个代码编写服务,我们也不是你的员工。你不是第一个询问优化的人。这样做的目的是创建问题和答案的存储库,供以后研究。所以我们“只需发布链接”有时会使用已经共享的信息。@Pierrelaffortune:如果你觉得这很粗鲁,那么我必须道歉。我看到了许多问题和答案,猜怎么着:我仍然无法用R解决上述问题-这就是我问这个问题的原因(并不是为了冒犯你)。那张Excel图片没有告诉我你真正想要实现什么。你应该在问题中解释这一点。Excel似乎与你的实际问题无关。如果你认为我会找出这些Excel单元格引用,请再想一想。@Roland:问题本身很简单,我相应地编辑了问题-现在好点了吗?H关于这个话题有很多问题和答案。我觉得你要求答案而没有链接是不礼貌的。这不是一个代码编写服务,我们也不是你的员工。你不是第一个询问优化的人。所以的目的是创建问题和答案的存储库,以后可以进行研究。所以我们“只发布链接”“有时我会使用已经共享的信息。@Pierrelaffortune:如果你觉得这很粗鲁,那么我必须道歉。我看到了许多问题和答案,猜怎么着:我仍然无法用R解决上述问题-这就是我问这个问题的原因(不是为了冒犯你)。