varindex

Сопоставьте переменные задачи с индексом базируемой переменной решателя

Описание

пример

idx = varindex(prob) возвращает линейные индексы переменных задачи как структура или целочисленный вектор. Если вы преобразуете prob к структуре задачи при помощи prob2structidx дает переменные индексы в получившейся структуре задачи, которые соответствуют переменным в prob.

пример

idx = varindex(prob,varname) возвращает линейные индексы элементов varname.

Примеры

свернуть все

Создайте задачу оптимизации.

x = optimvar('x',3);
y = optimvar('y',3,3);
prob = optimproblem('Objective',x'*y*x);

Преобразуйте проблему в структуру.

problem = prob2struct(prob);

Получите линейные индексы в problem из всего prob переменные.

idx = varindex(prob);
disp(idx.x)
     1     2     3
disp(idx.y)
     4     5     6     7     8     9    10    11    12

Получите y индексы только.

idxy = varindex(prob,'y')
idxy = 1×9

     4     5     6     7     8     9    10    11    12

В этом примере показано, как получить большую часть той же информации с помощью или подхода, основанного на проблеме или основанного на решателе подхода. Сначала создайте проблему и решите ее с помощью основанного на проблеме подхода.

x = optimvar('x',3,1,'LowerBound',1,'UpperBound',1);
y = optimvar('y',3,3,'LowerBound',-1,'UpperBound',1);
prob = optimproblem('Objective',x'*y*x + [2 3 4]*x);
rng default
x0.x = rand(3, 1);
x0.y = rand(3, 3);
[solp,fvalp,exitflagp,outputp] = solve(prob,x0);
Solving problem using fmincon.

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

Затем преобразуйте проблему в основанную на решателе форму с помощью prob2struct. Иметь fmincon использование решателя автоматические градиенты в проблеме, набор SpecifyObjectiveGradient опция к true.

solverprob = prob2struct(prob,x0);
solverprob.options = optimoptions(solverprob.options,"SpecifyObjectiveGradient",true);

Решите задачу с помощью fmincon.

[sols,fvals,exitflags,outputs] = fmincon(solverprob);
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

Преобразовывать fmincon решение формы структуры, возвращенной solve, создайте соответствующие структуры с помощью varindex.

idx = varindex(prob);
sol.x = sols(idx.x);
sol.y = sols(idx.y);

y индексируйте тот varindex использование является линейным индексом. Измените переменную sol.y иметь размер x0.y.

sol.y = reshape(sol.y,size(x0.y));

Проверяйте, что две структуры решения идентичны.

isequal(sol,solp)
ans = logical
   1

Причиной, что два подхода не абсолютно эквивалентны, является тот fmincon может возвратить больше аргументов, таких как множители Лагранжа, тогда как solve не может.

Входные параметры

свернуть все

Задача оптимизации или проблема уравнения в виде OptimizationProblem возразите или EquationProblem объект. Создайте задачу оптимизации при помощи optimproblem; создайте проблему уравнения при помощи eqnproblem.

Предупреждение

Основанный на проблеме подход не поддерживает комплексные числа в целевой функции, нелинейных равенствах и нелинейных неравенствах. Если при вычислении функции встретится комплексное число, даже как промежуточное значение, конечный результат может оказаться неправильным.

Пример: prob = optimproblem; prob.Objective = obj; prob.Constraints.cons1 = cons1;

Пример: prob = eqnproblem; prob.Equations = eqs;

Имя переменной в виде вектора символов или строки.

Пример: 'x'

Типы данных: char | string

Выходные аргументы

свернуть все

Линейные индексы переменных задачи, возвращенных как структура или целочисленный вектор. Если вы преобразуете prob к структуре задачи при помощи prob2structidx дает переменные индексы в получившейся структуре задачи, которые соответствуют переменным в prob.

  • Когда вы вызываете idx = varindex(prob), возвращенный idx структура. Имена полей структуры являются именами переменных в prob. Значение для каждого поля является целочисленным вектором из линейных индексов, с которыми переменные сопоставляют в связанной основанной на решателе переменной задачи.

  • Когда вы вызываете idx = varindex(prob,varname), возвращенный idx вектор из линейных индексов к который переменная varname карты в связанной основанной на решателе переменной задачи.

Смотрите получают проблемные индексы.

Введенный в R2019a