Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-01, 22:40   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 Matlab使用fminsearch优化多变量

我正在使用Matlab fminsearch来最小化带有两个变量的方程sum((interval-5).^2, 2)*factor间隔是一个包含5个值的向量。只能从1到30的步长为1的顺序选择它们。因子是0.1到0.9的值。

代码如下。我认为区间值是正确的,但因子值是错误的。

间隔值:[3 4 5 6 7]因子值:0.6最终输出:6

我认为因子值应为0.1,最终输出应为1作为全局最小值。

%% initialization of problem parameters minval = 1; maxval = 30; step = 1; count = 5; minFactor = 0.1; maxFactor = 0.9; %% the objective function fun = @(interval, factor) sum((interval-5).^2, 2)*factor; %% a function that generates an interval from its initial value getinterval = @(start) floor(start) + (0:(count-1)) * step; getfactor =@(start2) floor(start2 * 10)/10; %% a modified objective function that handles constraints objective = @(start, start2) f(start, fun, getinterval, minval, maxval, getfactor, minFactor, maxFactor); %% finding the interval that minimizes the objective function start = [(minval+maxval)/2 (minFactor+maxFactor)/2]; y = fminsearch(objective, start); bestvals = getinterval(y(1)); bestfactor = getfactor(y(2)); eval = fun(bestvals,bestfactor); disp(bestvals) disp(bestfactor) disp(eval) 该代码使用以下函数f 。

function y = f(start, fun, getinterval, minval, maxval, getfactor, minFactor, maxFactor) interval = getinterval(start(1)); factor = getfactor(start(2)); if (min(interval) < minval) || (max(interval) > maxval) || (factormaxFactor) y = Inf; else y = fun(interval, factor); end end 我按照亚当的建议尝试了GA函数。考虑到我的变量来自不同的范围和步骤,我将其更改为两个不同的集合。这是我的零钱。

step1 = 1; set1 = 1:step1:30; step2 = 0.1; set2 = 0.1:step2:0.9; % upper bound depends on how many integer used for mapping ub = zeros(1, nvar); ub(1) = length(set1); ub(2) = length(set2); 然后,我改变了目标函数

% objective function function y = f(x,set1, set2) % mapping xmap1 = set1(x(1)); xmap2 = set2(x(2)); y = (40 - xmap1)^xmap2; end 运行代码后,我想我会得到想要的答案。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:02


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.