MOD for optimization variable
16 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
annazy
el 22 de Ag. de 2019
Comentada: Matt J
el 25 de Ag. de 2019
Hi,
I have to optimize matrix to obtain quantities that will be divisible by certain numbers. When I use MOD on numbers, it works fine, for example MOD(10,3)=1. However, when I try to create constraint that I want my optimization variable x to be divisible by let's say 3 MOD(x,3), I get an error
Undefined function 'mod' for input arguments of type 'optim.problemdef.OptimizationVariable'.
Is there anything I can do to solve this issue?
Thanks in advance.
0 comentarios
Respuesta aceptada
Matt J
el 24 de Ag. de 2019
Editada: Matt J
el 24 de Ag. de 2019
No need to use constraints. Just declare x as an OptimizationExpression,
x=3*optimvar('z','Type', 'Integer','LowerBound',0)
x =
OptimizationExpression
3*z
Now use x freely to build the objective and constraints as you did previously. E.g.,
x=3*optimvar('z','Type', 'integer','LowerBound',0);
y=optimvar('y','LowerBound',0);
prob=optimproblem;
prob.Objective=2*x+4*y;
prob.Constraints=x+y>=7;
sol=solve(prob);
The solver will solve for z, not x,
>> sol
sol =
struct with fields:
y: 1.0000
z: 2.0000
but you can easily convert the optimal z to a corresponding result for x.
>> x_optimal=evaluate(x,sol)
x_optimal =
6.0000
3 comentarios
Matt J
el 25 de Ag. de 2019
annazy's comment moved here:
This is wonderful. What I actually need is this 'z', as I optimize quantities of products which must be divisible by number of products per cartoon. However this number varies depending on products. Also, I have multiple percentage constraints on quantities (not cartoons) which is why I can't focus on cartoons only, but in the end number of cartoons is what I need.
You are both amazing people, I hope one day I will be clever enough to help other lost souls like you do help me :)
Matt J
el 25 de Ag. de 2019
I'm glad it's what you need but please Accept-click the answer if it addresses your question.
Más respuestas (1)
Walter Roberson
el 22 de Ag. de 2019
Introduce an extra integer variable and constrain equality x-3*extra = 1
4 comentarios
Walter Roberson
el 24 de Ag. de 2019
Yes, N=optimvar('N','Type','integer') is good.
If you have upper and/or lower bound on x then you can use it to figure out upper and lower bounds on N to make the optimization more efficient.
Ver también
Categorías
Más información sobre Surrogate Optimization en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!