constrOptim()を使用してRの制約付き最適化問題を解決しようとしていますが(初めて)、問題の制約を設定するのに苦労しています。
問題は非常に単純で、関数を設定することはできますが、制約を渡すことについて少し途方に暮れています。
たとえば、私が定義した問題は次のとおりです(Nを1000に固定して開始するので、Xについて解決したいので、最終的には最大の利益になるNとXの両方を選択したいと思います):
だから私は関数を次のように設定することができます:
fun <- function(x, N, a, c, s) { ## a profit function
x1 <- x[1]
x2 <- x[2]
x3 <- x[3]
a1 <- a[1]
a2 <- a[2]
a3 <- a[3]
c1 <- c[1]
c2 <- c[2]
c3 <- c[3]
s1 <- s[1]
s2 <- s[2]
s3 <- s[3]
((N*x1*a1*s1)-(N*x1*c1))+((N*x2*a2*s2)-(N*x2*c2))+((N*x3*a3*s3)-(N*x3*c3))
}
実装する必要のある制約は次のとおりです。
x1>=0.03
x1<=0.7
x2>=0.03
x2<=0.7
x3>=0.03
x2<=0.7
x1+x2+x3=1
ここでのXは、Nを最適に割り当てる必要があるバケットを表します。したがって、x1 =バケット1などに配置するNのパーセントであり、各バケットは3%以上70%以下です。
どんな助けでも大歓迎です...
たとえば、関数をテストするために使用した例は、私が望むことを実行します。
fun <- function(x, N, a, c, s) { ## profit function
x1 <- x[1]
x2 <- x[2]
x3 <- x[3]
a1 <- a[1]
a2 <- a[2]
a3 <- a[3]
c1 <- c[1]
c2 <- c[2]
c3 <- c[3]
s1 <- s[1]
s2 <- s[2]
s3 <- s[3]
((N*x1*a1*s1)-(N*x1*c1))+((N*x2*a2*s2)-(N*x2*c2))+((N*x3*a3*s3)-(N*x3*c3))
};
x <-matrix(c(0.5,0.25,0.25));
a <-matrix(c(0.2,0.15,0.1));
s <-matrix(c(100,75,50));
c <-matrix(c(10,8,7));
N <- 1000;
fun(x,N,a,c,s);