我在Matlab中使用GA来解决优化问题, 我的目标函数是使用变量v
来最小化成本function b = cost (v)
load ('data.mat');
c1=0;
for i = 1:N
for j=1:1
c1 = c1 + c(i,j)*v(i,j);
end
end
b=c1;
我的约束是const
function [z] = const(v)
load ('data1.mat');
Z1=1;
for i=1:N
for j=1:1
a(i,j) = (1-v(i,j))*t(i,j);
Z(i,j) = ((a(i,j)+T1)/y(i,j))/(a(i,j)/y(i,j));
end
Z1 = Z1 * Z(i,j);
end
z=[0.7-Z1];
zeq=[];
用于GA的代码
lb=zeros(N,1);
ub=ones(N,1);
IntCon = u;
options = gaoptimset('PlotFcns',{@gaplotbestf,@gaplotmaxconstr},'Display','iter');
[v, fval] = ga(@cost,N,[],[],[],[],lb,ub,@const,IntCon,options);
其中u=[1 2 3 4...N]
我已经在data1.mat文件中保存了所需的数据。
我想使目标函数和约束都是广义的,
否则我必须在R
次数内写a
,c
和N
值。
问题是,当我运行它时,它会给出一条消息
%Error using ga (line 342)
%Too many output arguments.
%Caused by:
%Failure in initial user-supplied nonlinear constraint function evaluation.
答案 0 :(得分:0)
您需要在MATLAB中使用varargout
这是可变输出参数。只需替换代码的输出参数,即您已定义ga
函数的位置。它应该是varargout{}
而不是数组。 Mathworks网站上有一个关于如何执行this的示例。
可能分别使用varargin和varargout更改输入和输出参数。好像你将需要它。
希望这有帮助!