混合整数优化代理,具体问题具体分析
这个例子展示了如何解决涉及整数变量的优化问题。在这个例子中,找到问题的关键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解决问题。
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解决问题。
surrogateopt停止,因为它超过了设定的评价函数极限“options.MaxFunctionEvaluations”。
sol2 =结构体字段:xcont (1.2133 - 1.4719 1.1857 - 1.5003): xint: [1 1 1 1 1 1]
fval2 = 0.9736
这次的整数变量达到正确的解决方案,和附近的连续变量是解决方案,但并不完全准确。
Helper函数
这段代码创建了multirosenbrock
helper函数。
函数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)总和;结束