创建问题结构
关于问题的结构
使用GlobalSearch
或MultiStart
解决,您必须首先创建一个结构问题。推荐的方法创建一个结构问题使用createOptimProblem
函数。你可以手动创建一个结构,但这样做是容易出错的。
使用createOptimProblem
函数
按照以下步骤创建一个结构使用的问题createOptimProblem
函数。
定义你的目标函数作为一个文件或匿名函数。有关详细信息,请参见计算目标函数。如果你的解算器
lsqcurvefit
或lsqnonlin
,确保目标函数返回一个向量,而不是标量。创建您的约束,如果相关,如边界和非线性约束函数。有关详细信息,请参见写约束。
创建一个起点。例如,要创建一个三维随机起始点
xstart
:xstart = randn (3,1);
使用(可选)创建选项
optimoptions
。例如,选择= optimoptions (@fmincon、“算法”、“内点”);
输入
问题= createOptimProblem (解算器,
在哪里
解算器
是你当地的解算器的名称:为
GlobalSearch
:“fmincon”
为
MultiStart
的选择是:“fmincon”
“fminunc”
“lsqcurvefit”
“lsqnonlin”
帮助选择,看到优化决策表。
设置一个初始点使用
“x0”
参数。如果你的初始点xstart
,你的解算器fmincon
现在,你的条目问题= createOptimProblem (fmincon, x0, xstart,
包括你的目标函数的函数处理
客观的
:问题= createOptimProblem (fmincon, x0, xstart,…“客观”,@objfun,
设置边界和其他限制适用。
约束 的名字 下界 “磅”
上界 乌兰巴托的
矩阵 Aineq
对于线性不等式Aineq x
≤bineq
“Aineq”
向量 bineq
对于线性不等式Aineq x
≤bineq
“bineq”
矩阵 Aeq
线性等式Aeq x
=说真的
“Aeq”
向量 说真的
线性等式Aeq x
=说真的
“说真的”
非线性约束函数 “nonlcon”
如果使用
lsqcurvefit
当地的解算器,包括输入数据和响应数据的向量,命名“xdata”
和“ydata”
分别。最佳实践:验证问题结构通过运行你的解算器结构。例如,如果您的当地的能手
fmincon
:[x, fval exitflag、输出]= fmincon(问题);
例子:创建一个结构问题createOptimProblem
这个例子最小化的功能运行解算器,受到约束x1+ 2x2≥4。我们的目标是
sixmin = 4x2- 2.1x4+x6/ 3 +xy- 4y2+ 4y4。 | (1) |
使用内点
算法的fmincon
,并设置起始点(2、3)
。
编写一个函数处理目标函数。
sixmin = @ (x) (4 * x (1) ^ 2 - 2.1 * (1) ^ 4 + x (1) ^ 6/3……+ x (1) * (2) - 4 * x (2) ^ 2 + 4 * x (2) ^ 4);
编写线性约束矩阵。改变“小于”形式的约束:
一个= [1,2];b = 4;
创建本地选择使用
内点
算法:选择= optimoptions (@fmincon、“算法”、“内点”);
创建结构的问题
createOptimProblem
:问题= createOptimProblem (“fmincon”,…x0,(2, 3),“客观”,sixmin,……‘Aineq’,‘bineq’, b,“选项”,选择)
由此产生的结构:
问题=结构体字段:目的:@ (x) (4 * x (1) ^ 2 - 2.1 * (1) ^ 4 + x (1) ^ 6/3 + x (1) * (2) 4 * x (2) ^ 2 + 4 * x (2) ^ 4) x0: [2 x1双]Aineq: [1 - 2] bineq: 4 Aeq:[]说真的:[]磅:[]乌兰巴托:[]nonlcon:[]解算器:“fmincon”选项:[1 x1 optim.options.Fmincon]
最佳实践:验证运行结构的问题解决者的结构:
[x, fval exitflag、输出]= fmincon(问题);