首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CVXPY:违反约束

CVXPY:违反约束
EN

Stack Overflow用户
提问于 2021-10-25 17:35:08
回答 1查看 347关注 0票数 0

我试图在cvxpy中解决一个优化程序。问题是,它返回的答案违反了给出的基本约束。我以前曾成功地运行过这个程序,并试图模仿与以前相同的代码,但这个问题使我混淆了我的错误所在。任何帮助都将不胜感激。

我试图解决的优化问题:

obj函数:最大值0.1a1 + 0.1428a2 + 0.2a3

T 7a1 + 11a2 + 16a3 <= 80

a1,a2,a3 > =0,所有整数

当我运行下面的代码时,它为a1、a2和a3提供了一个5的值,这违反了给定的约束。

代码语言:javascript
复制
import cvxpy as cvx
import numpy as np
import scipy as sc
from scipy import linalg

#Define Starting Matrix
A1 = np.array([10,0,0])
A2 = np.array([0,7,0])
A3 = np.array([0,0,5])

#Optimal Basis and Inverse
B = np.array([A1, A2, A3])
print(f"B:{B}")
Binv = linalg.inv(B)
print(f"B-1:{Binv}")

#Define Cost Matrix
c = np.array([1, 1, 1])

#Optimal Dual Solution, y.hat
yhat = np.matmul(c,Binv)
print(f"y.hat:{yhat}")

#Pricing Problem
a = cvx.Variable(shape=(3,1), name="a")
w = np.array([[7,11,16]])

#Define Obj Function
objective2 = cvx.Maximize(cvx.matmul(yhat,a))

#Define Constraints
constraint2 = [
    cvx.matmul(a,w)<=80,
    a >=0
]

#Define Problem and Solve
knapsack = cvx.Problem(objective2, constraint2)
solution2 = knapsack.solve()
print(solution2)
print(a.value)

代码语言:javascript
复制
2.2142857137502494    
[[5.]    
 [5.]    
 [5.]]
EN

回答 1

Stack Overflow用户

发布于 2021-10-26 22:24:57

你的尺寸被打破了。

一种矩阵乘法,具有:

代码语言:javascript
复制
a = cvx.Variable(shape=(3,1), name="a")  # 3 x 1
w = np.array([[7,11,16]])                # 1 x 3

在以下方面的成果:

代码语言:javascript
复制
z = a * w      # 3 x 3

您可以很容易地验证这一点:

代码语言:javascript
复制
print(cvx.matmul(a,w).shape)
# (3, 3)

您可能希望将列向量a更改为行向量a。这也意味着w的转置(以及其他我不会触及的表达式):

代码语言:javascript
复制
a = cvx.Variable(shape=(1,3), name="a")
w = np.array([7,11,16]]).transpose()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69712459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档