1

の最大値を見つけるには、以下を最適化する必要がありますr1

ad = 0.95*M_D + 0.28*G_D + 0.43*S_D + 2.25*Q_D
as = 0.017*M_A + 0.0064*G_A + 0.0076*S_A + 0.034*Q_A
ccb = 0.0093*M_CC+ 0.0028*G_CC + 0.0042*S_CC + 0.0186*Q_CC
ccd = 0.0223*M_CD + 0.0056*G_CD + 0.0078*S_CD + 0.0446*Q_CD
apb = 1.28*M_P + 2.56*Q_P 
r1=(1+ccb*(1+ccd))*ad*as*100/(130-apb)

次の制約に従います。

0 <= M_CD <= M_CC <= M_A <= M_D <= M_P <= 9
0 <= G_CD <= G_CC <= G_A <= G_D <= 9
0 <= S_CD <= S_CC <= S_A <= S_D <= 9
0 <= Q_CD <= Q_CC <= Q_A <= Q_D <= Q_P <= 3

以前に試したアプローチはうまく機能せず、より良い解決策を見つけたいと思っています。

4

2 に答える 2

2

問題が正しく記述されていれば、最初にパラメータを [0,1] の下限と上限にマッピングできるかもしれません。次に、関数内に不等式を実装し、基本的な下限と上限の制約を受け入れるアルゴリズムを使用して最適化できます。nlminb使用できますが、ビネットは、使用されているアルゴリズムが最適ではない可能性があることを示唆しています。

アップデート:

OP改機能付き

dumFun <- function(p){
    p[1] -> M_CD; p[2] -> M_CC; p[3] -> M_A; p[4] -> M_D; p[5] -> M_P;
    M_P <- 9*M_P; M_D <- M_P*M_D; M_A <- M_D*M_A; M_CC <- M_A*M_CC; M_CD <- M_CC*M_CD; 
    p[6] -> G_CD; p[7] -> G_CC; p[8] -> G_A; p[9] -> G_D;
    G_D <- 9*G_D; G_A <- G_D*G_A; G_CC <- G_A*G_CC; G_CD <- G_CC*G_CD; 
    p[10] -> S_CD; p[11] -> S_CC; p[12] -> S_A; p[13] -> S_D;
    S_D <- 9*S_D; S_A <- S_D*S_A; S_CC <- S_A*S_CC; S_CD <- S_CC*S_CD; 
    p[14] -> Q_CD; p[15] -> Q_CC; p[16] -> Q_A; p[17] -> Q_D; p[18] -> Q_P;
    Q_P <- 3*Q_P; Q_D <- Q_P*Q_D; Q_A <- Q_D*Q_A; Q_CC <- Q_A*Q_CC; Q_CD <- Q_CC*Q_CD; 

    ad = 0.95*M_D + 0.28*G_D + 0.43*S_D + 2.25*Q_D
    as = 0.017*M_A + 0.0064*G_A + 0.0076*S_A + 0.034*Q_A
    ccb = 0.0093*M_CC+ 0.0028*G_CC + 0.0042*S_CC + 0.0186*Q_CC
    ccd = 0.0223*M_CD + 0.0056*G_CD + 0.0078*S_CD + 0.0446*Q_CD
    apb = 1.28*M_P + 2.56*Q_P 
    r1=(1+ccb*(1+ccd))*ad*as*100/(130-apb)
    -r1
}
require(minqa)
p <- rep(.1, 18)
bobyqa(p, dumFun, lower = rep(0, length(p)), upper = rep(1, length(p)))
parameter estimates: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 
objective: -9.65605526502482 
number of function evaluations: 97 
> 
于 2013-06-07T13:28:36.893 に答える
0

最終的に、ベクトル化ではなく C を使用して問題を解決しました。14 個のネストされたループを含む私のプログラムは、R よりも C の方が 100 倍から 1000 倍速く実行されます。私はそれから何も新しいことを学ばなかったので、これは悲しいことであり、R がいくつかの問題ではかなり役に立たないことを証明していますが、何ができるでしょうか。

于 2013-06-12T18:36:57.023 に答える