matlab多变量优化,matlab - 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
運行代碼后,我想我會得到想要的答案。
總結
以上是生活随笔為你收集整理的matlab多变量优化,matlab - Matlab使用fminsearch优化多变量 - 堆栈内存溢出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 自增模式 auto,mysq
- 下一篇: matlab人脸追踪,求大神帮助我这个菜