この例では,問題ベースのアプローチを使用して,目的関数と制約の両方に対して値を計算する場合に関数を2回呼び出すことを回避する方法を説明します。ソルバーベースのアプローチについては,同じ关键词的とと形制约を参照してください。
このこのな关键はにシミュレーションシミュレーション使ますれれはとと非非れ両がの结果に対して同じ计算をののの结果に対して同じ计算ををのの结果に対して同じ同じ计算ますのの常に対してに対して同じ计算ますますの常常に対してに対してれれます。
この例では,并列并列计算がソルバーのの速度もたらす效果についてもも说说说しますますますますのの场场场点をを使使ととでででで答关键词关键词关键词を呼び出さなくてもため,ソルバーソルバー高度両方向ますことができ。
关节有关部computeall
は,目的关数と非线形制约の一部である出力を返します。
类型computeall
功能[f1,c1] = computeall(x)c1 = norm(x)^ 2 - 1;F1 = 100 *(x(2) - x(1)^ 2)^ 2 +(1 - x(1))^ 2;暂停(1)%模拟昂贵的计算端
この关节,时间の关有关部のを行うため,暂停(1)
ステートメントが含まれています。
このこのでは,4要素の最适化学数量を使し。
x = Optimvar('X',4);
'reuseevaluation'
をを用し关键词変换关节有关部computeall
を最适化式に変换ししますます最适にかかる时空。'reuseevaluation'
を使用します。ソルバーが出力式のサイズを決定する(1回のみ行われる)時間を短縮するには,名前と値のペア'输出'
を[1 1]
に设定し,F
とC
のの方がスカラースカラーことを示します。
[f、c] = fcn2optimexpr (@computeall x,'reuseevaluation',真的,'输出',[1 1]);
式F
から目的关节作作作作作者人し。
obj = f + 20 *(x(3) - x(4)^ 2)^ 2 + 5 *(1 - x(4))^ 2;
式C
から非線形不等式制約を作成します。
缺点= c <= 0;
最最化问题を作品成品,附近有关。
概率= optimproblem ('客观的',obj);prob.constraints.cons =缺点;展示(prob)
优化问题:解决:x最小化:((arg3 +(20. *(x(3) - x(4)。^ 2)。^ 2))+(5。*(1 - x(4))。^2))在其中:[arg3,〜] = computeAll(x);符合缺点:arg_lhs <= 0其中:[〜,arg_lhs] = computeall(x);
初x0.x = [-1; 1; 1; 2]
から始めて,问题を解くのにかかる时间を监视します。
x0.x = [-1; 1; 1; 2];x0.x = x0.x / rang(x0.x);%可行的初始点Tic [Sol,Fval,ExitFlag,输出] =求解(prob,x0)
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
sol =结构与字段:X:[4×1双]
fval = 0.7107
ExitFlag = OptimalAllyolution.
输出=结构与字段:firstderopt: 4.0000e-07 cgiterations:↵Local minimum found that满足约束。↵↵优化完成,因为目标函数在↵可行方向上不减小到最优性容差值内,↵和约束条件满足到约束容差值内。↵↵<停止标准详细信息>↵↵优化完成:相对一阶优化度量,2.909695e-07,↵小于选项。OptimalityTolerance = 1.000000e-06,相对最大约束↵违例,0.000000e+00,小于选项。ConstraintTolerance = 1.000000 e-06。↵↵”解算器:“fmincon”
time1 = toc.
time1 = 149.9299.
求解は,关节の度わずか。
FPRINTF(“解决的秒数为%g,评估点的数量为%g。\ n”、time1 output.funcCount)
解决的秒数为149.93,评价点数为149。
代わりに,'reuseevaluation'
をを用してfcn2optimexpr
を呼び出さない場合,求解の所要時間が2倍になります。
[f2,c2] = fcn2optimexpr(@ computeall,x,'reuseevaluation',错误的);obj2 = f2 + 20 *(x(3) - x(4)^ 2)^ 2 + 5 *(1 - x(4))^ 2;cons2 = c2 <= 0;prob2 = OptimProblem('客观的', methoda);prob2.Constraints。cons2 = cons2;Tic [sol2,fval2,exitflag2,output2] = solve(prob2,x0);
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
time2 = toc.
time2 = 298.4493
并行计算工具箱™のライセンスをお持ちののの,并列计算によって时间をさらにできますます。これを行うは,并列并列うには,并列处を使するようオプション设定し,オプションを设定して解决
を呼び出します。
选项= Optimoptions(probOptions(prob,'使用指惯',真的);Tic [Sol3,FVAL3,EXITFLAG3,OUTPUT3] =求解(Prob,X0,'选项',选项);
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
历史问题= toc
time3 = 74.7043.
并列致理性'reuseevaluation'
を一般に使用することで,'reuseevaluation'
のみのみを使するするを高度化でき。
Tic [Sol4,FVAL4,EXITFLAG4,OUTPUT4] =求解(prob2,x0,'选项',选项);
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
time4 = toc.
time4 = 145.5278.
时间测定の结果结果ををののののにに结しし
timingtable =表([time1; time2; time3; time4],......'rownames',[“重复使用串行”;“没有重复使用序列”;“重复使用并行”;“没有并行”])
timingtable =4×1表VAR1 ______再利用串行149.93 NO重用串行298.45重用并行74.704无重复使用并行145.53
この问题では,6コアプロセッサを搭载したで并列计算を行った料,所要时间は逐次の约约约约にますます。'reuseevaluation'
を使用して計算を行った場合,所要時間は'reuseevaluation'
を使用せずに計算する場合の約半分になります。'reuseevaluation'
をを用した并列计算の所要所要所要'reuseevaluation'
をを用しない逐次计算约の4分の1ににます。