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