matlab - 在矢量化函数中调用模式搜索
问题描述
我有一个矢量化函数,它是优化器(遗传算法)的目标函数。
在这个函数内部,有一个快速优化,它是这个函数计算的一部分,如下所示:
function error = ObjectiveFunction(a, b, c)
x = a.*b;
y = c.*b;
z = patternsearch(@fun, [x, y]);
error = x+y.*z;
end
solution = ga(@ObjectiveFunction, 'vectorized', true);
ObjectiveFunction
接受解向量。这使ga
工作更快。但是,由于内部ObjectiveFunction
有patternsearch
进程,因此这种矢量化将无用,因为patternsearch
(作为优化器)不能以矢量化方式工作。
所以我不得不将我的功能编辑为:
function error = ObjectiveFunction(a, b, c)
x = a.*b;
y = c.*b;
for i = 1:size(x,1)
z(i) = patternsearch(@fun, [x(i), y(i)]);
end
error = x+y.*z;
end
反正有没有用矢量化调用替换循环patternsearch
?
解决方案
请考虑使用arrayfun
如下
function error = ObjectiveFunction(a, b, c)
x = a.*b;
y = c.*b;
z = arrayfun(@(x1,y1) patternsearch(@fun, [x1, y1]),x,y);
error = x+y.*z;
end
我希望这可能会有所帮助
推荐阅读
- pytorch - 从 pytorch torch.hub.load 中检索中间特征
- python-3.x - 从元组列表转换为 dict
- java - next thenReturn 仍然返回 thenThrow 的前一个结果
- autotools - autoreconf -i 不使用 AX_SUBDIRS_CONFIGURE 递归运行
- python - 是否可以将 2 块代码压缩成一行 lambda?
- jquery - .html() 方法和 AJAX
- julia - 如何在 Flux.jl 中进行自适应平均池化
- node.js - 无法在 Swift 中使用 Socket.IO 客户端从服务器读取响应
- python - “在分配之前引用的局部变量”,但它是一个函数
- encoding - 该编码文本的类型是什么?