exponenta event banner

Переменные с повторяющимися именами запрещены

Если используются две различные переменные с одинаковыми именами, то выражения оптимизации, ограничения или проблемы могут вызвать ошибку. Эта ошибка возникает при создании переменной, затем при создании выражения с использованием этой переменной, а затем при повторном создании переменной. Предположим, что создается следующая переменная и выражение ограничения:

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

На этом этапе вы понимаете, что вы намереваетесь создать целочисленные переменные. Таким образом, вы воссоздаете переменную, изменяя ее тип.

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

Создание цели и проблемы.

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

Теперь попробуйте ввести ограничение в проблему.

prob.Constraints = cons

На этом этапе появляется сообщение об ошибке, в котором указывается, что OptimizationVariables , отображаемые в той же проблеме, должны иметь различные свойства «» Name «». Проблема в том, что, когда вы воссоздали x переменная является новой переменной, не связанной с выражением ограничения.

Эту проблему можно исправить двумя способами.

  • Создание нового выражения зависимости с использованием текущего x.

    cons = sum(x,2) == 1;
    prob.Constraints = cons;
  • Получение оригинала x путем создания проблемы с использованием старого выражения. Обновить извлеченную переменную, чтобы она имела правильное значение Type собственность. Используйте извлеченную переменную для задачи и цели.

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

    Этот метод может быть полезен, если создано больше выражений, использующих старую переменную, чем выражений, использующих новую переменную.

Связанные темы