Python CVXPY库用于优化效用函数

Python CVXPY库用于优化效用函数,python,cvxpy,Python,Cvxpy,我试图在两个约束条件下使效用函数最大化。但我不确定我需要在哪里修复代码。 我已经尝试使矩阵的维数相同,并在代码中指定 我已经定义了全局参数 我已经指定了约束条件 theta1 = 1 theta2 = 0.1 big_gamma1 = 1 big_gamma2= 0.5 gamma1 = 0.5 gamma2 = 0.5 z2 = 0.7*np.ones(5) z1 = np.linspace(0.01, 4, 5) xi_1 = 1/z1 xi1 = xi_1.transpose print(

我试图在两个约束条件下使效用函数最大化。但我不确定我需要在哪里修复代码。 我已经尝试使矩阵的维数相同,并在代码中指定

我已经定义了全局参数 我已经指定了约束条件

theta1 = 1
theta2 = 0.1
big_gamma1 = 1
big_gamma2= 0.5
gamma1 = 0.5
gamma2 = 0.5
z2 = 0.7*np.ones(5)
z1 = np.linspace(0.01, 4, 5)
xi_1 = 1/z1
xi1 = xi_1.transpose
print(z1)

z2 = 0.07*np.ones((1,5))
print(z2)
z1 = np.linspace(0.01, 4, 5)
xi_1 = 1/z1
xi1 = xi_1.transpose

r1 = cp.Variable((5,1))
r2 = cp.Variable((5,1))
f1 = cp.Variable((1,5))
f2 = cp.Variable((1,5))

constraints = [f1 + f2 ==1,
              f1@r1 + f2@r2 == 1]

obj = cp.Problem(cp.Minimize((f1@r1 + f2@xi1)@z1 + f2@(r2 - xi1)@(z2)), [f1 + f2 ==1,
              f1*r1 + f2*r2 == 1])
print("obj is DCP:", obj.is_dcp())
代码中的错误

[[0.07 0.07 0.07 0.07 0.07]]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-b52595a9b4b9> in <module>
     13               f1@r1 + f2@r2 == 1]
     14 
---> 15 obj = cp.Problem(cp.Minimize((f1@r1 + f2@xi1)@z1 + f2@(r2 - xi1)@(z2)), [f1 + f2 ==1,
     16               f1*r1 + f2*r2 == 1])
     17 print("obj is DCP:", obj.is_dcp())

~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/expression.py in cast_op(self, other)
     44         """A wrapped binary operator that can handle non-Expression arguments.
     45         """
---> 46         other = self.cast_to_const(other)
     47         return binary_op(self, other)
     48     return cast_op

~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/expression.py in cast_to_const(expr)
    465                         "Combine Expressions using atoms such as bmat, hstack, and vstack."
    466                     )
--> 467         return expr if isinstance(expr, Expression) else cvxtypes.constant()(expr)
    468 
    469     @staticmethod

~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/constants/constant.py in __init__(self, value)
     43             self._sparse = True
     44         else:
---> 45             self._value = intf.DEFAULT_INTF.const_to_matrix(value)
     46             self._sparse = False
     47         self._imag = None

~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/interface/numpy_interface/ndarray_interface.py in const_to_matrix(self, value, convert_scalars)
     48             return result
     49         else:
---> 50             return result.astype(numpy.float64)
     51 
     52     # Return an identity matrix.

TypeError: float() argument must be a string or a number, not 'builtin_function_or_method'
[[0.07 0.07 0.07 0.07 0.07]
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
13f1@r1 + f2@r2 == 1]
14
--->15 obj=cp.问题(cp.最小化((f1@r1 + f2@xi1)@z1+f2@(r2-xi1)@(z2)),[f1+f2==1,
16 f1*r1+f2*r2==1])
17打印(“对象为DCP:,对象为DCP())
cast_op中的~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/expression.py(self,other)
44“”“一个可处理非表达式参数的包装二进制运算符。
45         """
--->46其他=自投至常数(其他)
47返回二进制运算(自身、其他)
48回投
~(opt/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/expression.py in cast_to_const(expr)
465“使用bmat、hstack和vstack等原子组合表达式。”
466                     )
-->467如果isinstance(expr,Expression)else cvxtypes.constant()(expr)返回expr
468
469@staticmethod
~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/expressions/constants/constant.py in uuuuuu init_uuuu(self,value)
43 self.\u sparse=True
44.其他:
--->45 self.\u value=intf.DEFAULT\u intf.const\u to\u矩阵(值)
46 self.\u sparse=False
47自我识别。_imag=无
常量到矩阵中的~/opt/anaconda3/lib/python3.7/site-packages/cvxpy/interface/numpy\u interface/ndarray\u interface.py(自、值、转换标量)
48返回结果
49.其他:
--->50返回结果.astype(numpy.float64)
51
52#返回一个单位矩阵。
TypeError:float()参数必须是字符串或数字,而不是“内置函数”或“方法”

不幸的是,它会抛出一个错误而不是返回False,但您的问题不是DCP。你有一个二次等式约束,我想目标中的二次项也不是PSD。删除目标并测试约束-然后得到False。不幸的是,它抛出了一个错误而不是返回False,但您的问题不是DCP。你有一个二次等式约束,我想目标中的二次项也不是PSD。删除目标,只测试约束-然后得到False。