Main Content

Variables con nombres duplicados no permitidas

Si utiliza dos variables diferentes que tienen el mismo nombre, las expresiones de optimización, las restricciones o los problemas pueden generar un error. Este error es problemático cuando crea una variable, luego crea una expresión utilizando esa variable y después recrea la variable. Suponga que crea la variable y la expresión de restricción siguientes:

x = optimvar('x',10,2);
cons = sum(x,2) == 1;

En este punto, se da cuenta de que su intención era crear variables con valor entero. Así que recrea la variable, cambiando el tipo.

x = optimvar('x',10,2,'Type','integer');

Cree un objetivo y un problema.

obj = sum(x*[2;3]);
prob = optimproblem('Objective',obj);

Ahora, intente poner la restricción en el problema.

prob.Constraints = cons

En este punto, recibe un mensaje de error que indica que las OptimizationVariables que aparecen en el mismo problema deben tener distintas propiedades "Name". El problema es que cuando recreó la variable x, es una variable nueva, no relativa a la expresión de restricción.

Puede corregir este problema de dos maneras.

  • Cree una expresión de restricción nueva utilizando la x actual.

    cons = sum(x,2) == 1;
    prob.Constraints = cons;
  • Obtenga la variable x original creando un problema que utilice la expresión antigua. Actualice la variable obtenida para que tenga la propiedad Type correcta. Utilice la variable obtenida para el problema y el objetivo.

    oprob = optimproblem('Constraints',cons);
    x = oprob.Variables.x;
    x.Type = 'integer';
    oprob.Objective = sum(x*[2;3]);

    Este método puede ser útil si ha creado más expresiones utilizando la variable antigua que expresiones utilizando la variable nueva.

Temas relacionados