gpt4 book ai didi

performance - 如果由于某种原因必须停止迭代,将结果保存在 Matlab 中的有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:43 25 4
gpt4 key购买 nike

我试图通过运行迭代来最小化我的目标函数,这可能需要很长时间(可能是一天或更长时间)。如果由于某种原因我必须停止程序或它被挂起,那么保存迭代结果的有效方法是什么,这些迭代结果可能已经运行到程序由于某种原因停止时。

我要保存的变量是: best_obj_funk_to_perturb_annealing_best

注意:我将我的best_obj_fun存储在矩阵中,我只想要k_to_perturb_annealing_best的最后一次迭代时的值。 p>

当程序以某种方式停止时(例如 CTRL+C),请参阅以下代码中我希望拥有的变量的最后一个循环:

%% Running iterations to find minimum objective function value

accept_iter=1;
for iter=1:100
%# Choosing 'nRandomPoints' random points on the grid to sample from 'fixed_underlying_distribution'
nRandomPoints=100;
random_grid_points=randi(sqrt(nCell),[nRandomPoints,2]); %# two columns with x and y coord resp.
repeated_set_of_coord=ismember(random_grid_points,fixed_grid_coordinates,'rows'); %# find repeated sets of coordinates

while any(repeated_set_of_coord)
random_grid_points(repeated_set_of_coord,:)=randi(sqrt(nCell),[sum(repeated_set_of_coord),2]); %# create new set of coordinates
repeated_set_of_coord(repeated_set_of_coord)=ismember(random_grid_points(...
repeated_set_of_coord,:),fixed_grid_coordinates,'rows'); %# check the new coordinates
end
linear_index_for_perturbation=sub2ind([sqrt(nCell),sqrt(nCell)],random_grid_points(:,1),...
random_grid_points(:,2)); %# get a linear index into matrix to be perturbed
k_to_perturb_annealing_initial=k_sisim_for_annealing;

k_to_perturb_annealing_initial(linear_index_for_perturbation)=emprand(k_20_sampledata_sisim,nRandomPoints,1);

%# computing the value of objective function for perturbed perm values
[new_obj_fun,new_k_geomean]=obj_fun_for_gibbs_sampling(k_to_perturb_annealing_initial,x_200x200_gslib_format_vector...
,y_200x200_gslib_format_vector,gamma_k_underlying,mean_gamma_k_underlying,k_eff_WT);

if new_obj_fun < best_obj_fun(accept_iter)
best_obj_fun(accept_iter+1)=new_obj_fun;
k_to_perturb_annealing_best=k_to_perturb_annealing_initial;
best_k_geomean=new_k_geomean;
accept_iter=accept_iter+1;
end
end

最佳答案

您可以尝试在循环内使用 save-append 选项。

假设您在循环开始之前已经初始化了您的变量,您可以在循环开始之前创建一个文件,并在每次更新它。这是一个例子。

A=zeros(...);%# this is an example of your variables that are initialized before the loop
save('filename','A');%# this creates a .mat file with the initialized variables

%#begin loop
for i=...
...
... %# some computations here

save('filename','A','-append') %# this just replaces the variables in the .mat file with their current values
end
%# end loop

您必须将整个变量保存到文件中,也就是说,您不能这样做

save('filename','A(i)','-append')

您也可以每 n 次迭代而不是每次迭代都执行此操作。如果您正在处理非常大的数据集并且一次只更改一个元素,那么我建议您只在每 n 次迭代中执行一次,或者更好的做法是编写您自己的二进制文件。

关于performance - 如果由于某种原因必须停止迭代,将结果保存在 Matlab 中的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5888472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com