Hi,
This probably does not answer your question, which I presume is about the
workings of constrOptim function, but I have a couple of comments and
different solutions of your problem.
1. In general, in the problem of this type, one can incorporate the
equality constraint(s) into the objective function by adding a penalty
term for each constraint. A pretty crude solution would be to redefine
your objective function as, say,
function(x){
x1 = x[1]
x2 = x[2]
x3 = x[3]
-(x1*(1-x1) + x2*(1-x2) + x3*(1-x3)) + 1000*(x1+x2+x3-1)^2
}
and solve a minimization problem with simple 0/1 box constraints. Notice
the minus in front of your objective function to turn the problem into the
minimization one.
2. Second possibility would be to formulate the Lagrangian using just the
equality constraint. Then we can analytically differentiate the
Lagrangian WRT x1, x2, x3, and the multiplier and equate the derivatives
to zero. This will form a set of, generally nonlinear, equations to
solve. Again, one can use a minimization with box constraints to minimize
the sum of squared left-hand-sides of the equations. This is probably not
the most efficient method of solving a system of equations but it often
works and is easy to program. Here is an example of the objective
function in this case
function(x){
x1 = x[1]
x2 = x[2]
x3 = x[3]
x4 = x[4]
(1-2*x1+x4)^2 + (1-2*x2+x4)^2 + (1-2*x3+x4)^2 + (x1+x2+x3-1)^2
}
3. This is just a follow-up to 2. In your case, the partial derivatives
of the Lagrangian and the equality constraint are linear. So if this was
not a toy problem but a real one, one can just solve a system of linear
equations
and check that the solution is inside the box constraints. In your case
> aa
[,1] [,2] [,3] [,4]
[1,] -2 0 0 1
[2,] 0 -2 0 1
[3,] 0 0 -2 1
[4,] 1 1 1 0
> bb
[1] -1 -1 -1 1
> solve(aa, bb)
[1] 0.3333333 0.3333333 0.3333333 -0.3333333
Hope this helps,
Andy
__________________________________
Andy Jaworski
518-1-01
Process Laboratory
3M Corporate Research Laboratory
-----
E-mail: [email protected]
Tel: (651) 733-6092
Fax: (651) 736-3122
From:
s t <[email protected]>
To:
[email protected]
Date:
11/04/2009 04:48 PM
Subject:
[R] Constrained Optimization
Sent by:
<[email protected]>
Hi All,
I'm trying to do the following constrained optimization example.
Maximize x1*(1-x1) + x2*(1-x2) + x3*(1-x3)
s.t. x1 + x2 + x3 = 1
x1 >= 0 and x1 <= 1
x2 >= 0 and x2 <= 1
x3 >= 0 and x3 <= 1
which are the constraints.
I'm expecting the answer x1=x2=x3 = 1/3.
I tried the "constrOptim" function in R and I'm running into some issues.
I first start off by setting my equalities to inequalities
x1+x2+x3 >= 1
x1+x2+x3 <= 1.001
However, I get a
"Error in constrOptim(c(1.00004, 0, 0), fr, grr, ui = t(A), ci = b) :
initial value not feasible
Execution halted" error.
The values 1.00004,0,0 are well within the constraints domain.
fr = function(x){
x1 = x[1]
x2 = x[2]
x3 = x[3]
x1*(1-x1) + x2*(1-x2) + x3*(1-x3)
}
grr = function(x){
x1 = x[1]
x2 = x[2]
x3 = x[3]
c(1-2*x1,1-2*x2,1-2*x3)
}
A =
matrix(c(1,1,1,-1,-1,-1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1),3,8,byrow=T)
b = c(1,-1.001,0,0,0,1,1,1)
y = constrOptim(c(1.00004,0,0),fr,grr,ui = t(A),ci = b)
Any help/pointers greatly appreciated.
Thanks
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.