1
我有在r中的数据帧:ř求解优化问题
buys ges dif bin
1 22.34 12 10.34 0
2 55.56 12 43.56 0
3 78.33 12 66.33 0
4 9.99 12 2.01 1
.. .. .. .. ..
dif
只是abs(buys-ges)
和bin
是ifelse
式即1 if dif is <=10
否则为0。我试图通过更改ges
列来最大化bin
列的总和。约束条件是ges
对于所有行都是相同的。我尝试了几个包,但无法弄清楚最大化或优化。感谢您的任何建议。
buys <- rnorm(1:100)
> buys <- data.frame(a*100)
> buys <- round(abs(a), 2)
> summary(buys)
a...100 gs dif bin
Min. : 0.89 Min. :15 Min. : 1.76 Min. :0.00
1st Qu.: 38.29 1st Qu.:15 1st Qu.: 23.29 1st Qu.:0.00
Median : 72.89 Median :15 Median : 57.88 Median :0.00
Mean : 83.91 Mean :15 Mean : 70.52 Mean :0.13
3rd Qu.:123.50 3rd Qu.:15 3rd Qu.:108.50 3rd Qu.:0.00
Max. :269.11 Max. :15 Max. :254.11 Max. :1.00
> gs1 <- 5
> buys$gs <- gs1
> buys$dif <- abs(buys[,1] - buys$gs)
> buys$bin <- ifelse(buys$dif<=10,1,0)
> colnames(buys) <- c("buys","gs","dif","bin")
> head(buys)
buys gs dif bin
1 7.48 5 2.48 1
2 79.08 5 74.08 0
3 139.22 5 134.22 0
4 41.60 5 36.60 0
5 38.35 5 33.35 0
6 157.72 5 152.72 0
> sum(buys$bin)
[1] 10
> num_buys=function(x)
+ {
+ return(length(buys$buys[buys$buys>=x-10 | buys$buys<=x+10]))
+ }
> ans2 <- optimize(f=num_buys,interval=c(min(buys$buys),max(buys$buys)),maximum=TRUE)
>
>
> ans2
$maximum
[1] 269.1099
$objective
[1] 100
我很怀疑,这个DF只是一个例子。如果在15.00时有50个买入,则不会通过使用任何接近max(买入)的东西来最大化仓位的总和。 – screechOwl
如果'ges = max(buy)',那么'max(dif)= 0 <= 10',因此'bin == 1'对于每一行和'sum(bin)'是最大的。 – 2011-09-29 01:47:02
你是对的我写错了。它应该是abs(购买)。对于那个很抱歉。 – screechOwl