主要内容

混合整数优化代理,具体问题具体分析

这个例子展示了如何解决涉及整数变量的优化问题。在这个例子中,找到问题的关键x这最小化了multirosenbrock函数在整数值参数在10维从3到6。的multirosenbrock函数是一个按比例缩小的功能较差,很难优化。最小值为0,这是获得在点(1,1,…,1)。的代码multirosenbrock函数出现在这个例子

创建一个10 d行向量变量x类型的整数范围3到6。当你指定标量边界,边界组件适用于所有变量。

x = optimvar (“x”1 10“下界”3,“UpperBound”6“类型”,“整数”);

使用multirosenbrock作为目标函数,将函数转换为一种优化表达式使用fcn2optimexpr

有趣= fcn2optimexpr (@multirosenbrock x);

创建一个目标函数的优化问题multirosenbrock

概率= optimproblem (“客观”、有趣的);

设置功能评估的最大数量为200。

选择= optimoptions (“surrogateopt”,“MaxFunctionEvaluations”,200);

解决这个问题。

rng (1,“旋风”)%的再现性[溶胶,fval] =解决(概率,“规划求解”,“surrogateopt”,“选项”选择)
使用surrogateopt解决问题。

图优化函数包含一个坐标轴对象。坐标轴对象与标题最好的函数值:0,包含迭代,ylabel函数值包含一行对象显示它的值只使用标记。该对象代表最好的函数值。

surrogateopt停止,因为它超过了设定的评价函数极限“options.MaxFunctionEvaluations”。
索尔=结构体字段:x: [1 1 1 1 1 1 1 1 1 1)
fval = 0

在这种情况下,surrogateopt达到正确的解决方案。

整数的问题

假设只有前六个变量是整数值。将这个问题,创建一个6元整数变量xint和4 d连续变量xcont

xint = optimvar (“xint”1 6“下界”3,“UpperBound”6“类型”,“整数”);xcont = optimvar (“xcont”,1,4,“下界”3,“UpperBound”6);

转换multirosenbrock一个优化表达式使用输入[xint xcont]

fun2 = fcn2optimexpr (@multirosenbrock [xint xcont]);

创建并解决问题。

prob2 = optimproblem (“客观”,fun2);rng (1,“旋风”)%的再现性[sol2, fval2] =解决(prob2,“规划求解”,“surrogateopt”,“选项”选择)
使用surrogateopt解决问题。

图优化函数包含一个坐标轴对象。坐标轴对象与标题最好的函数值:0.973612,包含迭代,ylabel函数值包含一行对象显示它的值只使用标记。该对象代表最好的函数值。

surrogateopt停止,因为它超过了设定的评价函数极限“options.MaxFunctionEvaluations”。
sol2 =结构体字段:xcont (1.2133 - 1.4719 1.1857 - 1.5003): xint: [1 1 1 1 1 1]
fval2 = 0.9736

这次的整数变量达到正确的解决方案,和附近的连续变量是解决方案,但并不完全准确。

Helper函数

这段代码创建了multirosenbrockhelper函数。

函数F = multirosenbrock (x)%这个函数是一个多维。海涅的泛化%的功能。它在矢量化的方式运作,假设x是一个矩阵%的行。% 2014年版权MathWorks公司。N =大小(x, 2);%假设x是一个行向量或二维矩阵如果国防部(N, 2)%如果N是奇数错误(输入行必须有偶数个元素的)结束优势= 1:2:n - 1;均等的= 2:2:N;F = 0(大小(x));F(:,几率)= 1 - x(:,几率);F(:,均等的)= 10 * (x(:,均等的)- x(:,几率)。^ 2);F = (F . ^ 2, 2)总和;结束

另请参阅

|

相关的话题