Matlab 在for循环内的迭代期间更改模具的大小
我有一个2x1列向量的矩阵[35行x 39列],表示有序对。我还有一个函数,它创建一个9点模具并计算这些点,然后返回9个值并选择最大的一个。然后,它将创建另一个以最大返回值所在位置为中心的9点模具,并继续执行,直到函数在矩阵中的全局最大值处终止 我的问题是,如何通过忽略已评估的点来提高模具的效率?我不想每次评估9分,因为这将花费更长的时间,我正在努力使这个过程尽可能快 过程: 1.)评估一个点及其周围的8, 2.)选择最大的返回值, 3)转到那一点, 4.)重复 我引用一个单元格,所以我使用{I,j}索引Matlab 在for循环内的迭代期间更改模具的大小,matlab,optimization,iteration,Matlab,Optimization,Iteration,我有一个2x1列向量的矩阵[35行x 39列],表示有序对。我还有一个函数,它创建一个9点模具并计算这些点,然后返回9个值并选择最大的一个。然后,它将创建另一个以最大返回值所在位置为中心的9点模具,并继续执行,直到函数在矩阵中的全局最大值处终止 我的问题是,如何通过忽略已评估的点来提高模具的效率?我不想每次评估9分,因为这将花费更长的时间,我正在努力使这个过程尽可能快 过程: 1.)评估一个点及其周围的8, 2.)选择最大的返回值, 3)转到那一点, 4.)重复 我引用一个单元格,所以我使用{I
以下是我的代码:
for k = 1:10^(6)
Setpoint1 = Field{i,j}(1);
Setpoint1 = Field{i,j}(2);
Setpoint2 = Field{i-1,j-1}(1);
Setpoint2 = Field{i-1,j-1}(2);
Setpoint3 = Field{i-1,j}(1);
Setpoint3 = Field{i-1,j}(2);
Setpoint4 = Field{i-1,j+1}(1);
Setpoint4 = Field{i-1,j+1}(2);
Setpoint5 = Field{i,j-1}(1);
Setpoint5 = Field{i,j-1}(2);
Setpoint6 = Field{i,j+1}(1);
Setpoint6 = Field{i,j+1}(2);
Setpoint7 = Field{i+1,j-1}(1);
Setpoint7 = Field{i+1,j-1}(2);
Setpoint8 = Field{i+1,j}(1);
Setpoint8 = Field{i+1,j}(2);
Setpoint9 = Field{i+1,j+1}(1);
Setpoint9 = Field{i+1,j+1}(2);
从那里我进行了9次函数调用,只记录rSquared值(temp1 etc是一个具有多个字段的对象,但我只关心rSquared)
Dan,当我将它与不同的算法进行比较时,我发现:(我可以解决这个问题,我需要的帮助就是这个模板。如果没有关于函数属性的更多信息(单调性很好),那么没有什么比尝试所有可能性更好的了 至少要确保你每件事都只做一次,但我想如果你只做了所有的事情,那是微不足道的 如果您想要性能,请尝试
cellfun
它比循环稍微复杂一些,但可能会提供最佳速度
如果您仍在寻找提高启发式效率的方法,只需跟踪您的进度:
toBeEvaluated = true(35,39);
如果你考虑评估一个点,检查它是否仍然需要完成。在简单地将进度矩阵中的值设置为false之后,你的技术不能保证一个全局的Max你能共享一些示例代码吗?因此,帮助我更好地理解你的问题——为什么不为每一点计算这个平方值,存储所有的它们在某个数组中,只选择最大的?另外,您是否注意到您正在用第二个坐标覆盖每个
设定点
变量?有1365个不同的点组合,每个点通过模型计算大约需要2-3秒。我花了30-40分钟执行程序,我想该算法将初始猜测放在矩阵的中间,i=18,j=20。
toBeEvaluated = true(35,39);