Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在for循环内的迭代期间更改模具的大小_Matlab_Optimization_Iteration - Fatal编程技术网

Matlab 在for循环内的迭代期间更改模具的大小

Matlab 在for循环内的迭代期间更改模具的大小,matlab,optimization,iteration,Matlab,Optimization,Iteration,我有一个2x1列向量的矩阵[35行x 39列],表示有序对。我还有一个函数,它创建一个9点模具并计算这些点,然后返回9个值并选择最大的一个。然后,它将创建另一个以最大返回值所在位置为中心的9点模具,并继续执行,直到函数在矩阵中的全局最大值处终止 我的问题是,如何通过忽略已评估的点来提高模具的效率?我不想每次评估9分,因为这将花费更长的时间,我正在努力使这个过程尽可能快 过程: 1.)评估一个点及其周围的8, 2.)选择最大的返回值, 3)转到那一点, 4.)重复 我引用一个单元格,所以我使用{I

我有一个2x1列向量的矩阵[35行x 39列],表示有序对。我还有一个函数,它创建一个9点模具并计算这些点,然后返回9个值并选择最大的一个。然后,它将创建另一个以最大返回值所在位置为中心的9点模具,并继续执行,直到函数在矩阵中的全局最大值处终止

我的问题是,如何通过忽略已评估的点来提高模具的效率?我不想每次评估9分,因为这将花费更长的时间,我正在努力使这个过程尽可能快

过程: 1.)评估一个点及其周围的8, 2.)选择最大的返回值, 3)转到那一点, 4.)重复

我引用一个单元格,所以我使用{I,j}索引


以下是我的代码:

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);