Siebert
2015-Jul-28 13:05 UTC
[R] Problem to optimize a truncated function with auglag (alabama)
Hello, I use the auglag-command of the alabama package to optimize a function under constraints. The function is truncated at -400. I am afraid, that the auglag-command has problems to maximize this function. The solution found by the auglag-command is not even close to the optimum. It is easy to show that other values than the solution found by auglag are producing higher output values and still fulfill the constraints. Does anybody know how I can optimize that function with auglag or with another R-command? Thank you very much for any commands and suggestions. The following explanation is just to understand the background of the optimization problem. It has nothing to do with the code problem. The function goes back to an economic intertemporal consumption model. I am looking for an optimal solution for the consumption-saving-lifetime-plan. The utility is the sum of the utilities of 30 periods. The utility in each period depends on the current consumption and on a habit stock it is never below -400. The habit stock is a function of the consumption in the last periods. # Here is the data I am using: expectations<-c(124.671, 49.238595, 15.2649945, 85.8809574, 130.43232916875, 45.1340382917813, 14.8597845206344, 121.3933676634, 75.1980497225319, 76.9945912185161, 184.798095407901, 139.642709300636, 182.57573338504, 322.923072570281, 275.238211364469, 155.536259099569, 54.7838218320803, 285.968249457082, 644.995614202314, 385.243665085798, 60.2035902594974, 218.295491752216, 168.796319321643, 387.193213147244, 110.975689063189, 333.047669801961, 81.5607312506053, 253.458002848022, 28.3825973908511, 458.282304918595) habit_ex<-10 # Here is the function I like to optimize: utility<-function(consum){ period<<-0 consum<<-consum sum( sapply(consum, utility_t) ) } utility_t<-function(consum_t){ period<<-period+1 max(c(-400, (40+750*(((consum_t+2.7)/habit(consum, period )^0.6)^-2/-2))*5.5)) } habit<-function(consum, period){if (period==1){habit_ex} else {0.7*habit(consum, period-1)+consum[(period-1)]}} # Here are the constraints: hin<-function(consum){ h<-rep(NA, 60) for (j in 1:30){ h[j]<- sum(expectations[1:j]) - sum(consum[1:j]) h[(j+30)]<-consum[j] } h } # Here is the code to optimize: install.packages("alabama") library(alabama) start<-c(1:30) ans <- auglag(start, fn=utility, hin=hin, control.optim = list(fnscale -1), control.outer = list(sig0 = 100, trace=TRUE)) # Here is an example for input values that have a higher output than the solution of auglag: opt1<-c(15.057, 27.135, 41.067, 55.62, 70.047, 83.79, 96.516, 108.558, 119.637, 120, 139.707, 148.77, 157.185, 165.339, 174.249, 182.295, 190.314, 199.359, 208.485, 219.168, 228.816, 240.12, 253.782, 267.39, 237.705, 254.475, 280.41, 312.8925, 372.9975, 484.432) utility(opt1) -- View this message in context: http://r.789695.n4.nabble.com/Problem-to-optimize-a-truncated-function-with-auglag-alabama-tp4710478.html Sent from the R help mailing list archive at Nabble.com.