我试图找到带二进制条目(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)
但我有两个问题:
首先:bnds与我的X有不同的尺寸,我得到了一个错误。 其次,当我运行最小化函数时,我得到了错误,表示标量变量的索引无效。
答案 0 :(得分:1)
这是我心中的重塑
<ItemsControl ItemsSource="{Binding Path=Errors}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Label Content="{Binding Path=Key}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我还没有纳入界限
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
例如,这会约束0到1之间的所有值
In [298]: np.array(x0).ravel()
Out[298]: array([1, 0, 1, 0, 0, 1, 0, 0])