rkevinbur...@charter.net wrote: > I am sorry but I don't see the connection. with SANN and say 3 > variables one of the steps may increment x[1] by 0.1. Not only is > this a non-discrete integer value but even if I could coerce SANN to > only return discrete integer values for each step in the optimization > once x[1] was set to say 2 I would have to search the other > "variables" for a value of 2 and exchange x[1] and which ever > variable was two so as to maintain the property that each variable > has a unique discrete value constained from 1 : number of varables. > > Thank you. > > Kevin
If you look more closely at the docs for method="SANN" (and the examples), you'll see that SANN allows you to pass the "gradient" argument (gr) as a custom function to provide the candidate distribution. Here's an example: N <- 10 xvec <- seq(0,1,length=N) target <- rank((xvec-0.2)^2) objfun <- function(x) { sum((x-target)^2)/1e6 } objfun(1:100) swapfun <- function(x,N=10) { loc <- sample(N,size=2,replace=FALSE) tmp <- x[loc[1]] x[loc[1]] <- x[loc[2]] x[loc[2]] <- tmp x } set.seed(1001) opt1 <- optim(fn=objfun, par=1:N, gr=swapfun,method="SANN", control=list(trace=10)) plot(opt1$par,target) > ---- Ben Bolker <bol...@ufl.edu> wrote: >> >> >> rkevinburton wrote: >>> I have an optimization question that I was hoping to get some >>> suggestions on how best to go about sovling it. I would think >>> there is probably a package that addresses this problem. >>> >>> This is an ordering optimzation problem. Best to describe it with >>> a simple example. Say I have 100 "bins" each with a ball in it >>> numbered from 1 to 100. Each bin can only hold one ball. This >>> optimization is that I have a function 'f' that this array of >>> bins and returns a number. The number returned from >>> f(1,2,3,4....) would return a different number from that of >>> f(2,1,3,4....). The optimization is finding the optimum order of >>> these balls so as to produce a minimum value from 'f'.I cannot >>> use the regular 'optim' algorithms because a) the values are >>> discrete, and b) the values are dependent ie. when the "variable" >>> representing the bin location is changed (in this example a new >>> ball is put there) the existing ball will need to be moved to >>> another bin (probably swapping positions), and c) each "variable" >>> is constrained, in the example above the only allowable values >>> are integers from 1-100. So the problem becomes finding the >>> optimum order of the "balls". >>> >>> Any suggestions? >>> >>> >> See method "SANN" under ?optim. >> >> Ben Bolker >> >> -- View this message in context: >> http://www.nabble.com/Constrined-dependent-optimization.-tp22772520p22772795.html >> Sent from the R help mailing list archive at Nabble.com. >> >> ______________________________________________ R-help@r-project.org >> mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do >> read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > -- Ben Bolker Associate professor, Biology Dep't, Univ. of Florida bol...@ufl.edu / www.zoology.ufl.edu/bolker GPG key: www.zoology.ufl.edu/bolker/benbolker-publickey.asc
signature.asc
Description: OpenPGP digital signature
______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.