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