optimvalues
说明
为问题 val = optimvalues(prob,dataname1,dataval1,...)prob 创建了一个 OptimizationValues 对象。使用名称-值参量指定所有变量名称及其关联值,以及可选的目标或约束值。例如,要指定 x 取 1 至 99 之间的奇数值,
val = optimvalues(prob,x=1:2:99);
使用 val 作为 prob 的初始点或初始种群。
示例
为了在基于问题的方法中为 ga(遗传算法求解器)创建初始点,请使用 OptimizationValues 创建 optimvalues 对象。
以罗森布洛克函数作为适应度(目标)函数,为二维问题创建优化变量。
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 =
1×100 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 … ] (1×100 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 … ] (1×100 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 NaN … ] (1×100 double)
从初始点 ga 开始,使用 vals 求解问题。将 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 创建初始点,请使用 OptimizationValues 创建 optimvalues 对象。
为以罗森布洛克函数为目标函数的二维问题创建优化变量。
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 =
1×40 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 … ] (1×40 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 … ] (1×40 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 … ] (1×40 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 … ] (1×40 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]
从初始点 surrogateopt 开始,使用 vals 求解问题。
[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。
输入参数
优化问题,指定为 OptimizationProblem 对象。使用 optimproblem 创建 prob。
为了从 optimvalues 获得有用的输出,您还必须在名称值参量中包含一些数据。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: val = optimvalues(x=xvals,y=yvals)
变量、命名目标或命名约束的数据,指定为实数双精度数组。指定变量的所有数据名称。目标和约束函数名称是可选的。
当您指定 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
未命名目标函数的值,指定为实数双精度数组。值的大小与 dataname 中的相同。
您可以通过两种方式为优化问题指定多个目标函数的值:
优化问题的
Objective属性是一个函数句柄,其中函数返回一个向量或数组。在这种情况下,将值指定为矩阵。矩阵的每一行代表各个点的一个目标的值。每列代表某一点上各个目标的值。优化问题的
Objective属性具有多个命名目标。在这种情况下,使用其名称作为dataname参量来指定每个命名目标的值。
这些求解器使用任何提供的目标函数值:
gagamultiobjparetosearchparticleswarmsurrogateopt
示例: 对于一个目标和两分,val = optimvalues(prob,x=[3,5],Objective=[exp(3)+1,exp(5)-1])
数据类型: double
未命名约束函数的值,指定为实数双精度数组。值的大小与 dataname 中的相同。
您可以通过两种方式为优化问题指定多个约束函数的值:
优化问题的
Constraints属性是一个函数句柄,其中函数返回一个数组。在这种情况下,将值指定为一个数组,其维度比函数返回的维度多一个。优化问题的
'Constraints'属性具有多个命名约束。在这种情况下,使用其名称作为dataname参量来指定每个命名约束的值。
这些求解器使用任何提供的非线性约束函数值:
paretosearchsurrogateopt
这些求解器确保在所有迭代或所有种群成员中满足线性约束:
gagamultiobjparetosearchpatternsearchsurrogateopt
示例: 对于两点和三个约束,val = optimvalues(prob,x=[3,5],Objective=[exp(3)+1,exp(5)-1],Constraints=[4 5;-7 -2;0.2 12])
数据类型: double
输出参量
点和函数值,以 OptimizationValues 对象的向量返回。该向量有 nval 个条目,其中 nval 是 val 中的点数。
版本历史记录
在 R2022a 中推出使用 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 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)