Если используются две различные переменные с одинаковыми именами, то выражения оптимизации, ограничения или проблемы могут вызвать ошибку. Эта ошибка возникает при создании переменной, затем при создании выражения с использованием этой переменной, а затем при повторном создании переменной. Предположим, что создается следующая переменная и выражение ограничения:
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]);
Этот метод может быть полезен, если создано больше выражений, использующих старую переменную, чем выражений, использующих новую переменную.