Переменные с запрещенными двойными названиями

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

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]);

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

Похожие темы