繁体   English   中英

矩阵的科学优化

[英]Optimization in scipy for a matrix

我试图找到带有二进制条目(0,1)的优化矩阵,以便使目标函数最大化。

我的X输入是带有0和1项的二维矩阵。

我的目标函数是这样的:

def objective(x):
    w=[[2,3],[4,6],[1,0],[2,8]]
    return -1* (x[0][0]*w[0][0]+x[0][1]*w[0][1]+x[1][0]*w[1][0]+x[1][1]*w[1][1])

这是我的初始X:

x0=[[1,0],[1,0],[0,1],[0,0]]

在这里,我定义了X的边界:

b=(0,1)
bnds=((b,b),(b,b))

最后是最大化问题

sol=minimize(objective2,x0,method='SLSQP',bounds=bnds)

但是我有两个问题:

第一:绑定的尺寸与我的X不同,因此我得到了一个错误。 其次,当我运行最小化函数时,我得到了错误并指出标量变量的索引无效。

这是我心目中的重塑

In [293]: objective(x0)
Out[293]: -6
In [294]: def foo(x):
   .....:     return objective(x.reshape(-1,2))
   .....: 
In [295]: foo(np.array(x0).ravel())
Out[295]: -6
In [296]: from scipy.optimize import minimize
In [297]: minimize(foo, x0, method='SLSQP')
Out[297]: 
     fun: -801353716.84727359
     jac: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
 message: 'Optimization terminated successfully.'
    nfev: 130
     nit: 13
    njev: 13
  status: 0
 success: True
       x: array([  2.46570281e+07,   3.69855528e+07,   4.93140795e+07,
         7.39711140e+07,   0.00000000e+00,   1.00000000e+00,
         0.00000000e+00,   0.00000000e+00])

我还没有纳入界限

In [290]: np.array(bnds).shape
Out[290]: (2, 2, 2)

它们必须与展平的x0兼容

In [298]: np.array(x0).ravel()
Out[298]: array([1, 0, 1, 0, 0, 1, 0, 0])

例如,这将所有值限制在0到1之间

In [301]: bnds=np.array((np.zeros(8),np.ones(8))).T
In [302]: bnds
Out[302]: 
array([[ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.]])
In [303]: minimize(foo, x0, method='SLSQP',bounds=bnds)
Out[303]: 
     fun: -14.999999999999773
     jac: array([-2., -3., -4., -6.,  0.,  0.,  0.,  0.,  0.])
 message: 'Optimization terminated successfully.'
    nfev: 20
     nit: 2
    njev: 2
  status: 0
 success: True
       x: array([ 1.,  1.,  1.,  1.,  0.,  1.,  0.,  0.])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM