[R] Rsolnp package: warning messages

Diogo Alagador alagador at isa.utl.pt
Mon Dec 12 11:24:27 CET 2011


Dear,

I am using the solnp command (package Rsolnp) for a problem with  
equality and inequality constraints.
I am not getting convergence for my problem but apart that I get 1  
warning per iteration saying: ?In cbind(temp, funv) :  number of rows  
of result is not a multiple of vector length (arg 1)?.
I checked for equality and inequality functions and they seem fine to  
me. Where this message comes from?

Interestingly also is that using different seed values the direction  
of optimization of my (negative-value) function is always for  
maximization. How can this occur?

Below you may find the code for ease of consultation.

Thanks in advance,
My best regards,

Diogo André Alagador
Univ. Évora, Portugal



## the code:
###################################################################
###################################################################
## DATA

N=7
BR=12
br=c(1,1,2,3,2,1,1,2,1,1,1,1)

A=c(1,0,0,0,1,0,0,0,0)
B=c(0,0,0,0,1,0,0,0,0)
C=c(1,1,0,1,0,0,1,0,0)
D=c(0,1,0,0,1,0,0,0,0)
E=c(0,0,1,0,0,0,0,0,0)
F=c(0,0,1,0,1,0,1,0,0)
G=c(0,1,1,0,0,0,0,0,0)
H=c(2,1,0,1,2,0,1,0,0)
I=c(0,2,3,0,2,0,1,0,0)
J=c(0,1,3,0,1,0,1,0,0)
K=c(0,1,2,0,1,0,1,0,0)
L=c(1,0,0,0,2,0,0,0,0)

mat=rbind(A,B,C,D,E,F,G,H,I,J,K,L)

CELL=dim(mat)[2]

###################################################################
###################################################################
## MAX FUNCTION

budget=2

library(Rsolnp)

# the objective function to maximize
#NOTE: by default the solver minimizes the objective. therefore the  
original minus sign is not used

obj=function(x){
all1=sum(mat%*%x)
Hp=0
for (j in 1:BR){
p_b=mat[j,]%*%x/all1
Hp=Hp+p_b*log(p_b)*br[j]
}
return(Hp)
}

# the equality constraint function:

equal1=function(x){
all2=sum(mat%*%x)

sum_pterm=sum(mat[1:N,]%*%x/all2)
sum_x=sum(x)

return(c(sum_pterm,sum_x))
}

# the right hand side for the constraint
eqB=c(1,budget)


# the inequality function
inequal1=function(x){
all3=sum(mat%*%x)
p_b=mat[1:BR,]%*%x/all3
return(as.vector(p_b))
}

#the lower limit for inequalities
ineqLB=rep(0.00001,BR)

#the upper limit for the inequalities
ineqUB=rep(1.00001,BR)


# the lower and upper bounds for the variables
LB=rep(0,CELL)
UB=rep(1,CELL)

#the seed for variables
cells0=rep(.3,9)

#solving the problem
sol=solnp(cells0,fun=obj,eqfun=equal1,eqB=eqB,ineqfun  
=inequal1,ineqLB=ineqLB,ineqUB=ineqUB,LB=LB,UB=UB,control=list(outer.iter=400))
cells=sol$pars
cells
equal1(cells)



More information about the R-help mailing list