找回密码
 注册
Simdroid-非首页
查看: 164|回复: 12

Matlab7.1 ga总是出错??

[复制链接]
发表于 2009-5-16 13:19:55 | 显示全部楼层 |阅读模式 来自 河北石家庄
本帖最后由 kokyo52 于 2009-5-16 19:19 编辑


最近开始学习遗传算法  按照书上的例子写程序 总是出现以下问题
Number of variables (NVARS) must be a positive integer.
Input argument "sol" is undefined.
请问这是怎么回事啊 (我的是matlab7.1)谢谢了
发表于 2009-5-16 13:42:46 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
代码是什么呀?
回复 不支持

使用道具 举报

发表于 2009-5-16 14:40:56 | 显示全部楼层 来自 陕西西安
matlab 7 自带的ga么?
第二个输入是变量个数,需要定义成整数,楼主看看是不是这个地方写错了

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-16 16:06:10 | 显示全部楼层 来自 河北石家庄
是自带的ga!!
function[sol,eval]=fit(sol,options)
x1=sol(1);
x2=sol(2);
r1=0.1;
r2=0.8;
g1=x1-2*x2+1;
g2=x1.^2/4-x2.^2+1;
if(g1>=0)&(g2>=0)
    eval=(x1-2).^2+(x2-1).^2;
else
    eval=(x1-2).^2+(x2-1).^2+r1*g1+r2*g2;
   end
eval=-eval;
  
bounds=ones(2,1)*[-1,1];
initPop=initializega(100,bounds,'fit');
[p endpop bestSols trace]=ga(bounds,'Min');
p
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b*');
xlable('Generation');ylable('Fitness');
Legend('解的变化','种群平均值的变化');

运行出来
??? Input argument "sol" is undefined.
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-18 12:12:37 | 显示全部楼层 来自 河北石家庄
人呢
隐居了啊
回复 不支持

使用道具 举报

发表于 2009-5-18 13:18:22 | 显示全部楼层 来自 浙江杭州
4# hgh7735

你这个不是matlab自带的工具箱,是GAOT工具箱。

你的ga命令参数写的不对。

具体可以参考http://forum.simwe.com/thread-135453-1-2.html,写得很详细。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-18 16:06:17 | 显示全部楼层 来自 河北石家庄
好的
谢谢
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-18 22:31:06 | 显示全部楼层 来自 河北石家庄
6# messenger
我按你介绍的资料上面的例子写上去还是出现了上述问题
我用的是7.1里面的遗传算法工具箱。请问会是什么原因呢?
工具箱函数必须放在工作目录下。这句话是指我把工具箱函数所在的文件夹设为当前工作目录文件夹就行吗?谢谢大侠
回复 不支持

使用道具 举报

发表于 2009-5-18 23:19:42 | 显示全部楼层 来自 浙江杭州
本帖最后由 messenger 于 2009-5-18 23:22 编辑

我终於搞明白,你的这个”Input argument "sol" is undefined.“的原因了。

你肯定是把函数文件直接运行了。没想到搞ga这么高深的问题会犯这样的错误。

凡是function函数都要分别以各自的函数名保存为.m文件。

至於你把工具箱所在的文件夹设为当前工作目录,应该没问题。而且,有问题也不是这种错误提示,会提示initializega不是一个函数。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-19 12:58:31 | 显示全部楼层 来自 河北石家庄
9# messenger
没有直接在编辑器里调试,都是在工具箱里调用的。
function[sol,eval]=fitness(sol,options) 就是以fitness.m保存应该没错吧!但还是一样啊
另外  提示initializega不是一个函数 也的确出现过。该怎么解决啊
回复 不支持

使用道具 举报

发表于 2009-5-19 13:42:15 | 显示全部楼层 来自 浙江杭州
10# hgh7735

你在4#里贴的代码没有任何一处调用fitness函数,你保存fitness.m也没用呀。

另外,4#里目标函数的名称是fit,但在ga函数中调用的却是Min。

觉得你还是matlab基础知识没学好,找本基本的matlab书好好看一下吧。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-5-19 15:27:10 | 显示全部楼层 来自 河北石家庄
11# messenger
我就那样举例保存函数
4# 那个程序是我从论文中看到的就直接拿过来用,谁知道有问题啊 !谢谢大虾提醒啊
另外你还没告诉我  提示initializega不是一个函数 这该怎么解决啊
回复 不支持

使用道具 举报

发表于 2009-5-19 15:49:25 | 显示全部楼层 来自 浙江杭州
12# hgh7735

如果你把工具箱放到工作目录下,应该没有问题呀,不会出initializega不是一个函数的提示。

如果真的还出这个提示,用addpath命令将initializega.m所在位置加入matlab搜索路径即可,这是matlab很基础的操作。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-28 07:20 , Processed in 0.047320 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表