2016-04-13 12 views
0

Bazı veriler verilen bir fonksiyonun parametrelerini optimize etmeye çalışıyorum. Parametrenin 3 elemanlı bir vektör olduğunu varsayalım. ConstrOptim işlevini kullanarak, parametrelerin toplamının 1'den büyük veya ona eşit olması gereken koşulları ... (constrOptim işlevinin ui ve ci argümanlarını kullanarak) ayarlayabilirim.R: Kısıtlı Optimizasyon: Sınırı sıfır olmayan parametrelerin sayısına ayarlayın

Ancak, 3 elementli parametre vektörünü yalnızca 2 sıfır öğeye sahip olmak için nasıl kısıtlardım? Bir yolu anlayamıyorum - 4. elementin vektörün ilk 3 elementinin bir fonksiyonu olduğu (yani vektörün ilk 3 elementinde sıfır olmayanların sayısını sayar) 4 elementli bir parametre vektörünü belirtmeyi düşündüm ve sonra bunu belli bir sayıyla sınırlandırın) ancak çalışacak bir şey elde edemezsiniz. Herhangi bir fikir (çok takdir)?

#Some simple code as context: 
data=cbind(rnorm(5)+1,rnorm(5)+1,rnorm(5)+1) 
par=c(0.5,0.3,0.2) 
fn=function(par,data) {return(as.numeric(rep(1,times=5)%*%(data%*%par)))} 

#setting the conditions that the sum of the parameters must be 1: 
u1<-rbind(c(1,1,1),c(-1,-1,-1)) 
c1<-c(0.999, -1.001) 
constr.optim1<-constrOptim(c(0.3,0.3,0.4), f=fn, data=data,grad=NULL, ui=u1, ci=c1) 
sum(constr.optim1$par) #=0.99997 which is close enough to 1 as specified 

#But how would I set/restrict: 
length(which(constr.optim1$par!=0)) #to equal 2 and not 3? 

cevap

1

"n'den n olmayan sıfır" olabileceğinden korkmak zor bir kısıtlamadır. Bazen buna kardinalite kısıtı denir. Temel olarak, bir değişkenin sıfır olup olmadığını belirtmek için ek ikili değişkenler eklememiz gerekir. Bu, modele MINLP (Karma Tamsayılı Doğrusal Olmayan Programlama) modeli denir. Bunu çözmek için bir MINLP çözücüsüne ihtiyacınız olacaktır (bunlar, örneğin NEOS aracılığıyla).

0

R Eğer eşitsizlikler açısından constrainst belirtebilirsiniz kısıtlamaları ile doğrusal olmayan optimizasyon için paketler vardır. Nonlineer programlamaya karşılık gelen paketler için Optimisation view'a bakın.

İlgili konular