在matlab中使用GA中的for循环

时间:2014-11-04 07:36:29

标签: matlab

我在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次数内写acN值。

问题是,当我运行它时,它会给出一条消息

%Error using ga (line 342)
%Too many output arguments.


%Caused by:
%Failure in initial user-supplied nonlinear constraint function evaluation.

1 个答案:

答案 0 :(得分:0)

您需要在MATLAB中使用varargout这是可变输出参数。只需替换代码的输出参数,即您已定义ga函数的位置。它应该是varargout{}而不是数组。 Mathworks网站上有一个关于如何执行this的示例。

可能分别使用varargin和varargout更改输入和输出参数。好像你将需要它。

希望这有帮助!