How can setup optimset for custom data types.
Afficher commentaires plus anciens

I'm putting xo as initial guess. I want custom data just restricted x0 subset [0,30], by create permutation.
x0 = [30 30 30 30 30 30 0 0 0 0 0 0 0 0 30 30 30 30 30 30];
[x, fval] = fminsearch(@objfun, x0);
1 commentaire
Alan Weiss
le 28 Déc 2015
I am sorry, but I do not understand what you are asking. Your image is from a ga example, but your question seems to be about fminsearch.
So can you please explain what you are trying to do, and what the problem is?
Alan Weiss
MATLAB mathematical toolbox documentation
Réponses (1)
Rewrite the problem in terms of binary variables 0<=y(i)<=1 where y=x/30. Then use the IntCon argument and bound constraints to minimize in terms of y,
N=numberofVariables;
LB=zeros(1,N);
UB=ones(1,N);
IntCon=1:N;
fun=@(y) FitnessFcn(30*y);
x = 30*ga(fun,N,[],[],[],[],LB,UB,IntCon,options);
4 commentaires
Walter Roberson
le 29 Déc 2015
Matt's solution goes part way there, but it is not able to achieve the "permutations" constraint that you need.
But there is a way in this particular case of permutations of exactly two different values. Use the IntCon just like Matt shows, where (as he shows) a 0 integer input value will be turned into a 0 in the objective function and a 1 integer input value will be turned into a 30 in the objective function. Now to achieve the permutation you need, add a single linear equality constraint:
x0 = [30 30 30 30 30 30 0 0 0 0 0 0 0 0 30 30 30 30 30 30];
N = length(x0);
LB = zeros(1,N);
UB = ones(1,N);
IntCon = 1:N;
Aeq = ones(1,N);
beq = sum(x0 == 30);
x = 30*ga(fun, N, [],[], Aeq, beq, LB,UB, IntCon, options);
where fun is the handle to your objective function that multiplies each of the input values by 30 before use.
The trick I use here is that in order for an input to be a permutation of x0, it must have the same number of 30's as x0 has. Each input will (at the time the constraint is evaluated) be either 0 or 1; multiply that by a vector of 1's and add and the result will be the same as the number of 1's that are in the input; when that number is the same as in x0 then you have an input that satisfies the permutation constraint.
Unfortunately, ga doesn't allow you to use IntCon and linear equality constraints simultaneously. Ranjan, are you sure that a permutation of x0 is what you are restricted to instead of all possible combinations of [0,30]? And are you sure the FitnessFcn is nonlinear (otherwise, you should be using intlinprog)?
If so, then Walter's proposal can be rewritten to use only inequality constraints using the variable elimination technique discussed here,
Triveni
le 20 Jan 2016
You should be wondering why Matlab thinks "options" is undefined, when the code you posted in your question defines it explicitly...
Regardless, Walter's solution will ultimately not work as written because (see My Remark) it tries to use IntCon and linear equalities simultaneously, which ga() does not allow.
Catégories
En savoir plus sur Problem-Based Optimization Setup dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!