how can I do linear programming with a piecewise objective function?
Mostrar comentarios más antiguos
hello
I have done a linear programming code.And now the objective function of the problem will become a piece-wise function, but still linear in every part of the function.Also, all the constrains are linear as well.
which order can I use to solve the optimizing problem? still the linprog? if yes, how to write the objective function,AKA f. If not, which order can I turn to?
I have tried the fmincon order, but the example in help seems wrong, because I errors happened when I was trying to run it. Is also seems that the description of 'medium-scale programming' in help of linprog suits my requirements, but I cannot figure out how to right the objective function.
thanks
zech
Respuestas (2)
Alan Weiss
el 22 de Feb. de 2013
0 votos
Optimization Toolbox solvers generally assume that objective functions are smooth, meaning twice differentiable. They can have difficulty with nonsmooth functions.
That said, there should be no errors even with nonsmooth objectives. If you show us some code we might be able to help diagnose what is going on with your objective or constraint functions.
linprog is unsuitable because it does not handle piecewise-defined objectives and constraints.
It is possible that patternsearch, in Global Optimization Toolbox, is most suitable, because it does not care about smoothness.
Alan Weiss
MATLAB mathematical toolbox documentation
7 comentarios
xinyu
el 23 de Feb. de 2013
xinyu
el 24 de Feb. de 2013
Alan Weiss
el 25 de Feb. de 2013
If fminimax works for you locally, then you should probably use it to search globally. Simply set different start points and see if you obtain different results. See, for example, this section of the documentation.
In particular, since you have bounds on all your components, you can try the following as random start points:
x0 = lb + rand(size(lb)).*(ub - lb);
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation
xinyu
el 27 de Feb. de 2013
Alan Weiss
el 27 de Feb. de 2013
Sorry, you found a typo in the documentation. I'll fix that. The syntax is supposed to be
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
Alan Weiss
MATLAB mathematical toolbox documentation
Matt J
el 27 de Feb. de 2013
0 votos
If your problem size isn't too large (you say it's "medium scale"), you could try a brute force approach. Since your feasible set consists of polygonal pieces, you could find try to find the vertices of all the polygons using
The piecewise linear objective has to be optimized at one of the vertices, so you could just search the values at all vertices to find the optimum.
Categorías
Más información sobre Solver Outputs and Iterative Display en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!