how to do conditional statements using optimisation variables?

21 visualizaciones (últimos 30 días)
NN
NN el 4 de Mayo de 2021
Comentada: Julian el 21 de Jul. de 2023
hi all, how can i perform logical comparison using optimisation variable ?
I have tried this below code for optimisation using optimisation variable PbattV , but getting error :
Cost = Costa.*(PbattV<=200) +Costb.*(PbattV>=200);
P1= dt*Cost'*PbattV;
P2=dt*Cost'*PbattV;
P=P1-P2;
prob.ObjectiveSense = 'minimize';
prob.Objective = P;
An error occurred while running the simulation and the simulation was terminated Caused by: times Please help if you have any suggestion
basically i need to check if Pbatt is positive or negative and accordingly i have to chose Cost and use it for objective function;
  1 comentario
Julian
Julian el 21 de Jul. de 2023
Hi NN, I wanted to ask If you have found a working solution for your problem?
Have you found a way to rewrite your Problem?

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 4 de Mayo de 2021
Cost = Costa.*(PbattV<=200) +Costb.*(PbattV>=200);
Optimization variables cannot be converted to logical values. The only time you can compare an optimization variable to a value is in constructing a constraint.
Give up on trying to code it in terms of comparison operators: you will not succeed.
If there is a solution, then it will involve using mathematical tricks such as sqrt(x^2)/x to get the sign(x)
  17 comentarios
NN
NN el 19 de Ag. de 2021
Ok.Still when it doesnt support another function with conditional statements, or even constraints, i cant perform that operation.
I am thinking some other approach without considering sign change
Walter Roberson
Walter Roberson el 21 de Ag. de 2021
When you have discontinuous derivatives, the alternative supported by MATLAB are:

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by