Я пытаюсь настроить сценарий оптимизации, который будет рассматривать набор моделей, подгонять кривые к моделям и затем оптимизировать их по нескольким параметрам.Проблемы оптимизации оптимизации в R
По существу, у меня есть доход как функция стоимости, в уменьшающейся функции, и у меня есть это для нескольких портфелей, скажем 4 или 5. В качестве ввода у меня есть показатели затрат и доходов с установленными приращениями. То, что я хочу сделать, соответствует кривой портфеля формы Revenue = A * cost^B, а затем оптимизируется в разных портфелях, чтобы найти оптимальное соотношение затрат между каждым портфелем для заданного бюджета.
Код (я извиняюсь за его неэффективность, я уверен, что есть много улучшений!) По существу читает в моих данных, в этом случае симуляция создает необходимые кадры данных (это вероятно, где моя inelegance приходит), вычисляет необходимые переменные для кривых для каждой моделировки и производит графику для проверки встроенной кривой на данные.
Моя проблема заключается в том, что теперь у меня есть 5 кривых вида:
доход = A * Стоимость^B (разные A, B и стоимость для каждой функции)
И я хочу знать, , учитывая 5 переменных, как я должен разделить свою стоимость между ними, так что я хочу, чтобы оптимизировать сумму 5 кривых, подлежащих
стоимость < = бюджет
Я знаю, что мне нужно использовать constrOptim, но я потратил буквально часы, ударяя головой о мой стол (буквально часы, а не буквально ударяя головой ...), и я до сих пор не могу понять, как настроить функцию так что он максимизирует доход при условии ограничения затрат ...
Любая помощь здесь будет принята с благодарностью, это беспокоило меня в течение нескольких недель.
Спасибо!
Rich
## clear all previous data
rm(list=ls())
detach()
objects()
library(base)
library(stats)
## read in data
sim<-read.table("input19072011.txt",header=TRUE)
sim2<-data.frame(sim$Wrevenue,sim$Cost)
## identify how many simulations there are - here you can change the 20 to the number of steps but all simulations must have the same number of steps
portfolios<-(length(sim2$sim.Cost)/20)
## create a matrix to input the variables into
a<-rep(1,portfolios)
b<-rep(2,portfolios)
matrix<-data.frame(a,b)
## create dummy vector to hold the revenue predictions
k<-1
j<-20
for(i in 1:portfolios){
test<-sim2[k:j,]
rev9<-test[,1]
cost9<-test[,2]
ds<-data.frame(rev9,cost9)
rhs<-function(cost, b0, b1){
b0 * cost^b1
m<- nls(rev9 ~ rhs(cost9, intercept, power), data = ds, start = list(intercept = 5,power = 1))
matrix[i,1]<-summary(m)$coefficients[1]
matrix[i,2]<-summary(m)$coefficients[2]
k<-k+20
j<-j+20
}
## now there exists a matrix of all of the variables for the curves to optimise
matrix
multiples<-matrix[,1]
powers<-matrix[,2]
coststarts<-rep(0,portfolios)
## check accuracy of curves
k<-1
j<-20
for(i in 1:portfolios){
dev.new()
plot(sim$Wrevenue[k:j])
lines(multiples[i]*(sim$Cost[k:j]^powers[i]))
k<-k+20
j<-j+20
}
Связанные вопрос: http://stackoverflow.com/questions/9592369/in-r-how-do-i-find-the-optimal-variable-to-maximize-or-minimize-correlation-bet/9593809 # 9593809 –