我想使用cvxopt求解器qp并计算拉格朗日乘数,但我想知道它是如何“完全”的。我试图找到更多的信息,但没有太多关于cvxopt的信息。我正在研究这个示例问题,我不确定这些变量的含义以及它们如何提出解决方案。
示例是这样的:
minimize: 2x_{1}^{2} + x_{2}^{2} + x_{1}x_{2} + x_{1} + x_{2}
subject to: x_{1} >= 0
x_{2} >= 0
x_{1} + x_{2} = 1
可以使用
解决Q = 2*matrix([ [2, .5], [.5, 1] ])
p = matrix([1.0, 1.0])
G = matrix([[-1.0,0.0],[0.0,-1.0]])
h = matrix([0.0,0.0])
A = matrix([1.0, 1.0], (1,2))
b = matrix(1.0)
sol=solvers.qp(Q, p, G, h, A, b)
print(sol['x'])
答案 0 :(得分:7)
你应该看看这个:
为了解决二次规划问题,CVXopt接受一组矩阵,通常称为P,q,G,A和h。 您必须先将问题转换为CVXopt接受的特定形式(在链接中提到)。 目的是找到一个最优解,(在你的例子中,拉格朗日乘数),即矩阵'x'。
“存储”解决方案的对象有许多属性,其中一个是矩阵“x”,您可以打印或用于进一步计算。
答案 1 :(得分:0)
我不确定完整设置如何工作,但是基本设置如下所示。我正在使用文档中的this example。
BodyPart messageBodyPart ;
// Add HTML + image
// first part (the html)
messageBodyPart = new MimeBodyPart();
//multipart = new MimeMultipart("related");
messageBodyPart.setContent(Constantes.html + msg +"</h4>", "text/html");
// add it
messageBodyPart.setDisposition(MimeBodyPart.INLINE);
//multipart.addBodyPart(messageBodyPart);
// second part ( image 1)
BodyPart messageBodyPartSMSC = new MimeBodyPart();
DataSource fds = new FileDataSource(Constantes.imagePath + "logo1.png");
messageBodyPartSMSC.setDataHandler(new DataHandler(fds));
messageBodyPartSMSC.setHeader("Content-ID", "<logo1>");
// add image to the multipart
messageBodyPartSMSC.setDisposition(MimeBodyPart.INLINE);
// multipart.addBodyPart(messageBodyPart);
// second part ( image 2)
BodyPart messageBodyPartDEVB = new MimeBodyPart();
fds = new FileDataSource(Constantes.imagePath + "logo2.png");
messageBodyPartDEVB.setDataHandler(new DataHandler(fds));
messageBodyPartDEVB.setHeader("Content-ID", "<logo2>");
messageBodyPartDEVB.setDisposition(MimeBodyPart.INLINE);
// add image to the multipart
//multipart.addBodyPart(messageBodyPart);
// add attachment (zip file) ------------------------------
DataSource source = new FileDataSource(fileName);
BodyPart messageBodyPartZip = new MimeBodyPart();
messageBodyPartZip.setDataHandler(new DataHandler(source));
messageBodyPartZip.setFileName(onlyFileName);
messageBodyPartZip.setDisposition(MimeBodyPart.ATTACHMENT);
MimeMultipart multipart = new MimeMultipart("related");
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(messageBodyPartSMSC);
multipart.addBodyPart(messageBodyPartDEVB);
multipart.addBodyPart(messageBodyPartZip);
// Send the complete message parts
message.setContent(multipart);
Transport.send(message);
约束方程是
任何> =的约束都必须乘以[2,1]
才能成为<=。
所以-1
还有
b=[1,-2,0,4]
解决
A = [
[-1.0, -1.0, 0.0, 1.0], #x1
[1.0, -1.0, -1.0, -2.0] #x2
]