Problemas de otimização de restrições em R

Estou tentando configurar um script de otimização que analise um conjunto de modelos, ajuste curvas nos modelos e otimize-os, sujeito a alguns parâmetros.

Essencialmente, eu tenho receita em função do custo, em uma função decrescente, e tenho isso para vários portfólios, digamos 4 ou 5. Como entrada, tenho valores de custo e receita, em incrementos definidos. O que eu quero fazer é ajustar uma curva ao portfólio no formato Revenue = A * cost ^ B e otimizar os diferentes portfólios para encontrar a divisão ideal de custos entre cada portfólio para um orçamento definid

O código abaixo (peço desculpas pela inelegância dele, tenho certeza de que há MUITAS melhorias a serem feitas!) Essencialmente lê meus dados, neste caso, uma simulação, cria os quadros de dados necessários (provavelmente é onde meus inelegance aparece), calcula as variáveis necessárias para as curvas para cada simulação e produz gráficos para verificar a curva ajustada nos dado

Meu problema é que agora tenho 5 curvas do formulário:

revenue = A * Custo ^ B (A, B e custo diferentes para cada função)

E eu quero saber, dadas as 5 variáveis, como devo dividir meu custo entre elas, para otimizar a soma das 5 curvas sujeitas a

Cost <= Orçamento

Sei que preciso usar o constrOptim, mas passei literalmente horas batendo a cabeça contra a mesa (literalmente horas, não literalmente batendo a cabeça ...) e ainda não consigo descobrir como configurar a função para que maximiza a receita, sujeito à restrição de custo ...

Qualquer ajuda aqui seria muito apreciada, isso está me incomodando há semana

Obrigado

Ric

## 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

}

questionAnswers(2)

yourAnswerToTheQuestion