Решите линейные задачи линейным методом наименьших квадратов с ограничениями
Линейный метод наименьших квадратов с ограничениями или линейными ограничениями.
Решает задачи аппроксимирования кривыми наименьших квадратов вида
Примечание
lsqlin
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите Первый выбор Основанного на проблеме или Основанный на решателе подход.
добавляет линейные ограничения равенства x
= lsqlin(C
,d
,A
,b
,Aeq
,beq
,lb
,ub
) Aeq*x = beq
и ограничения lb
≤ x
≤ ub
. Если вам не нужны определенные ограничения, такие как Aeq
и beq
, установите их равными []
. Если x(i)
неограниченно внизу, установите lb(i) = -Inf
, и если x(i)
неограниченно выше, задайте ub(i) = Inf
.
находит минимум для x
= lsqlin(problem
)problem
, структуру, описанную в problem
. Создайте problem
структура с использованием записи через точку или struct
функция. Или создайте problem
структура из OptimizationProblem
объект при помощи prob2struct
.
[
, для любых входных параметров, описанных выше, возвращает:x
,resnorm
,residual
,exitflag
,output
,lambda
]
= lsqlin(___)
Область квадратичной 2-нормы невязки resnorm =
Невязка residual = C*x - d
Значение exitflag
описание условия выхода
Структурный output
содержащая информацию о процессе оптимизации
Структурный lambda
содержащие множители Лагранжа
Фактор, ½ в определении задачи, влияет на значения в lambda
структура.
[
запуски wsout
,resnorm
,residual
,exitflag
,output
,lambda
]
= lsqlin(C
,d
,A
,b
,Aeq
,beq
,lb
,ub
,ws
)lsqlin
из данных объекта теплого старта ws
, используя опции в ws
. Возвращенный аргумент wsout
содержит точку решения в wsout.X
. При помощи wsout
как начальный объект теплого старта в последующем вызове решателя, lsqlin
может работать быстрее.
Найдите x
что минимизирует норму C*x - d
для переопределенной задачи с линейными ограничениями неравенства.
Задайте задачу и ограничения.
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 0.8214 0.7382 0.4102 0.8912 0.4447 0.1762 0.8936]; d = [0.0578 0.3528 0.8131 0.0098 0.1388]; A = [0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 0.0152 0.9318 0.8462]; b = [0.5251 0.2026 0.6721];
Функции lsqlin
чтобы решить проблему.
x = lsqlin(C,d,A,b)
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.
x = 4×1
0.1299
-0.5757
0.4251
0.2438
Найдите x
что минимизирует норму C*x - d
для переопределенной задачи с линейными ограничениями равенствами и неравенствами и границами.
Задайте задачу и ограничения.
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 0.8214 0.7382 0.4102 0.8912 0.4447 0.1762 0.8936]; d = [0.0578 0.3528 0.8131 0.0098 0.1388]; A =[0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 0.0152 0.9318 0.8462]; b =[0.5251 0.2026 0.6721]; Aeq = [3 5 7 9]; beq = 4; lb = -0.1*ones(4,1); ub = 2*ones(4,1);
Функции lsqlin
чтобы решить проблему.
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
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.
x = 4×1
-0.1000
-0.1000
0.1599
0.4090
В этом примере показано, как использовать опции nondefault для линейных методов наименьших квадратов.
Установите опции, чтобы использовать 'interior-point'
алгоритм и для обеспечения итерационного отображения.
options = optimoptions('lsqlin','Algorithm','interior-point','Display','iter');
Настройте задачу линейного метода наименьших квадратов.
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 0.8214 0.7382 0.4102 0.8912 0.4447 0.1762 0.8936]; d = [0.0578 0.3528 0.8131 0.0098 0.1388]; A = [0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 0.0152 0.9318 0.8462]; b = [0.5251 0.2026 0.6721];
Запустите задачу.
x = lsqlin(C,d,A,b,[],[],[],[],[],options)
Iter Fval Primal Infeas Dual Infeas Complementarity 0 -7.687420e-02 1.600492e+00 6.150431e-01 1.000000e+00 1 -7.687419e-02 8.002458e-04 3.075216e-04 2.430833e-01 2 -3.162837e-01 4.001229e-07 1.537608e-07 5.945636e-02 3 -3.760545e-01 2.000617e-10 2.036997e-08 1.370933e-02 4 -3.912129e-01 9.997558e-14 1.006816e-08 2.548273e-03 5 -3.948062e-01 1.665335e-16 2.955102e-09 4.295807e-04 6 -3.953277e-01 2.775558e-17 1.237758e-09 3.102850e-05 7 -3.953581e-01 1.110223e-16 1.645862e-10 1.138719e-07 8 -3.953582e-01 1.387779e-16 2.401829e-13 5.693290e-11 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.
x = 4×1
0.1299
-0.5757
0.4251
0.2438
Получите и интерпретируйте все lsqlin
выходы.
Задайте задачу с линейными ограничениями неравенства и границами. Проблема переопределена, потому что в C
четыре столбца матрица, но пять строк. Это означает, что задача имеет четыре неизвестных и пять условий, еще до включения линейных ограничений и границ.
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 0.8214 0.7382 0.4102 0.8912 0.4447 0.1762 0.8936]; d = [0.0578 0.3528 0.8131 0.0098 0.1388]; A = [0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 0.0152 0.9318 0.8462]; b = [0.5251 0.2026 0.6721]; lb = -0.1*ones(4,1); ub = 2*ones(4,1);
Установите опции, чтобы использовать 'interior-point'
алгоритм.
options = optimoptions('lsqlin','Algorithm','interior-point');
The 'interior-point'
алгоритм не использует начальную точку, поэтому задайте x0
на []
.
x0 = [];
Функции lsqlin
со всеми выходами.
[x,resnorm,residual,exitflag,output,lambda] = ...
lsqlin(C,d,A,b,[],[],lb,ub,x0,options)
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.
x = 4×1
-0.1000
-0.1000
0.2152
0.3502
resnorm = 0.1672
residual = 5×1
0.0455
0.0764
-0.3562
0.1620
0.0784
exitflag = 1
output = struct with fields:
message: '...'
algorithm: 'interior-point'
firstorderopt: 4.3374e-11
constrviolation: 0
iterations: 6
linearsolver: 'dense'
cgiterations: []
lambda = struct with fields:
ineqlin: [3x1 double]
eqlin: [0x1 double]
lower: [4x1 double]
upper: [4x1 double]
Рассмотрим ненулевые поля множителя Лагранжа более подробно. Сначала рассмотрим множители Лагранжа для линейного ограничения неравенства.
lambda.ineqlin
ans = 3×1
0.0000
0.2392
0.0000
Множители Лагранжа являются ненулевыми, точно когда решение находится на соответствующей границе ограничений. Другими словами, множители Лагранжа являются ненулевыми, когда соответствующее ограничение активно. lambda.ineqlin(2)
является ненулевым. Это означает, что второй элемент в A*x
должен равняться второму элементу в b
, поскольку ограничение активно.
[A(2,:)*x,b(2)]
ans = 1×2
0.2026 0.2026
Теперь рассмотрим множители Лагранжа для нижних и верхних ограничений.
lambda.lower
ans = 4×1
0.0409
0.2784
0.0000
0.0000
lambda.upper
ans = 4×1
0
0
0
0
Первые два элемента lambda.lower
ненулевые. Видишь, что x(1)
и x(2)
находятся в своих нижних границах, -0.1
. Все элементы lambda.upper
являются по существу нулем, и вы видите, что все компоненты x
меньше, чем их верхняя граница, 2
.
Создайте теплый стартовый объект, чтобы вы могли быстро решить измененную задачу. Установите опции, чтобы выключить итеративное отображение для поддержки теплого запуска.
rng default % For reproducibility options = optimoptions('lsqlin','Algorithm','active-set','Display','off'); n = 15; x0 = 5*rand(n,1); ws = optimwarmstart(x0,options);
Создайте и решите первую задачу. Найдите время решения.
r = 1:n-1; % Index for making vectors v(n) = (-1)^(n+1)/n; % Allocating the vector v v(r) =( -1).^(r+1)./r; C = gallery('circul',v); C = [C;C]; r = 1:2*n; d(r) = n-r; lb = -5*ones(1,n); ub = 5*ones(1,n); tic [ws,fval,~,exitflag,output] = lsqlin(C,d,[],[],[],[],lb,ub,ws) toc
Elapsed time is 0.005117 seconds.
Добавьте линейное ограничение и решите еще раз.
A = ones(1,n); b = -10; tic [ws,fval,~,exitflag,output] = lsqlin(C,d,A,b,[],[],lb,ub,ws) toc
Elapsed time is 0.001491 seconds.
C
- Матрица умножителяМатрица умножителя, заданная как матрица двойников. C
представляет множитель решения x
в выражении C*x - d
. C
является M
-by- N
, где M
количество уравнений и N
количество элементов x
.
Пример: C = [1,4;2,5;7,8]
Типы данных: double
d
- Вектор константыВектор константы, заданный как вектор двойников. d
представляет аддитивный постоянный член в выражении C*x - d
. d
является M
-by- 1
, где M
- количество уравнений.
Пример: d = [5;0;-12]
Типы данных: double
A
- Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как действительная матрица. A
является M
-by- N
матрица, где M
количество неравенств и N
- количество переменных (количество элементов в x0
). Для больших задач передайте A
как разреженная матрица.
A
кодирует M
линейное неравенство
A*x <= b
,
где x
является вектор-столбец N
переменные x(:)
, и b
- вектор-столбец с M
элементы.
Для примера, чтобы задать
<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2 10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2 20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2 30,
введите следующие ограничения:
A = [1,2;3,4;5,6]; b = [10;20;30];
Пример: Чтобы указать, что компоненты x равны 1 или менее, используйте A = ones(1,N)
и b = 1
.
Типы данных: double
b
- Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как вектор действительных чисел. b
является M
-элементный вектор, относящийся к A
матрица. Если вы сдаете b
как векторы-строки решатели внутренне преобразуют b
в вектор-столбец b(:)
. Для больших задач передайте b
как разреженный вектор.
b
кодирует M
линейное неравенство
A*x <= b
,
где x
является вектор-столбец N
переменные x(:)
, и A
- матрица размера M
-by- N
.
Для примера рассмотрим эти неравенства:
<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2 10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2 20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2 30.
Задайте неравенства, введя следующие ограничения.
A = [1,2;3,4;5,6]; b = [10;20;30];
Пример: Чтобы указать, что компоненты x равны 1 или менее, используйте A = ones(1,N)
и b = 1
.
Типы данных: double
Aeq
- Линейные ограничения равенстваЛинейные ограничения равенства, заданные как действительная матрица. Aeq
является Me
-by- N
матрица, где Me
количество равенств и N
- количество переменных (количество элементов в x0
). Для больших задач передайте Aeq
как разреженная матрица.
Aeq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
является вектор-столбец N
переменные x(:)
, и beq
- вектор-столбец с Me
элементы.
Для примера, чтобы задать
<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 20,
введите следующие ограничения:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать, что компоненты x равны 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
beq
- Линейные ограничения равенстваЛинейные ограничения равенства, заданные как вектор действительных чисел. beq
является Me
-элементный вектор, относящийся к Aeq
матрица. Если вы сдаете beq
как векторы-строки решатели внутренне преобразуют beq
в вектор-столбец beq(:)
. Для больших задач передайте beq
как разреженный вектор.
beq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
является вектор-столбец N
переменные x(:)
, и Aeq
- матрица размера Me
-by- N
.
Для примера рассмотрим эти равенства:
<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 3 = 20.
Задайте равенства путем ввода следующих ограничений.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать, что компоненты x равны 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
lb
- Нижние границы[]
(по умолчанию) | вектор действительных чисел или массивНижние границы, заданные как вектор или массив типа double. lb
представляет нижние границы элементарно в lb
≤ x
≤ ub
.
Внутренне, lsqlin
преобразует массив lb
в векторную lb(:)
.
Пример: lb = [0;-Inf;4]
означает x(1) ≥ 0
, x(3) ≥ 4
.
Типы данных: double
ub
- Верхние границы[]
(по умолчанию) | вектор действительных чисел или массивВерхние границы, заданные как вектор или массив типа double. ub
представляет верхние границы элементарно в lb
≤ x
≤ ub
.
Внутренне, lsqlin
преобразует массив ub
в векторную ub(:)
.
Пример: ub = [Inf;4;10]
означает x(2) ≤ 4
, x(3) ≤ 10
.
Типы данных: double
x0
- Начальная точка[]
(по умолчанию) | вектор действительных чисел или массивНачальная точка для процесса решения, заданная как вектор действительных чисел или массив. The 'trust-region-reflective'
и 'active-set'
алгоритмы используют x0
(необязательно).
Если вы не задаете x0
для 'trust-region-reflective'
или 'active-set'
алгоритм, lsqlin
устанавливает x0
в нулевой вектор. Если какой-либо компонент этого нулевого вектора x0
нарушает границы, lsqlin
устанавливает x0
до точки внутри рамки, заданной границами.
Пример: x0 = [4;-3]
Типы данных: double
options
- Опции для lsqlin
optimoptions
| структуру, такую как созданная optimset
Опции для lsqlin
, заданный как выход optimoptions
функция или как структура, созданная optimset
.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции выделены курсивом в следующей таблице. Для получения дополнительной информации см. раздел «Опции представления».
Все алгоритмы
| Выберите алгоритм:
The The Когда задача не имеет ограничений, Если у вас есть большое количество линейных ограничений, а не большое количество переменных, попробуйте Для получения дополнительной информации о выборе алгоритма смотрите Выбор алгоритма. |
Диагностика | Отобразите диагностическую информацию о функции, которая будет минимизирована или решена. Выбор следующий |
Display | Level of display вернулся в командную строку.
The
|
MaxIterations | Максимально допустимое количество итераций, положительное целое число. Значение по умолчанию Для |
trust-region-reflective
Опции алгоритма
FunctionTolerance | Отклонение завершения функции от значения, a положительной скалярной величины. Значение по умолчанию является Для |
JacobianMultiplyFcn | Функция умножения якобиана, заданная как указатель на функцию. Для крупномасштабных структурированных задач эта функция должна вычислить матричный продукт Якобия W = jmfun(Jinfo,Y,flag) где
В каждом случае См. пример с Функцией умножения якобиана Линейного метода наименьших квадратов. Для |
MaxPCGIter | Максимальное количество итераций PCG (предварительно обусловленный сопряженный градиент), a положительной скалярной величины. Значение по умолчанию является |
OptimalityTolerance | Допуск окончания по оптимальности первого порядка, положительной скалярной величины. Значение по умолчанию является Для |
PrecondBandWidth | Верхняя шумовая полоса предварительного кондиционера для PCG (предварительно обусловленный сопряженный градиент). По умолчанию используется предварительное кондиционирование диагонали (верхняя полоса пропускания 0). Для некоторых проблем увеличение полосы пропускания уменьшает количество итераций PCG. Настройка |
SubproblemAlgorithm | Определяет, как вычисляется шаг итерации. Значение по умолчанию, |
TolPCG | Допуск завершения на итерации PCG (предварительно обусловленный сопряженный градиент), положительная скалярная величина. Значение по умолчанию является |
TypicalX | Типичные |
interior-point
Опции алгоритма
ConstraintTolerance | Допуск на нарушение ограничений, положительной скалярной величины. Значение по умолчанию является Для |
LinearSolver | Тип внутреннего линейного решателя в алгоритме:
|
OptimalityTolerance | Допуск окончания по оптимальности первого порядка, положительной скалярной величины. Значение по умолчанию является Для |
StepTolerance | Допуск завершения на Для |
'active-set'
Опции алгоритма
ConstraintTolerance | Допуск на нарушение ограничений, положительной скалярной величины. Значение по умолчанию Для |
ObjectiveLimit | Допуск (критерий остановки), который является скаляром. Если значение целевой функции идет ниже |
OptimalityTolerance | Допуск окончания по оптимальности первого порядка, положительной скалярной величины. Значение по умолчанию Для |
StepTolerance | Допуск завершения на Для |
problem
- Задача оптимизацииЗадача оптимизации, заданная как структура со следующими полями.
| Матричный множитель в термине C*x - d |
| Аддитивная константа в термине C*x - d |
| Матрица для линейных ограничений неравенства |
| Вектор для линейных ограничений неравенства |
| Матрица для линейных ограничений равенства |
| Вектор для линейных ограничений равенства |
lb | Вектор нижних границ |
ub | Вектор верхних границ |
| Начальная точка для x |
| 'lsqlin' |
| Опции, созданные с optimoptions |
Примечание
Вы не можете использовать теплый старт с problem
аргумент.
Типы данных: struct
ws
- Объект теплого запускаoptimwarmstart
Теплый стартовый объект, заданный как объект, созданный с помощью optimwarmstart
. Объект теплого запуска содержит начальную точку и опции, а также необязательные данные для размера памяти при генерации кода. Смотрите Лучшие Практики Теплого Старта.
Пример: ws = optimwarmstart(x0,options)
x
- РешениеРешение, возвращенное как вектор, который минимизирует норму C*x-d
удовлетворяющее всем границам и линейным ограничениям.
wsout
- Решение теплого стартового объектаLsqlinWarmStart
объектРешение теплый стартовый объект, возвращенный как LsqlinWarmStart
объект. Точка решения wsout.X
.
Можно использовать wsout
как вход теплый начальный объект в последующем lsqlin
вызов.
resnorm
- Целевое значениеЦелевое значение, возвращенное как скалярное значение norm(C*x-d)^2
.
residual
- невязки решенияНевязки решения, возвращенные в качестве вектора C*x-d
.
exitflag
- Условие остановки алгоритмаУсловие остановки алгоритма, возвращаемое как целое число, идентифицирующее причину остановки алгоритма. Ниже списки значения exitflag
и соответствующие причины lsqlin
остановлен.
| Изменение невязки было меньше заданного допуска |
| Размер шага меньше |
| Функция сходится к решению |
| Превышено количество итераций |
| Проблема недопустима. Или, для |
-3 | Проблема неограниченная. |
| Плохое кондиционирование препятствует дальнейшей оптимизации. |
| Не удается вычислить направление шага. |
Выходное сообщение для interior-point
алгоритм может дать более подробную информацию о причине lsqlin
остановлен, например, превышение допуска. См. разделы «Выход из флагов» и «Выходные сообщения».
output
- сводные данные процессов решенияСводные данные процесса решения, возвращенная как структура, содержащая информацию о процессе оптимизации.
| Количество итераций, выполненных решателем. |
| Один из следующих алгоритмов:
Для задачи без ограничений, |
| Нарушение ограничений, которое положительно для нарушенных ограничений (не возвращается для
|
| Выходное сообщение. |
| Оптимальность первого порядка в решении. См. «Мера оптимальности первого порядка». |
linearsolver | Тип внутреннего линейного решателя, |
| Количество сопряженных итераций градиента, выполненных решателем. Непусто только для |
См. «Структуры output».
lambda
- множители ЛагранжаМножители Лагранжа, возвращенные как структура со следующими полями.
| Нижние границы |
| Верхние границы |
| Линейное неравенство |
| Линейные равенства |
См. «Структуры множителя Лагранжа».
Для задач без ограничений можно использовать mldivide
(матричное левое деление). Когда у вас нет ограничений, lsqlin
возвращает x = C\d
.
Потому что решаемая задача всегда выпуклая, lsqlin
находит глобальное, хотя и не обязательно уникальное решение.
Если ваша задача имеет много линейных ограничений и мало переменных, попробуйте использовать 'active-set'
алгоритм. См. Квадратичное программирование со многими линейными ограничениями.
Лучшие числовые результаты вероятны, если вы задаете равенства явно, используя Aeq
и beq
, вместо неявного, использование lb
и ub
.
The trust-region-reflective
алгоритм не допускает равных верхних и нижних границ. Используйте другой алгоритм для этого случая.
Если заданные входные ограничения для задачи несогласованны, выход x
является x0
и выходы resnorm
и residual
являются []
.
Можно решить некоторые большие структурированные задачи, включая те, где C
матрица слишком велика, чтобы помещаться в памяти, используя trust-region-reflective
алгоритм с функцией умножения якобиана. Для получения дополнительной информации смотрите trust- области отражающие Опции Алгоритма.
Этот метод является подпространственным методом доверительной области, основанным на внутренне-отражающем методе Ньютона, описанном в [1]. Каждая итерация включает приблизительное решение большой линейной системы с использованием метода предварительно обусловленных сопряженных градиентов (PCG). См. Trust- Области Светоотражающие наименьшие квадраты, и в частности Большие Шкалы Линейного метода наименьших квадратов .
The 'interior-point'
алгоритм основан на quadprog
'interior-point-convex'
алгоритм. Смотрите Линейные методы наименьших квадратов: Interior-Point или Active-Set.
The 'active-set'
алгоритм основан на quadprog
'active-set'
алгоритм. Для получения дополнительной информации смотрите Линейные методы наименьших квадратов: Interior-Point или Active-Set и активный-set quadprog Algorithm.
[1] Коулман, Т. Ф. и Я. Ли. «Отражающий метод Ньютона для минимизации квадратичной функции, зависящей от некоторых переменных», SIAM Journal по оптимизации, том 6, число 4, стр. 1040-1058, 1996.
[2] Гилл, П. Е., У. Мюррей и М. Х. Райт. Практическая оптимизация, Академическая пресса, Лондон, Великобритания, 1981.
Объект теплого запуска поддерживает список активных ограничений из предыдущей решенной задачи. Решатель несет как можно больше активной информации о ограничениях, чтобы решить текущую задачу. Если предыдущая задача слишком отличается от текущей, никакая информация об активном наборе не используется повторно. В этом случае решатель эффективно выполняет холодный запуск в порядок, чтобы перестроить список активных ограничений.
Задача Optimize Live Editor обеспечивает визуальный интерфейс для lsqlin
.
Указания и ограничения по применению:
lsqlin
поддерживает генерацию кода, используя codegen
(MATLAB Coder) или MATLAB® Coder™ приложения. Для генерации кода необходимо иметь лицензию MATLAB Coder.
Целевой компьютер должно поддерживать стандартные расчеты с плавающей точностью. Вы не можете сгенерировать код для расчетов с одной точностью или с фиксированной точкой.
Цели генерации кода не используют те же библиотеки математических ядер, что и решатели MATLAB. Поэтому решения генерации кода могут варьироваться от решений решателя, особенно для плохо обусловленных задач.
При решении без ограничений и недоопределенных задач в MATLAB, lsqlin
вызовы mldivide
, который возвращает базовое решение. В генерации кода возвращаемое решение имеет минимальную норму, которая обычно отличается.
lsqlin
не поддерживает problem
аргумент для генерации кода.
[x,fval] = lsqlin(problem) % Not supported
Все lsqlin
входные матрицы, такие как A
, Aeq
, lb
, и ub
должно быть полным, а не разреженным. Вы можете преобразовать разреженные матрицы в полные с помощью full
функция.
The lb
и ub
аргументы должны иметь то же количество записей, что и количество столбцов в C
или должен быть пустым []
.
Для расширенной оптимизации кода с использованием встраиваемых процессоров вам также нужен Embedded Coder® лицензия.
Вы должны включить опции для lsqlin
и указать их используя optimoptions
. Опции должны включать Algorithm
опция, установить на 'active-set'
.
options = optimoptions('lsqlin','Algorithm','active-set'); [x,fval,exitflag] = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options);
Генерация кода поддерживает следующие опции:
Algorithm
- Должен быть 'active-set'
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
Сгенерированный код имеет ограниченную проверку ошибок на опции. Рекомендуемый способ обновления опции - использовать optimoptions
, а не запись через точку.
opts = optimoptions('lsqlin','Algorithm','active-set'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Не загружайте опции из файла. Это может привести к сбою генерации кода. Вместо этого создайте опции в коде.
Если вы задаете опцию, которая не поддерживается, опция обычно игнорируется во время генерации кода. Для достоверных результатов задайте только поддерживаемые опции.
lsqnonneg
| mldivide
| Оптимизировать | optimwarmstart
| quadprog
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.