createOptimProblem
创建优化问题结构体
说明
为 problem = createOptimProblem(solverName)solverName 求解器创建一个空的优化问题结构体。
使用一个或多个名称-值参量指定其他选项。problem = createOptimProblem(solverName,Name,Value)
示例
使用以下设定创建一个问题结构体:
fmincon求解器"interior-point"算法随机二维初始点
x0罗森布罗克函数作为目标
下界为 -2
上界为 2
适用于二维变量 的罗森布罗克函数是 (有关详细信息,请参阅使用优化实时编辑器任务或求解器的有约束非线性问题)。要指定 "interior-point" 算法,请使用 optimoptions 创建选项。
anonrosen = @(x)(100*(x(2) - x(1)^2)^2 + (1-x(1))^2); opts = optimoptions(@fmincon,Algorithm="interior-point"); rng default % For reproducibility problem = createOptimProblem("fmincon",... x0=randn(2,1),... objective=anonrosen,... lb=[-2;-2],... ub=[2;2],... options=opts);
通过调用 fmincon 从 problem.x0 开始求解问题。
[x,fval] = fmincon(problem)
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. <stopping criteria details>
x = 2×1
1.0000
1.0000
fval = 2.0603e-11
通过调用 GlobalSearch 寻找更优解。
gs = GlobalSearch; [x2,fval2] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points. All 16 local solver runs converged with a positive local solver exit flag.
x2 = 2×1
1.0000
1.0000
fval2 = 2.1093e-11
在本例中,fmincon 和 GlobalSearch 得到相同的解。
输入参数
优化求解器,指定为以下项之一。
对于
GlobalSearch,指定"fmincon"或@fmincon。对于
MultiStart,请指定"fmincon"或@fmincon、"fminunc"或@fminunc、"lsqnonlin"或@lsqnonlin或者"lsqcurvefit"或@lsqcurvefit。
示例: "fmincon"
数据类型: char | string | function_handle
名称-值参数
将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: createOptimProblem("fmincon","x0",x0,"objective",fun,"lb",zeros(size(x0)))
线性等式约束,指定为实矩阵。Aeq 是 Me×nvars 矩阵,其中 Me 是等式的数目。
Aeq 以如下形式编写 Me 个线性等式
Aeq*x = beq,
其中,x 是由 N 个变量组成的列向量 x(:),beq 是具有 Me 个元素的列向量。
例如,要指定
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
提供以下约束:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
示例: 要指定控制项变量总和为 1,请给出约束 Aeq = ones(1,N) 和 beq = 1。
数据类型: double
线性不等式约束,指定为实矩阵。Aineq 是 M×nvars 矩阵,其中 M 是不等式的数目。
Aineq 以如下形式编写 M 个线性不等式
Aineq*x <= bineq,
其中,x 是由 nvars 个变量组成的列向量 x(:),bineq 是具有 M 个元素的列向量。
例如,要指定
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
提供以下约束:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
示例: 要指定控制项变量总和等于或小于 1,请给出约束 Aineq = ones(1,N) 和 bineq = 1。
数据类型: double
线性等式约束,指定为实数向量。beq 是与 Aeq 矩阵相关的包含 Me 个元素的向量。如果将 beq 作为行向量传递,求解器会在内部将 beq 转换为列向量 beq(:)。
beq 以如下形式编写 Me 个线性等式
Aeq*x = beq,
其中,x 是由 N 个变量组成的列向量 x(:),Aeq 是大小为 Meq×N 的矩阵。
例如,要指定
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
提供以下约束:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
示例: 要指定控制项变量总和为 1,请给出约束 Aeq = ones(1,N) 和 beq = 1。
数据类型: double
线性不等式约束,指定为实数向量。bineq 是与 Aineq 矩阵相关的包含 M 个元素的向量。如果将 bineq 作为行向量传递,求解器会在内部将 bineq 转换为列向量 bineq(:)。
bineq 以如下形式编写 M 个线性不等式
Aineq*x <= bineq,
其中,x 是由 N 个变量组成的列向量 x(:),Aineq 是大小为 M×N 的矩阵。
例如,要指定
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
提供以下约束:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
示例: 要指定控制项变量总和等于或小于 1,请给出约束 Aineq = ones(1,N) 和 bineq = 1。
数据类型: double
下界,指定为实数向量或双精度数组。lb 表示 lb ≤ x ≤ ub 中元素的下界。
createOptimProblem 在内部将数组 lb 转换为向量 lb(:)。
示例: lb = [0;-Inf;4] 表示 x(1) ≥ 0,x(3) ≥ 4。
数据类型: double
非线性约束,指定为函数句柄或函数名称。nonlcon 函数接受数组 x,并返回两个数组 c(x) 和 ceq(x)。
c(x)是由x处的非线性不等式约束组成的数组。对于c的所有条目,求解器尝试满足c(x) <= 0。ceq(x)是由x处的非线性等式约束组成的数组。对于ceq的所有条目,求解器尝试满足ceq(x) = 0。
例如,nonlcon 是一个 MATLAB® 函数,如下所示:
function [c,ceq] = nonlcon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
有关详细信息,请参阅非线性约束。
数据类型: char | string | function_handle
目标函数,指定为函数句柄或函数名称。
对于除
lsqnonlin和lsqcurvefit之外的所有求解器,目标函数必须接受数组x并返回标量。如果SpecifyObjectiveGradient选项为true,则目标函数必须返回第二个输出,即表示目标梯度的向量。有关详细信息,请参阅fun。对于
lsqnonlin,目标函数必须接受向量x并返回一个向量。如果SpecifyObjectiveGradient选项为true,则目标函数必须返回第二个输出,即表示目标的雅可比矩阵。有关详细信息,请参阅fun。对于
lsqcurvefit,目标函数必须接受两个输入(即x和xdata),并返回一个向量。如果SpecifyObjectiveGradient选项为true,则目标函数必须返回第二个输出,即表示目标的雅可比矩阵。有关详细信息,请参阅fun。
示例: @sin
示例: "sin"
数据类型: char | string | function_handle
优化选项,指定为 optimoptions 的输出。
示例: optimoptions("fmincon","SpecifyObjectiveGradient",true)
上界,指定为实数向量或双精度数组。ub 表示 lb ≤ x ≤ ub 中元素的上界。
createOptimProblem 在内部将数组 ub 转换为向量 ub(:)。
示例: ub = [Inf;4;10] 表示 x(2) ≤ 4,x(3) ≤ 10。
数据类型: double
初始点,指定为实数向量或实数数组。求解器使用 x0 中的元素数量和 x0 的大小来确定 fun 接受的变量数量和大小。
示例: x0 = [1,2,3,4]
数据类型: double
模型的输入数据,指定为实数向量或实数数组。模型是
ydata = fun(x,xdata),
其中,xdata 和 ydata 是固定数组,x 是 lsqcurvefit 寻求最小平方和时要更改的参数所组成的数组。
示例: xdata = [1,2,3,4]
数据类型: double
模型的响应数据,指定为实数向量或实数数组。模型是
ydata = fun(x,xdata),
其中,xdata 和 ydata 是固定数组,x 是 lsqcurvefit 寻求最小平方和时要更改的参数所组成的数组。
ydata 数组的大小和形状必须与 fun(x0,xdata) 数组相同。
示例: ydata = [1,2,3,4]
数据类型: double
输出参量
版本历史记录
在 R2010a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)