hi, i have a problem with ga function. the problem is: Caused by: Failure in initial user-supplied nonlinear constraint function evaluation.

1 ビュー (過去 30 日間)
ivana della pia
ivana della pia 2021 年 10 月 19 日
回答済み: Alan Weiss 2021 年 10 月 19 日
my function is:
function f = obj_fun2(x)
MTTR = [0.04166666 0.041666667 0.083333333 0.041666667 0.041666667 0.083333333 0.041666667];
tic
S = zeros(1,320);
for j=1:320
S(j) = max([MTTR(1)*x(1,j), MTTR(2)*x(2,j), MTTR(3)*x(3,j), MTTR(4)*x(4,j), MTTR(5)*x(5,j), MTTR(6)*x(6,j), MTTR(7)*x(7,j)]);
end
toc
f = -((320 - sum(S))/320);
end
my constraint is:
function [c, ceq] = nlc(x)
for j=1:320
c(1) = -sum(x(1,:)) +(320/43.65);
c(2) = -sum(x(2,:)) +(320/43.71);
c(3) = -sum(x(3,:)) +(320/47.78);
c(4) = -sum(x(4,:)) +(320/89.66);
c(5) = -sum(x(5,:)) +(320/68.70);
c(6) = -sum(x(6,:)) +(320/29.22);
c(7) = -sum(x(7,:)) +(320/73.88);
end
ceq = [];
end
my model is:
nvars= 1;
intcon= 1:nvars;
LB = zeros(1,nvars);
UB = ones(1,nvars);
options = optimoptions(@ga,'SelectionFcn',@selectiontournament, ...
'FitnessScalingFcn',@fitscalingprop);
[x , fval] = ga(@obj_fun2 , nvars ,[],[],[],[], LB, UB , @nlc, intcon ) ;

採用された回答

Alan Weiss
Alan Weiss 2021 年 10 月 19 日
I believe that the error is here:
function [c, ceq] = nlc(x)
for j=1:320
c(1) = -sum(x(1,:)) +(320/43.65);
c(2) = -sum(x(2,:)) +(320/43.71);
% ...
end
end
You specify nvars= 1. However, your constraint function is trying to access x(2). Your x is a scalar. Error.
Alan Weiss
MATLAB mathematical toolbox documentation

その他の回答 (0 件)

タグ

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by