7

kernlab の ipop 関数を使用して、次の二次計画方程式を解きたいと思います。

min 0.5*x'*H*x + f'*x  
subject to:  A*x <= b   
Aeq*x = beq  
LB <= x <= UB 

この例の H 3x3 行列では、f は 3x1、A は 2x3、b は 2x1、LB と UB は両方とも 3x1 です。

編集1 私のRコードは:

library(kernlab)
H <- rbind(c(1,0,0),c(0,1,0),c(0,0,1))
f = rbind(0,0,0)
A = rbind(c(1,1,1), c(-1,-1,-1))
b = rbind(4.26, -1.73)
LB = rbind(0,0,0)
UB = rbind(100,100,100)
> ipop(f,H,A,b,LB,UB,0)
Error in crossprod(r, q) : non-conformable arguments

私は次のようなものであるmatlabから知っています:

H = eye(3);
f = [0,0,0];
nsamples=3;
eps = (sqrt(nsamples)-1)/sqrt(nsamples);
A=ones(1,nsamples);
A(2,:)=-ones(1,nsamples);
b=[nsamples*(eps+1); nsamples*(eps-1)];

Aeq = [];
beq = [];
LB = zeros(nsamples,1);
UB = ones(nsamples,1).*1000;

[beta,FVAL,EXITFLAG] = quadprog(H,f,A,b,Aeq,beq,LB,UB);

答えは [0.57,0.57,0.57] に等しい 3x1 のベクトルです。

ただし、kernlab ライブラリ ipop(f,H,A,b,LB,UB,0)) の ipop 関数を使用して R で試してみると、 crossprod (r, q) のエラーに直面しています: 非準拠の引数

コメントをいただければ幸いです

4

1 に答える 1