遗传算法中的matlab拟合函数(ga函数)不';不接受输出

遗传算法中的matlab拟合函数(ga函数)不';不接受输出,matlab,neural-network,Matlab,Neural Network,大家好,我是matlab新手,我对ga函数有一些问题 我必须找到一个网络的输入和输出延迟的最佳整数值,该网络应用于使用遗传算法的时间序列问题 我编写了一个拟合函数,使用2个变量作为输入和输出延迟,创建网络并返回性能值 我想要2个介于1和10之间的延迟,所以我像这样使用ga函数 [x,fval,exitflag,output,population,scores] = ga(@rendimentoRete, 2, [], [], [], [], [1 1], [10 10], [], [1 2])

大家好,我是matlab新手,我对ga函数有一些问题

我必须找到一个网络的输入和输出延迟的最佳整数值,该网络应用于使用遗传算法的时间序列问题

我编写了一个拟合函数,使用2个变量作为输入和输出延迟,创建网络并返回性能值

我想要2个介于1和10之间的延迟,所以我像这样使用ga函数

[x,fval,exitflag,output,population,scores] = ga(@rendimentoRete, 2, [], [], [], [], [1 1], [10 10], [], [1 2])
在调用“D:\Documents\MATLAB\rendimentoRete.m>rendimentoRete”时,我有一个错误“输出参数“out”(可能还有其他参数)。

这是我的拟合函数 (如果有人喜欢,这与pastebin上的语法高亮显示功能相同)

function out=rendimentoRete(iDelay,oDelay)
如果nargin<2
返回;
结束
%%健身中心的可变工作空间
%%我来这里是因为我独自一人
加载baseSet.mat;
inputSeries=TonData(第一个周期,假,假);
targetSeries=吨数据(首个美元,假,假);
%创建具有外部输入的非线性自回归网络
输入延迟=1:iDelay;
反馈延迟=1:oDelay;
hiddenLayerSize=8;
net=narxnet(输入延迟、反馈延迟、隐藏层化);
%为训练和模拟准备数据
%函数PREPARETS为特定网络准备时间序列数据,
%按填充输入状态和图层状态的最小量移动时间。
%使用PREPARETS允许您保持原始时间序列数据不变,而
%为具有不同延迟数的网络轻松定制它
%开环或闭环反馈模式。
[inputs,InputState,LayerState,targets]=准备集(net,inputSeries,{},targetSeries);
%培训、验证和测试数据的设置部门
净divideParam.trainRatio=70/100;
net.divideParam.valRatio=15/100;
net.divideParam.testRatio=15/100;
%培训网络
对于j=1:10
[net,tr]=列车(网络、输入、目标、输入状态、层状态);
结束
%测试网络
输出=净(输入、输入状态、层状态);
错误=gsubtract(目标、输出);
绩效=绩效(净、目标、产出);%alt->MSE
%prova1
out=性能;
%{
%prova2
%converto l'输出一个未经批准的许可证和许可证
%将输出单元格转换为数组
输出_阵列=cell2mat(输出);
%convertiamo输出阵列
对于k=1:(268输出延迟)
如果输出_数组(k)>0
输出_阵列(k)=1;
其他的
输出_阵列(k)=-1;
结束
结束
out=性能+calcoloMape(输出延迟,第一个美元,输出阵列)+calcoloPgcp(输出延迟,第一个美元,输出阵列);
%}
结束
对于baseSet.mat的负载,我正在加载first_period和first_usd,因为它们总是相同的

我不知道该怎么做,因为当我单独使用这个函数时会得到很好的结果。
有人可以解释我的错误。

根据MATLAB的文档,适应度函数的签名描述为

…应接受长度为nVAR的行向量并返回标量值

这意味着您的函数签名必须从带有两个输入变量的签名更改为

function out = rendimentoRete(iDelay, oDelay)
只包含一个输入变量的签名,如

function out = rendimentoRete(inputVars)
其中,
inputVars
是一个向量,您可以通过该向量获得以下两个变量:

iDelay = inputVars(1);
oDelay = inputVars(2);

将您的函数签名和前两行修改为上述内容(您可以删除
边距
复选框),尝试一下,看看会发生什么

在这一刻,我的第一个念头就是把头撞在桌子上。非常感谢杰夫
iDelay = inputVars(1);
oDelay = inputVars(2);