Я пытаюсь решить проблему ограниченной оптимизации в R с помощью constrOptim () (мой первый раз), но изо всех сил пытаюсь установить ограничения для моей проблемы.
Проблема довольно проста, и я могу настроить функцию нормально, но я немного не понимаю, как передать ограничения.
например Проблема, которую я определил, такова (я собираюсь начать с 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 = процент от N для размещения в сегменте 1 и т. Д., Причем каждый сегмент имеет не менее 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);
x[1:3]
- переменные, аa[1:3]
,s[1:3]
иc[1:3]
- значения? Не могли бы вы уточнить формулировку, которая вам нужна? Мне непонятно ... - person digEmAll   schedule 20.12.2012