例如,如果我想最大化期望退货功能 E [r] = w1r1 + w2r2并求解权重w1和w2的优化值。
答案 0 :(得分:3)
你真正给出的唯一约束是w1 + w2 = 1
w1 =.0.25
(,~ -.)w1
0.25 0.75
考虑到w1的值,它会同时处理w1和w2。
r1 r2 +/@:* w1 w2
计算r1w1 + r2w2
r1 =. 5
r2 =.10
(r1,r2) (+/@:* (,-.))w1
8.75
(r1,r2) (+/@:* (,-.))0.9
5.5
(r1,r2) (+/@:* (,-.))0.01
9.95
如果你真的想要最大化,你需要为r1和r2的值添加方程式并考虑这些方程式,但也许我不理解你的问题?
回应下面的评论:如果w1 + w2 = 1的约束仍然在起作用,那么问题只是将r1和r2中的值相加,那么哪个更大应该得到w值为1和另一个会得到w值为0
r1=.2 4 6 3 2
r2=.2.1 4 6 3 2
r3=.2 4 6 3 2.3
r1 (,-.)@:>/@:(+/@:,.) r2
0 1
r2 (,-.)@:>/@:(+/@:,.) r1
1 0
r3 (,-.)@:>/@:(+/@:,.) r2
1 0
'w1 w2'=.r3 (,-.)@:>/@:(+/@:,.) r2
w1
1
w2
0
'w1 w2'=.r1 (,-.)@:>/@:(+/@:,.) r2
w1
0
w2
1
(r1,.r2) +/@:,@:(+ . *) (0 1) NB. w1=.0 w2=.1
17.1
(r1,.r2) +/@:,@:(+ . *) (1 0) NB. w1=.1 w2=.0
17
(r1,.r2) +/@:,@:(+ . *) (0.5 0.5) NB. w1=.0.5 w2=.0.5
17.05
根据下面的跟进评论,我会以两种方式之一来处理它。我可以从1980年代开始挖掘我所有的线性编程文本,并提出确定的数学解决方案(包括退化情况和局部最大值/最小值)或使用与上述相同的技术但是对于比n = 2更大的情况。我选择了第二种选择。
让我们首先看一下r矩阵,它将是一组常数。对于这个例子,我采用随机的5×10矩阵,其值为1到10。
r=. >: ? 5 10 $ 10
r
4 4 8 1 4 3 6 9 6 2
2 6 5 4 4 7 5 10 4 6
2 4 9 10 1 1 9 8 2 7
5 6 5 4 7 9 2 6 10 6
10 3 6 2 10 2 7 10 4 2
现在我要使用的技巧是我想找到平均值最高的列乘以w的最大值。使用(+/ % #)
(+/ % #) r
4.6 4.6 6.6 4.2 5.2 4.4 5.8 8.6 5.2 4.6
然后找到列表的排名,以便能够重新排序原始r矩阵的列。前导7
表示7 { r
是最大平均值等。
\:@:(+/ % #) r
7 2 6 4 8 0 1 9 5 3
我使用它反过来使用{" 1重新排序矩阵r的列,因为我正在使用列。结果是我重新排序了r的列,使得平均值最大的列在左侧,最小的列在右侧。
(\:@:(+/ % #) {"1 ]) r
9 8 6 4 6 4 4 2 3 1
10 5 5 4 4 2 6 6 7 4
8 9 9 1 2 2 4 7 1 10
6 5 2 7 10 5 6 6 9 4
10 6 7 10 4 10 3 2 2 2
有了这个,接下来就是开发w向量。由于我现在拥有左边所有最大的平均值,我只是将w左边的值最大化,以便在所述约束内尽可能大。
w=. 0.2 0.2 0.2 0.2 0.15 0.01 0.01 0.01 0.01 0.01
#w NB. w1 through w10
10
+/w NB. sum of the values in w
1
>./w NB. largest value in w
0.2
<./w NB. smallest value in w
0.01
由于r矩阵已使用+ . *
重新排序,因此点积为w1r1 , w2r2 , w3r3 ... w10r10
(({"1~ \:@: (+/ % #))r) + . * w
1.8 1.6 1.2 0.8 0.9 0.04 0.04 0.02 0.03 0.01
2 1 1 0.8 0.6 0.02 0.06 0.06 0.07 0.04
1.6 1.8 1.8 0.2 0.3 0.02 0.04 0.07 0.01 0.1
1.2 1 0.4 1.4 1.5 0.05 0.06 0.06 0.09 0.04
2 1.2 1.4 2 0.6 0.1 0.03 0.02 0.02 0.02
实际得到矩阵ravel的权重所有值然后求和
+/ , (({"1~ \:@: (+/ % #))r) + . * w
31.22