我想解决一个相当大的优化问题,时间很重要,但我坚持在大量的“R”包中理解,所以我想直接向社区询问这个问题。
我想最小化一个功能:
F=(x-y)^2
其中y是给定的,预定义的8000个值的向量。 所以,我正在寻找8000 x-es。 我有一个A矩阵(基本上是一个虚拟变量矩阵),nrow = 8,ncol = 8000。 我还有一个向量b,有8个给定值。 所以,我想要解决以下问题:
min(x-y)^2
s.t:
A*x=b
从理论上讲,我理解了一切,但不知何故,我无法将F合并到任何允许均等约束的包中。 另外(因为我不知道,处理时间是多少),我想问你,如果你做了什么,你会做什么:
F = abs(x-y)
因为如果二次函数的最小化需要很长时间,那么第二个选项也会让我满意。 数据是保密的,但如果解决方案有必要,我会私下(有点不同)发送数据。
编辑nr.1:
好的,这次我会更具体 我有2年的数据(即8000次测量,每年包含4000次测量) 每年都有q1,q2,q3,q4,它们在过去以某种方式发生(但将来会被指定为最佳,以达到某些目标) 所以,这是我的b矢量,这是优化必须满足的标准。编号
b<-c(20,30,40,50,60,70,80,90)
我有一个矩阵A,它是一个二进制矩阵,表示我们在时间,q1,q2等的位置 比方说,一年中的四分之一是1天,所以: (向量中有7个零,因为我们在这里谈论的是2年,而且只有四分之一)
a<-c(1,0,0,0,0,0,0,0)
u<-c(0,1,0,0,0,0,0,0)
c<-c(1,0,1,0,0,0,0,0)
d<-c(0,0,0,1,0,0,0,0)
从这一点开始,另一年进入,另一个q1,这就是为什么二进制文件不会跳回到第一位
e<-c(0,0,0,0,1,0,0,0)
f<-c(0,0,0,0,0,1,0,0)
g<-c(0,0,0,0,0,0,1,0)
h<-c(0,0,0,0,0,0,0,1)
A<-cbind(a,u,c,d,e,f,g,h)
这是表示数据的一种不好的方法,我可以欺骗你,因为长度和宽度是 在矩阵中相同,但请记住,在原始数据中,一切都适用于矩阵乘法 A的宽度,x的长度为8000
有一种计划的方式,每个Q中的事情是如何形成的,即“y”,这是给出的。
编号
y<-c(10,11,12,13,14,16,17,18)
所以基本上,我想尽可能坚持这个计划,但是要达到标准b,那就是我想尽量减少 计划值和x值之间的差异,
min F (Ax-y)^2
s.t: A*x=b
希望它更清楚,我可以通过这种方式减少问题的维度 似乎不可行 (愚蠢,我知道:)。
答案 0 :(得分:0)
看起来没有什么可以优化的。例如。使用您的数据集:
> b<-c(20,30,40,50,60,70,80,90)
> a<-c(1,0,0,0,0,0,0,0)
> u<-c(0,1,0,0,0,0,0,0)
> c<-c(1,0,1,0,0,0,0,0)
> d<-c(0,0,0,1,0,0,0,0)
>
> e<-c(0,0,0,0,1,0,0,0)
> f<-c(0,0,0,0,0,1,0,0)
> g<-c(0,0,0,0,0,0,1,0)
> h<-c(0,0,0,0,0,0,0,1)
>
> A<-cbind(a,u,c,d,e,f,g,h)
> x <- solve(A,b)
> x
a u c d e f g h
-20 30 40 50 60 70 80 90
如果有一些自由度与x一起玩并使其尽可能接近y会更有趣,