If you use two different variables that have the same name, then optimization expressions, constraints, or problems can throw an error. This error is troublesome when you create a variable, then create an expression using that variable, then recreate the variable. Suppose that you create the following variable and constraint expression:
x = optimvar('x',10,2);
cons = sum(x,2) == 1;
At this point, you realize that you intended to create integer variables. So you recreate the variable, changing its type.
x = optimvar('x',10,2,'Type','integer');
Create an objective and problem.
obj = sum(x*[2;3]);
prob = optimproblem('Objective',obj);
Now try to put the constraint into the problem.
prob.Constraints = cons
At this point, you get an error message stating that
OptimizationVariables
appearing in the same problem must have
distinct "Name" properties. The issue is that when
you recreated the x
variable, it is a new variable, unrelated to the
constraint expression.
You can correct this issue in two ways.
Create a new constraint expression using the current
x
.
cons = sum(x,2) == 1; prob.Constraints = cons;
Retrieve the original x
variable by creating a problem
using the old expression. Update the retrieved variable to have the correct
Type
property. Use the retrieved variable for the problem
and objective.
oprob = optimproblem('Constraints',cons); x = oprob.Variables.x; x.Type = 'integer'; oprob.Objective = sum(x*[2;3]);
This method can be useful if you have created more expressions using the old variable than expressions using the new variable.