用来Globalsearch.
要么多层的
求解器,您必须首先创建一个问题结构。建议创建问题结构的方法是使用createOptimproblem.
功能。您可以手动创建结构,但这样做就会出错。
createOptimproblem.
功能按照以下步骤使用此步骤创建问题结构createOptimproblem.
功能。
将您的目标函数定义为文件或匿名函数。有关详细信息,请参阅计算目标函数。如果你的求解器是lsqcurvefit.
要么lsqnonlin.
,确保目标函数返回向量,而不是标量。
如果相关,请创建约束,例如界限和非线性约束函数。有关详细信息,请参阅写制约束。
创建一个起点。例如,要创建三维随机起始点XSTART.
:
xstart = Randn(3,1);
(可选)使用优化选择
。例如,
选项= Optimoptions(@ Fmincon,'算法','内部点');
进入
问题= createOptimproblem(求解器那
在哪里求解器
是您当地的求解器的名称:
为了Globalsearch.
:'粉丝'
为了多层的
选择是:
'粉丝'
'fminunc'
'lsqcurvefit'
'lsqnonlin'
有关帮助选择,请参阅优化决策表。
使用初始点使用'x0'
范围。如果你的初始点是XSTART.
,你的解决者是粉刺
,你的条目现在
问题= createOptimprobrom('fmincon','x0',xstart,
包括用于您的目标函数的功能手柄客观的
:
问题= createOptimprobrom('fmincon','x0',xstart,...'目标',@objfun.那
设置界限和其他约束。
约束 | 名称 |
---|---|
下限 | '磅' |
上限 | 'UB' |
矩阵Aineq. 用于线性不平等Aineq X. ≤.Bineq. |
'Aineq' |
向量Bineq. 用于线性不平等Aineq X. ≤.Bineq. |
'bineq' |
矩阵AEQ. 用于线性平衡AEQ X. =贝卡 |
'aeq' |
向量贝卡 用于线性平衡AEQ X. =贝卡 |
'beq' |
非线性约束函数 | 'nonlcon' |
如果使用这件lsqcurvefit.
本地求解器,包括输入数据的向量和响应数据,命名'xdata'
和'ydata'
分别。
最佳实践:通过在结构上运行求解器来验证问题结构。例如,如果您的本地求解器是粉刺
:
[x,fval,eflag,输出] = fmincon(问题);
createOptimproblem.
此示例最小化了功能运行求解器,受约束X1+ 2X2≥4。目标是
六分钟= 4.X2- 2.1X4.+X6./ 3 +XY.- 4.y2+ 4y4.。 | (1) |
使用内部点
算法的粉刺
,并将开始点设置为[2; 3]
。
为目标函数写一个函数句柄。
六分= @(x)(4 * x(1)^ 2 - 2.1 * x(1)^ 4 + x(1)^ 6/3 ... + x(1)* x(2) - 4 * x(2)^ 2 + 4 * x(2)^ 4);
写入线性约束矩阵。将约束更改为“少于”形式:
a = [-1,-2];b = -4;
创建本地选项以使用内部点
算法:
opts = Optimoptions(@ Fmincon,'算法','内部点');
创建问题结构createOptimproblem.
:
问题= createOptimproblus('fmincon',...'x0',[2; 3],'目标',sixmin,...'Aineq',a,'bineq',b,'选项',选择)
由此产生的结构:
问题=带字段的结构:目标:@(x)(4 * x(1)^ 2-2.1 * x(1)^ 4 + x(1)^ 6/3 + x(1)* x(2) -4.*x(2)^2+4*x(2)^4) x0: [2x1 double] Aineq: [-1 -2] bineq: -4 Aeq: [] beq: [] lb: [] ub: [] nonlcon: [] solver: 'fmincon' options: [1x1 optim.options.Fmincon]
最佳实践:通过在结构上运行求解器来验证问题结构:
[x,fval,eflag,输出] = fmincon(问题);