Решите задачу оптимизации
sol = solve(prob)
sol = solve(prob,x0)
sol = solve(___,Name,Value)
[sol,fval] = solve(___)
[sol,fval,exitflag,output,lambda] = solve(___)
изменяет процесс решения с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах.sol
= solve(___,Name,Value
)
Решите линейную проблему программирования, заданную задачей оптимизации.
x = optimvar('x'); y = optimvar('y'); prob = optimproblem; prob.Objective = -x - y/3; prob.Constraints.cons1 = x + y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob)
Optimal solution found.
sol = struct with fields:
x: 0.6667
y: 1.3333
Найдите минимум функции peaks
, которая включена в MATLAB® в области . Для этого преобразуйте функцию peaks
в выражение оптимизации.
prob = optimproblem; x = optimvar('x'); y = optimvar('y'); fun = fcn2optimexpr(@peaks,x,y); prob.Objective = fun;
Включайте ограничение как неравенство в переменных оптимизации.
prob.Constraints = x^2 + y^2 <= 4;
Установите начальную точку для x
к 1 и y
к –1, и решите проблему.
x0.x = 1; x0.y = -1; sol = solve(prob,x0)
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.
sol = struct with fields:
x: 0.2283
y: -1.6255
Сравните количество шагов, чтобы решить проблему целочисленного программирования и с и без начальной допустимой точки. Проблема имеет восемь целочисленных переменных и четыре линейных ограничения равенства, и все переменные ограничиваются, чтобы быть положительными.
prob = optimproblem; x = optimvar('x',8,1,'LowerBound',0,'Type','integer');
Создайте четыре линейных ограничения равенства и включайте их в проблему.
Aeq = [22 13 26 33 21 3 14 26 39 16 22 28 26 30 23 24 18 14 29 27 30 38 26 26 41 26 28 36 18 38 16 26]; beq = [ 7872 10466 11322 12058]; cons = Aeq*x == beq; prob.Constraints.cons = cons;
Создайте целевую функцию и включайте ее в проблему.
f = [2 10 13 17 7 5 7 3]; prob.Objective = f*x;
Решите проблему, не используя начальную точку и исследуйте отображение, чтобы видеть количество узлов метода ветвей и границ.
[x1,fval1,exitflag1,output1] = solve(prob);
LP: Optimal objective value is 1554.047531. Cut Generation: Applied 8 strong CG cuts. Lower bound is 1591.000000. Branch and Bound: nodes total num int integer relative explored time (s) solution fval gap (%) 10000 0.62 0 - - 18188 1.17 1 2.906000e+03 4.509804e+01 22039 1.46 2 2.073000e+03 2.270974e+01 24105 1.59 3 1.854000e+03 9.973046e+00 24531 1.62 3 1.854000e+03 1.347709e+00 24701 1.63 3 1.854000e+03 0.000000e+00 Optimal solution found. Intlinprog stopped because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
Для сравнения найдите решение с помощью начальной допустимой точки.
x0.x = [8 62 23 103 53 84 46 34]'; [x2,fval2,exitflag2,output2] = solve(prob,x0);
LP: Optimal objective value is 1554.047531. Cut Generation: Applied 8 strong CG cuts. Lower bound is 1591.000000. Relative gap is 59.20%. Branch and Bound: nodes total num int integer relative explored time (s) solution fval gap (%) 3627 0.25 2 2.154000e+03 2.593968e+01 5844 0.39 3 1.854000e+03 1.180593e+01 6204 0.42 3 1.854000e+03 1.455526e+00 6400 0.43 3 1.854000e+03 0.000000e+00 Optimal solution found. Intlinprog stopped because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
fprintf('Without an initial point, solve took %d steps.\nWith an initial point, solve took %d steps.',output1.numnodes,output2.numnodes)
Without an initial point, solve took 24701 steps. With an initial point, solve took 6400 steps.
Предоставление начальной точки не всегда улучшает проблему. Для этой проблемы, с помощью начальной точки экономит время и вычислительные шаги. Однако для некоторых проблем, начальная точка может заставить solve
делать больше шагов.
Решите проблему
не показывая итеративное отображение.
x = optimvar('x',2,1,'LowerBound',0); x3 = optimvar('x3','Type','integer','LowerBound',0,'UpperBound',1); prob = optimproblem; prob.Objective = -3*x(1) - 2*x(2) - x3; prob.Constraints.cons1 = x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; options = optimoptions('intlinprog','Display','off'); sol = solve(prob,'Options',options)
sol = struct with fields:
x: [2x1 double]
x3: 1
Исследуйте решение.
sol.x
ans = 2×1
0
5.5000
sol.x3
ans = 1
intlinprog
, чтобы решить линейную программуОбеспечьте solve
, чтобы использовать intlinprog
в качестве решателя для линейной проблемы программирования.
x = optimvar('x'); y = optimvar('y'); prob = optimproblem; prob.Objective = -x - y/3; prob.Constraints.cons1 = x + y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob,'Solver', 'intlinprog')
LP: Optimal objective value is -1.111111. Optimal solution found. No integer variables specified. Intlinprog solved the linear problem.
sol = struct with fields:
x: 0.6667
y: 1.3333
Решите смешано-целочисленную линейную проблему программирования, описанную в, Решают проблему Целочисленного программирования с Опциями Не по умолчанию и исследуют все выходные данные.
x = optimvar('x',2,1,'LowerBound',0); x3 = optimvar('x3','Type','integer','LowerBound',0,'UpperBound',1); prob = optimproblem; prob.Objective = -3*x(1) - 2*x(2) - x3; prob.Constraints.cons1 = x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; [sol,fval,exitflag,output] = solve(prob)
LP: Optimal objective value is -12.000000. Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
sol = struct with fields:
x: [2x1 double]
x3: 1
fval = -12
exitflag = OptimalSolution
output = struct with fields:
relativegap: 0
absolutegap: 0
numfeaspoints: 1
numnodes: 0
constrviolation: 0
message: 'Optimal solution found....'
solver: 'intlinprog'
Для проблемы без любых целочисленных ограничений можно также получить непустую структуру множителя Лагранжа как пятый вывод.
Создайте и решите задачу оптимизации с помощью названный индексными переменными. Проблема состоит в том, чтобы максимизировать взвешенный прибылью поток фруктов в различные аэропорты согласно ограничениям на взвешенные потоки.
rng(0) % For reproducibility p = optimproblem('ObjectiveSense', 'maximize'); flow = optimvar('flow', ... {'apples', 'oranges', 'bananas', 'berries'}, {'NYC', 'BOS', 'LAX'}, ... 'LowerBound',0,'Type','integer'); p.Objective = sum(sum(rand(4,3).*flow)); p.Constraints.NYC = rand(1,4)*flow(:,'NYC') <= 10; p.Constraints.BOS = rand(1,4)*flow(:,'BOS') <= 12; p.Constraints.LAX = rand(1,4)*flow(:,'LAX') <= 35; sol = solve(p);
LP: Optimal objective value is -1027.472366. Heuristics: Found 1 solution using rounding. Upper bound is -1027.233133. Relative gap is 0.00%. Cut Generation: Applied 1 mir cut, and 2 strong CG cuts. Lower bound is -1027.233133. Relative gap is 0.00%. Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
Найдите оптимальный поток апельсинов и ягод в Нью-Йорк и Лос-Анджелес.
[idxFruit,idxAirports] = findindex(flow, {'oranges','berries'}, {'NYC', 'LAX'})
idxFruit = 1×2
2 4
idxAirports = 1×2
1 3
orangeBerries = sol.flow(idxFruit, idxAirports)
orangeBerries = 2×2
0 980.0000
70.0000 0
Это отображение означает, что никакие апельсины не идут в NYC
, 70 ягод идут в NYC
, 980 апельсинов идут в LAX
, и никакие ягоды не идут в LAX
.
Перечислите оптимальный поток следующего:
Fruit Airports
----- --------
Berries NYC
Apples BOS
Oranges LAX
idx = findindex(flow, {'berries', 'apples', 'oranges'}, {'NYC', 'BOS', 'LAX'})
idx = 1×3
4 5 10
optimalFlow = sol.flow(idx)
optimalFlow = 1×3
70.0000 28.0000 980.0000
Это отображение означает, что 70 ягод идут в NYC
, 28 яблок идут в BOS
, и 980 апельсинов идут в LAX
.
prob
— Задача оптимизацииOptimizationProblem
Задача оптимизации, заданная как объект OptimizationProblem
. Создайте проблему при помощи optimproblem
.
Пример: prob = optimproblem; prob.Objective = obj; prob.Constraints.cons1 = cons1;
x0
Начальная точкаНачальная точка, заданная как структура с именами полей, равняется именам переменных в prob
.
Для примера с помощью x0
с именованными индексными переменными смотрите, Создают Начальную Точку для Оптимизации с Именованными Индексными Переменными.
Пример: Если prob
имеет переменные под названием x
и y
: x0.x = [3,2,17]; x0.y = [pi/3,2*pi/3]
.
Типы данных: struct
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
solve(prob,'options',opts)
Опции
Опции оптимизацииoptimoptions
| структура опцийОпции оптимизации, заданные как пара, разделенная запятой, состоящая из 'options'
и объекта, созданного optimoptions
или структурой опций такой, как создано optimset
.
Внутренне, вызовы функции solve
linprog
, intlinprog
, quadprog
, lsqlin
, lsqnonneg
, fminunc
или fmincon
. Для решателя по умолчанию смотрите 'solver'
.
Гарантируйте, что options
совместим с решателем. Например, intlinprog
не позволяет опциям быть структурой, и lsqnonneg
не позволяет опциям быть объектом.
Для предложений на настройках опций, чтобы улучшить решение intlinprog
или скорость решения, смотрите Настраивающееся Целочисленное Линейное Программирование. Для linprog
алгоритм 'dual-simplex'
по умолчанию обычно эффективен памятью и быстр. Иногда, linprog
решает большую проблему быстрее, когда опцией Algorithm
является 'interior-point'
. Для предложений на настройках опций, чтобы улучшить решение нелинейной проблемы, см. широко использующиеся Опции: Настройка и Поиск и устранение проблем и Улучшает Результаты.
Пример: options = optimoptions('intlinprog','Display','none')
'solver'
— Решатель оптимизации'intlinprog'
| 'linprog'
| 'lsqlin'
| 'lsqnonneg'
| 'quadprog'
| 'fminunc'
| 'fmincon'
Решатель оптимизации, заданный как пара, разделенная запятой, состоящая из 'solver'
и имя перечисленного решателя.
Проблемный тип | Решатель по умолчанию | Другие позволенные решатели |
---|---|---|
Линейные объективные, линейные ограничения | linprog | intlinprog , quadprog |
Линейные объективные, линейные и целочисленные ограничения | intlinprog | linprog , quadprog (целочисленные проигнорированные ограничения) |
Квадратичные объективные, линейные ограничения | quadprog | lsqlin , lsqnonneg (если цель не может быть преобразована, чтобы минимизировать || C*x - d ||^2 затем solve , выдает ошибку для этих решателей), |
Минимизируйте || C*x - d ||^2 подвергающийся линейным ограничениям | lsqlin , когда цель является константой плюс сумма квадратов линейных выражений | quadprog , lsqnonneg (Ограничения кроме x> = 0 проигнорированы для lsqnonneg ), |
Минимизируйте || C*x - d ||^2 подвергающийся x> = 0 | lsqlin | quadprog lsqnonneg |
Минимизируйте общий нелинейный функциональный f (x) | fminunc | fmincon |
Минимизируйте общий нелинейный функциональный f (x), подвергающийся некоторым ограничениям, или минимизируйте любой функциональный предмет к нелинейным ограничениям | fmincon | 'none' |
Для проблем максимизации не задавайте решатели lsqnonneg
и lsqlin
. Если вы делаете, solve
выдает ошибку, потому что эти решатели не могут максимизировать.
Пример: 'intlinprog'
Типы данных: char | string
sol
— РешениеРешение, возвращенное как структура. Поля структуры являются именами переменных оптимизации. Смотрите optimvar
.
fval
Значение целевой функции в решенииЗначение целевой функции в решении, возвращенном как вещественное число.
Если вы забыли просить fval
, можно вычислить его использование:
fval = evaluate(prob.Objective,sol)
exitflag
Обоснуйте остановленный решательОбоснуйте, что остановленный решатель, возвратился как категориальная переменная. Эта таблица описывает выходные флаги для решателя intlinprog
.
Выйдите из флага для intlinprog | Числовой эквивалент | Значение |
---|---|---|
OptimalWithPoorFeasibility | 3 | Решение выполнимо относительно относительного допуска |
IntegerFeasible | 2 | intlinprog , остановленный преждевременно и найденный целочисленной допустимой точкой. |
OptimalSolution | 1 | Решатель сходился к решению |
SolverLimitExceeded | 0 |
Смотрите Допуски и Критерий остановки. |
OutputFcnStop | -1 | intlinprog зашел в выходную функцию или функцию построения графика. |
NoFeasiblePointFound | -2 | Никакая допустимая точка не найдена. |
Unbounded | -3 | Проблема неограниченна. |
FeasibilityLost | -9 | Решатель потерял выполнимость. |
3
Exitflags и -9
относятся к решениям, которые имеют большой infeasibilities. Они обычно являются результатом линейных ограничительных матриц, которые имеют большой номер условия или проблемы, которые имеют большие компоненты решения. Чтобы исправить эти проблемы, попытайтесь масштабировать содействующие матрицы, устранить избыточные линейные ограничения или дать более трудные границы на переменных.
Эта таблица описывает выходные флаги для решателя linprog
.
Выйдите из флага для linprog | Числовой эквивалент | Значение |
---|---|---|
OptimalWithPoorFeasibility | 3 | Решение выполнимо относительно относительного допуска |
OptimalSolution | 1 | Решатель сходился к решению |
SolverLimitExceeded | 0 | Количество итераций превышает |
NoFeasiblePointFound | -2 | Никакая допустимая точка не найдена. |
Unbounded | -3 | Проблема неограниченна. |
FoundNaN | -4 | Значение |
PrimalDualInfeasible | -5 | И основные и двойные проблемы неосуществимы. |
DirectionTooSmall | -7 | Поисковое направление является слишком маленьким. Никакие дальнейшие успехи не могут быть сделаны. |
FeasibilityLost | -9 | Решатель потерял выполнимость. |
3
Exitflags и -9
относятся к решениям, которые имеют большой infeasibilities. Они обычно являются результатом линейных ограничительных матриц, которые имеют большой номер условия или проблемы, которые имеют большие компоненты решения. Чтобы исправить эти проблемы, попытайтесь масштабировать содействующие матрицы, устранить избыточные линейные ограничения или дать более трудные границы на переменных.
Эта таблица описывает выходные флаги для решателя lsqlin
.
Выйдите из флага для lsqlin | Числовой эквивалент | Значение |
---|---|---|
FunctionChangeBelowTolerance | 3 | Изменение в невязке меньше, чем заданный допуск |
StepSizeBelowTolerance | 2 | Размер шага, меньший, чем |
OptimalSolution | 1 | Решатель сходился к решению |
SolverLimitExceeded | 0 | Количество итераций превышает |
NoFeasiblePointFound | -2 | Проблема неосуществима. Или для алгоритма |
IllConditioned | -4 | Плохо создание условий предотвращает дальнейшую оптимизацию. |
NoDescentDirectionFound | -8 | Поисковое направление является слишком маленьким. Никакие дальнейшие успехи не могут быть сделаны. (алгоритм |
Эта таблица описывает выходные флаги для решателя quadprog
.
Выйдите из флага для quadprog | Числовой эквивалент | Значение |
---|---|---|
LocalMinimumFound | 4 | Локальный минимум найден; минимум не уникален. |
FunctionChangeBelowTolerance | 3 | Изменение в значении целевой функции меньше, чем заданный допуск |
StepSizeBelowTolerance | 2 | Размер шага, меньший, чем |
OptimalSolution | 1 | Решатель сходился к решению |
SolverLimitExceeded | 0 | Количество итераций превышает |
NoFeasiblePointFound | -2 | Проблема неосуществима. Или для алгоритма |
IllConditioned | -4 | Плохо создание условий предотвращает дальнейшую оптимизацию. |
Nonconvex | -6 | Невыпуклая проблема обнаруживается. (алгоритм |
NoDescentDirectionFound | -8 | Не мог вычислить направление шага. (алгоритм |
Эта таблица описывает выходные флаги для решателя fminunc
.
Выйдите из флага для fminunc | Числовой эквивалент | Значение |
---|---|---|
NoDecreaseAlongSearchDirection | 5 | Предсказанное уменьшение в целевой функции является меньше, чем допуск |
FunctionChangeBelowTolerance | 3 | Изменение в значении целевой функции является меньше, чем допуск |
StepSizeBelowTolerance | 2 | Изменение в |
OptimalSolution | 1 | Значение градиента меньше, чем допуск |
SolverLimitExceeded | 0 | Количество итераций превышает |
OutputFcnStop | -1 | Зашедший выходная функция или функция построения графика. |
Unbounded | -3 | Целевая функция при текущей итерации ниже |
Эта таблица описывает выходные флаги для решателя fmincon
.
Выйдите из флага для fmincon | Числовой эквивалент | Значение |
---|---|---|
NoDecreaseAlongSearchDirection | 5 | Значение косой производной в поисковом направлении является меньше, чем 2* |
SearchDirectionTooSmall | 4 | Значение поискового направления является меньше, чем 2* |
FunctionChangeBelowTolerance | 3 | Изменение в значении целевой функции является меньше, чем |
StepSizeBelowTolerance | 2 | Изменение в |
OptimalSolution | 1 | Мерой по оптимальности первого порядка являются меньше, чем |
SolverLimitExceeded | 0 | Количество итераций превышает |
OutputFcnStop | -1 | Зашедший выходная функция или функция построения графика. |
NoFeasiblePointFound | -2 | Никакая допустимая точка не найдена. |
Unbounded | -3 | Целевая функция при текущей итерации ниже |
вывод
Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура. Выходная структура содержит поля в соответствующем базовом решателе выходное поле, в зависимости от которого решателя solve
вызвал:
solve
включает дополнительное поле Solver
в структуру output
, чтобы идентифицировать используемый решатель, такой как 'intlinprog'
.
\lambda
Множители Лагранжа в решенииМножители Лагранжа в решении, возвращенном как структура. Для решателя intlinprog
lambda
пуст, []
. Для других решателей lambda
имеет эти поля:
Поля Variables
- Contains для каждой проблемной переменной. Каждое проблемное имя переменной является структурой с двумя полями:
Ниже
Множители Лагранжа сопоставлены со свойством переменной LowerBound
, возвращенным как массив, одного размера как переменная. Ненулевые записи означают, что решение в нижней границе. Эти множители находятся в структуре
.lambda.Variables.variablename.Lower
Верхний
Множители Лагранжа сопоставлены со свойством переменной UpperBound
, возвращенным как массив, одного размера как переменная. Ненулевые записи означают, что решение в верхней границе. Эти множители находятся в структуре
.lambda.Variables.variablename.Upper
Ограничения
Содержит поле для каждого ограничения задач. Каждое ограничение задач находится в структуре, имя которой является ограничительным именем, и чье значение является числовым массивом, одного размера как ограничение. Ненулевые записи означают, что ограничение активно в решении. Эти множители находятся в структуре
.lambda.Constraints.constraintname
Элементы ограничительного массива все имеют то же сравнение (<=
, ==
или >=
) и все имеют тот же тип (линейны, квадратичны, или нелинейны).
Внутренне, функция solve
решает задачи оптимизации путем вызова решателя:
linprog
для линейных объективных и линейных ограничений
intlinprog
для линейных объективных и линейных ограничений и целочисленных ограничений
quadprog
для квадратичных объективных и линейных ограничений
lsqlin
или lsqnonneg
для линейного метода наименьших квадратов с линейными ограничениями
fminunc
для проблем без любых ограничений (даже переменные границы) и с общей нелинейной целевой функцией
fmincon
для проблем с нелинейным ограничением, или с общей нелинейной целью и по крайней мере одним ограничением
Прежде чем solve
может вызвать эти функции, проблемы должны быть преобразованы в форму решателя, или solve
или некоторыми другими присоединенными функциями или объектами. Это преобразование влечет за собой, например, линейные ограничения, имеющие матричное представление, а не переменное выражение оптимизации.
Первый шаг в алгоритме происходит, когда вы помещаете выражения оптимизации в проблему. Объект OptimizationProblem
имеет внутренний список переменных, используемых в его выражениях. Каждая переменная имеет линейный индекс в выражении и размер. Поэтому проблемные переменные имеют подразумеваемую матричную форму. Функция prob2struct
выполняет преобразование от проблемной формы до формы решателя. Для примера смотрите, Преобразовывают проблему в Структуру.
Для значения по умолчанию и позволенных решателей, что вызовы solve
, в зависимости от проблемной цели и ограничений, смотрите 'solver'
. Можно заменить значение по умолчанию при помощи аргумента пары "имя-значение" 'solver'
при вызове solve
.
Для алгоритма, что использование intlinprog
, чтобы решить проблемы MILP, см. intlinprog Алгоритм. Для алгоритмов, что использование linprog
, чтобы решить линейные проблемы программирования, см. Линейные Алгоритмы Программирования. Для алгоритмов, что использование quadprog
, чтобы решить проблемы квадратичного программирования, см. Алгоритмы Квадратичного программирования. Для алгоритмов, что использование lsqlin
, чтобы решить проблемы линейного метода наименьших квадратов, смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы. Для нелинейных алгоритмов решателя см. Неограниченные Нелинейные Алгоритмы Оптимизации и Ограниченные Нелинейные Алгоритмы Оптимизации.
Если ваша целевая функция является суммой квадратов, и вы хотите, чтобы solve
распознал его как таковой, записал его как sum(expr.^2)
, и не как expr'*expr
. Внутренний синтаксический анализатор распознает только явные суммы квадратов. Для примера смотрите Неотрицательную задачу для метода наименьших квадратов, Основанную на проблеме.
Ошибки, запускающиеся в R2018b
Чтобы выбрать опции или базовый решатель для solve
, используйте пары "имя-значение". Например,
sol = solve(prob,'options',opts,'solver','quadprog');
Предыдущие синтаксисы не были столь же гибкими, стандартными, или расширяемыми как пары "имя-значение".
OptimizationProblem
| evaluate
| findindex
| fmincon
| fminunc
| intlinprog
| linprog
| lsqlin
| lsqnonneg
| optimoptions
| prob2struct
| quadprog
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.