optimvalues
说明
为问题 val
= optimvalues(prob
,dataname
1,dataval1,...)prob
创建了一个 OptimizationValues
对象。使用名称-值参量指定所有变量名称及其关联值,以及可选的目标或约束值。例如,要指定 x
取 1 至 99 之间的奇数值,
val = optimvalues(prob,x=1:2:99);
使用 val
作为 prob
的初始点或初始种群。
示例
为基于问题的 ga
创建初始点
为了在基于问题的方法中为 ga
(遗传算法求解器)创建初始点,请使用 optimvalues
创建 OptimizationValues
对象。
以罗森布洛克函数作为适应度(目标)函数,为二维问题创建优化变量。
x = optimvar("x",LowerBound=-5,UpperBound=5); y = optimvar("y",LowerBound=-5,UpperBound=5); rosenbrock = (10*(y - x.^2)).^2 + (1-x).^2; prob = optimproblem(Objective=rosenbrock);
在边界内创建 100 个随机二维点。这些点必须是行向量。
rng default % For reproducibility xval = -5 + 10*rand(1,100); yval = -5 + 10*rand(1,100);
创建初始点值对象。由于您没有计算适应度值,因此该值在显示中显示为 NaN
。
vals = optimvalues(prob,x=xval,y=yval)
vals = 1x100 OptimizationValues vector with properties: Variables properties: x: [3.1472 4.0579 -3.7301 4.1338 1.3236 -4.0246 -2.2150 0.4688 4.5751 4.6489 -3.4239 4.7059 4.5717 -0.1462 3.0028 -3.5811 -0.7824 4.1574 2.9221 4.5949 1.5574 -4.6429 3.4913 4.3399 1.7874 2.5774 2.4313 -1.0777 1.5548 ... ] (1x100 double) y: [-3.3782 2.9428 -1.8878 0.2853 -3.3435 1.0198 -2.3703 1.5408 1.8921 2.4815 -0.4946 -4.1618 -2.7102 4.1334 -3.4762 3.2582 0.3834 4.9613 -4.2182 -0.5732 -3.9335 4.6190 -4.9537 2.7491 3.1730 3.6869 -4.1556 -1.0022 -2.4013 ... ] (1x100 double) Objective properties: Objective: [NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... ] (1x100 double)
从初始点 vals
开始,使用 ga
求解问题。将 ga
选项设置为种群为 100。
opts = optimoptions("ga",PopulationSize=100); [sol,fv] = solve(prob,vals,Solver="ga",Options=opts)
Solving problem using ga. ga stopped because it exceeded options.MaxGenerations.
sol = struct with fields:
x: 1.0551
y: 1.1133
fv = 0.0030
ga
返回一个非常接近真实解 x = 1, y = 1
的解,其适应度值接近 0
。
为基于问题的 surrogateopt
创建初始值
为了在基于问题的方法中为 surrogateopt
创建初始点,请使用 optimvalues
创建 OptimizationValues
对象。
为以罗森布洛克函数为目标函数的二维问题创建优化变量。
x = optimvar("x",LowerBound=-5,UpperBound=5); y = optimvar("y",LowerBound=-5,UpperBound=5); rosenbrock = (10*(y - x.^2)).^2 + (1 - x).^2; prob = optimproblem(Objective=rosenbrock);
创建约束,使解位于以原点为中心半径为 2 的圆盘中,并位于直线 y = 1 + x 之下。
disc = x^2 + y^2 <= 2^2; prob.Constraints.disc = disc; line = y <= 1 + x; prob.Constraints.line = line;
在边界内创建 40 个随机二维点。这些点必须是行向量。
rng default % For reproducibility N = 40; xval = -5 + 10*rand(1,N); yval = -5 + 10*rand(1,N);
在随机点上评估罗森布洛克函数。函数值必须是行向量。此步骤是可选的。如果您不提供函数值,surrogateopt
将在点 (xval,yval)
处评估目标函数。当您拥有函数值时,您可以通过将这些值作为数据提供来节省求解器的时间。
fval = zeros(1,N); for i = 1:N p0 = struct('x',xval(i),'y',yval(i)); fval(i) = evaluate(rosenbrock,p0); end
评估对这些点的约束。约束值必须是行向量。此步骤是可选的。如果不提供约束值,surrogateopt
将在点 (xval,yval)
处评估约束函数。
discval = zeros(1,N); lineval = zeros(1,N); for i = 1:N p0 = struct('x',xval(i),'y',yval(i)); discval(i) = infeasibility(disc,p0); lineval(i) = infeasibility(line,p0); end
创建初始点值对象。
vals = optimvalues(prob,x=xval,y=yval,Objective=fval,disc=discval,line=lineval)
vals = 1x40 OptimizationValues vector with properties: Variables properties: x: [3.1472 4.0579 -3.7301 4.1338 1.3236 -4.0246 -2.2150 0.4688 4.5751 4.6489 -3.4239 4.7059 4.5717 -0.1462 3.0028 -3.5811 -0.7824 4.1574 2.9221 4.5949 1.5574 -4.6429 3.4913 4.3399 1.7874 2.5774 2.4313 -1.0777 1.5548 -3.2881 ... ] (1x40 double) y: [-0.6126 -1.1844 2.6552 2.9520 -3.1313 -0.1024 -0.5441 1.4631 2.0936 2.5469 -2.2397 1.7970 1.5510 -3.3739 -3.8100 -0.0164 4.5974 -1.5961 0.8527 -2.7619 2.5127 -2.4490 0.0596 1.9908 3.9090 4.5929 0.4722 -3.6138 -3.5071 ... ] (1x40 double) Objective properties: Objective: [1.1067e+04 3.1166e+04 1.2698e+04 1.9992e+04 2.3846e+03 2.6593e+04 2.9811e+03 154.8722 3.5498e+04 3.6362e+04 1.9515e+04 4.1421e+04 3.7452e+04 1.1541e+03 1.6457e+04 1.6510e+04 1.5914e+03 3.5654e+04 5.9109e+03 5.7015e+04 ... ] (1x40 double) Constraints properties: disc: [6.2803 13.8695 16.9638 21.8023 7.5568 12.2078 1.2024 0 21.3146 24.0987 12.7394 21.3751 19.3057 7.4045 19.5331 8.8248 17.7486 15.8313 5.2656 24.7413 4.7390 23.5542 8.1927 18.7982 14.4752 23.7379 2.1343 10.2207 10.7168 ... ] (1x40 double) line: [0 0 5.3853 0 0 2.9222 0.6709 0 0 0 0.1841 0 0 0 0 2.5648 4.3798 0 0 0 0 1.1938 0 0 1.1217 1.0155 0 0 0 0 0.3467 1.2245 4.3736 0.9735 7.3213 0 0 0 0 3.3884]
从初始点 vals
开始,使用 surrogateopt
求解问题。
[sol,fv] = solve(prob,vals,Solver="surrogateopt")
Solving problem using surrogateopt.
surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
sol = struct with fields:
x: 1.0031
y: 1.0057
fv = 3.4923e-05
surrogateopt
返回一个稍微接近真实解 x = 1, y = 1
的解,其目标函数值接近 0
。
输入参数
prob
— 优化问题
OptimizationProblem
对象
优化问题,指定为 OptimizationProblem
对象。使用 optimproblem
创建 prob
。
为了从 optimvalues
获得有用的输出,您还必须在名称值参量中包含一些数据。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量后,但参量对组的顺序无关紧要。
示例: val = optimvalues(x=xvals,y=yvals)
dataname
— 变量、命名目标或命名约束的数据
实数双精度数组
变量、命名目标或命名约束的数据,指定为实数双精度数组。指定变量的所有数据名称。目标和约束函数名称是可选的。
当您指定 nval
点时,每个 dataname
参量的值必须具有以下维度。
prob.property.name | size(value) |
---|---|
标量或向量 | numel(prob.property.name) ×nval |
矩阵或数组 | size(prob.property.name) ×nval |
具体来说,如果 dataname
是一个向量,则 dataname
参量的值是一个具有 nval
列的矩阵。例如,如果 'x'
变量是长度为 2 的行向量,而 nval
为 3,则 'x'
变量规范可能是:
val = optimvalues(prob,'x',[1 2 3; 4 5 -6]);
这个规范意味着 'x'
取三个值 [1,4]
、[2,5]
和 [3,-6]
。
示例: 对于标量 'x'
和二元素行向量 'y'
与 nval = 2
: val = optimvalues(prob,x=[5,3],y=[1 2;3 4])
。输出 val
有两个值: x = 5, y = [1 3]
和 x = 3, y = [2 4]
。
数据类型: double
Objective
— 未命名目标函数的值
实数双精度数组
未命名目标函数的值,指定为实数双精度数组。值的大小与 dataname
中的相同。
您可以通过两种方式为优化问题指定多个目标函数的值:
优化问题的
Objective
属性是一个函数句柄,其中函数返回一个向量或数组。在这种情况下,将值指定为矩阵。矩阵的每一行代表各个点的一个目标的值。每列代表某一点上各个目标的值。优化问题的
Objective
属性具有多个命名目标。在这种情况下,使用其名称作为dataname
参量来指定每个命名目标的值。
这些求解器使用任何提供的目标函数值:
ga
gamultiobj
paretosearch
particleswarm
surrogateopt
示例: 对于一个目标和两分,val = optimvalues(prob,x=[3,5],Objective=[exp(3)+1,exp(5)-1])
数据类型: double
Constraints
— 未命名约束函数的值
双精度实数
未命名约束函数的值,指定为实数双精度数组。值的大小与 dataname
中的相同。
您可以通过两种方式为优化问题指定多个约束函数的值:
优化问题的
Constraints
属性是一个函数句柄,其中函数返回一个数组。在这种情况下,将值指定为一个数组,其维度比函数返回的维度多一个。优化问题的
'Constraints'
属性具有多个命名约束。在这种情况下,使用其名称作为dataname
参量来指定每个命名约束的值。
这些求解器使用任何提供的非线性约束函数值:
paretosearch
surrogateopt
这些求解器确保在所有迭代或所有种群成员中满足线性约束:
ga
gamultiobj
paretosearch
patternsearch
surrogateopt
示例: 对于两点和三个约束,val = optimvalues(prob,x=[3,5],Objective=[exp(3)+1,exp(5)-1],Constraints=[4 5;-7 -2;0.2 12])
数据类型: double
输出参量
val
— 点值和函数值
OptimizationValues
对象的向量
点和函数值,以 OptimizationValues
对象的向量返回。该向量有 nval
个条目,其中 nval
是 val
中的点数。
版本历史记录
在 R2022a 中推出R2023b: 指定 particleswarm
初始点和目标函数值
使用 optimvalues
为基于问题的方法中的 particleswarm
指定初始目标函数值。例如,
x = optimvar("x",1,2,LowerBound=[1 2],UpperBound=[11 13]); fun = sum(exp(x)); prob = optimproblem("Objective",fun); x0 = [3;5] + 7*rand([2 20]); % Twenty initial points val = optimvalues(prob,x=x0,Objective=sum(exp(x0),1)); % Twenty initial values sol = solve(prob,val,Solver="particleswarm")
另请参阅
主题
- 指定 MultiStart 的起点,基于问题 (Global Optimization Toolbox)
- 基于问题指定 surrogateopt 的起点和值 (Global Optimization Toolbox)
- 基于问题的优化工作流
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)