【发布时间】:2012-12-08 05:14:30
【问题描述】:
我一直在尝试使用 constrOptim() 解决 R 中的约束优化问题(我的第一次),但我正在努力为我的问题设置约束。
问题很简单,我可以设置函数,但在传递约束时有点不知所措。
例如我定义的问题是(我将从固定在 1000 的 N 开始说,所以我只想解决 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]是给定值?你能详细说明你需要的配方吗?我不清楚... -
是的 - a[1:3], s[1:3], c[1:3] 代表历史平均激活率、支出、购置成本..我正在尝试选择x[1:3] 最大化函数
标签: r optimization mathematical-optimization maximization