Hello Everybody,
I'm a long time reader, first time begger! I wonder if anyone can help me automate an optimization routine. So basically i'm trying to solve maximum coverage problems. I'm using Matlab 2009 with the TOMLAB package that integrates cplex. These maximal coverage problems are in the context of conservation reserve selections and they have the following mathematical form (written mostly in latex speak),
\max \sum_{i in I} y_{i}
subject to, \sum_{j \in N_{i}} x_{j} >= y_{i} for all i \in I
\sum_{j \in J} c_{j}.*x_{j} <= B
where J is index set of candidate reserves, I denotes the index set of species that can be covered and N_{i}, a subset of J, is the set of candidate reserves that contain species i of the population. x_{j} and y_{i} are binary variables. x_{j} = 0 indicates that site j is not selected, 1 that it is. y_{i} = 0 indicates that species i is not in any of the selected reserves, 1 that it is in at least 1.
So all this site by species (that is site 1 is row one, for example) info would be stored in a matrix with the costs in a vector. A trivial example would be something like
A = [1 0 1;
0 0 1;
1 1 0];
c = [50 50 50]; B = 100;
The code to solve this becomes
toms integer y1 y2 y3 x1 x2 x3
bnds = {0 <= [y1;y2;y3;y4;y5;y6;x1;x2;x3;x4] <= 1};
con = {y1<=x1+x3;
y2<=x3;
y3<=x1+x2;
49*(x1+x2+x3) <= 100};
obj = (y1+y2+y3);
[sol,res] = ezsolve(obj,{bnds, con});
So what i need to work out is a way for matlab to read the matrix A, the vector C and the scalar B, to then convert that into something that solves the associated optimization and then using the solution is able to update the matrix and/or vector and/or scalar then perform the new optimization.
To anyone who's actually read all this, thank you muchly. To anyone who can help me on the way to the solution, i'll be eternally in your debt (in a nonfiduciary manner :D )
Cheers,
Gareth
