Matlab fminsearch在第一次迭代中陷入困境

时间:2012-04-28 12:00:51

标签: matlab mathematical-optimization

我正在使用fminsearch方法对模拟机器人的步行进行优化。我所做的是创建一个函数(目标函数),它将行走参数(fminsearch的输入)写入文本文件,打开模拟器(在webots中),将模拟结果写入文本文件并自行关闭然后,目标返回该文本文件中的值。总而言之 - 目标函数得到一个8x12的腿部位置矩阵,并返回一个标量,表明步行有多好。 这是有效的,位置值确实改变了每次迭代,并且确实改善了目标值。 但问题是 - 我想在每次迭代中遵循函数的值(最好是通过绘图),当我这样做时,我在第一次迭代时只得到函数的值,我无法理解为什么。

以下是代码:

options= optimset( 'PlotFcns', @optimplotfval);
[position,fval] = fminsearch(@callWebots,pos_start,options);

我也尝试显示结果并且出现了同样的问题(它只显示了第一次迭代):

options= optimset(options, 'Display', 'iter-detailed');

我甚至尝试编写一个输出函数,它将绘制fval并发生同样的问题。

如果您有任何想法,我将不胜感激......

先谢谢你

这是目标函数:

function [objFun]=callWebots(pos)  
%Open Motion File
filePath= fullfile('C:\Users\student\Documents\Webots\worlds', 'motion_trot_opt.motion');
data=convertToData(pos,filePath);
fout=fopen(filePath,'w');

%Write Motion File
for row=1:size(data,1)
    for col=1:size(data,2)
        if(col>1)
             fprintf(fout, ',');
        end
        fprintf(fout, '%s', data{row,col});
     end
     fprintf(fout,'\n');
end
fclose(fout);

system('C:\Users\student\Documents\Webots\worlds\robot_full_withGPSLighter.wbt');

% Get result and return to main function
resfilePath= fullfile('C:\Users\student\Documents\Webots\worlds', 'result.txt');
fres=fopen(resfilePath);
result = textscan(fres, '%f');
fclose(fres);
objFun=cell2mat(result);

对目标函数的调用:

function [position,fval]=optCall()
%Read Initial Motion File Into CELL
filePath= fullfile('C:\Users\student\Documents\Webots\worlds', 'motion_trot_opt.motion');
fin=fopen(filePath);

ii = 1;
while 1
    tline = fgetl(fin);
    if (tline == -1)
      break;
    end    
    SplitedRow(ii,:) = regexp(tline, ',', 'split');
    ii = ii+1;
end
fclose(fin);

%Convert from double to Data
[n,m] = size(SplitedRow);
pos_start = cellfun(@str2double,SplitedRow(2:end,3:end));

options= optimset( 'PlotFcns', @optimplotfval);
options= optimset(options, 'Display', 'iter-detailed');
[position,fval] = fminsearch(@callWebots,pos_start,options);

0 个答案:

没有答案