handb 发表于 2006-12-28 14:26

请遗传算法的高手给看一下我的程序

想用遗传算法搜寻多项式的最优系数,一共8个,a与y是试验值
code:
%定义函数xunyou.m
function eval=xunyou(sol)
numv=size(sol,2);
x=sol(1:numv);
a=(-10)*[(-1)*0.2
-0.19
-0.181
-0.176
-0.161
-0.151
-0.142
-0.132
-0.122
-0.107
-0.093
-0.078
-0.063
-0.049
-0.039
-0.024
-0.01
0
0.01
0.024
0.039
0.054
0.068
0.078
0.088
0.098
0.112
0.122
0.142
0.151
0.161
0.171
0.176
0.186
0.195
0.2
0.21
0.215
0.22
0.225
0.225
0.225
0.225
0.225
0.225
0.225
0.22
0.22
0.215
0.21]';
y=[0.034
0.034
0.034
0.044
0.039
0.039
0.039
0.039
0.029
0.034
0.029
0.029
0.029
0.015
0.015
0.015
0.005
0.005
0.02
0.02
0.015
0.01
0.01
0.015
0.015
0.01
0.02
0.015
0
0
-0.005
-0.01
-0.01
-0.015
-0.02
-0.02
-0.024
-0.029
-0.02
-0.02
-0.024
-0.024
-0.024
-0.02
-0.015
-0.02
-0.015
-0.02
-0.029
-0.029]';
eval=sum(y-(x1*a+x2*a.^3+x3*(10.^x4/(2.25.^x5))*10*((2.25.^2-a.^2).^(x6*(10.^x7/2.25.^x8)).^(1/2)))).^2;
%定义适应度函数fitness
function=xunyoumin(sol,options)
numv=size(sol,2)-1;
eval=xunyou(x);
eval=-eval;
%用遗传算法求解
bounds=ones(8,1)*[-1 2];
=ga(bounds,'xunyoumin');
%查看迭代过程
figure(1)
plot(endPop(:,1),endPop(:,2),'y*')
figure(2)
plot(trace(:,1),trace(:,2),'r-')
xlabel('Generation');
ylabel('Fittness');
legend('解的变化','种群平均值的变化');

happy 发表于 2006-12-29 20:33

什么意思?

lxq 发表于 2006-12-29 20:49

不知道楼主还在不在?

handb 发表于 2006-12-31 09:15

用遗传算法写了个关于最小值问题的多项式系数寻优程序,运行后总出错,不知哪个地方不对.
提示如下:
??? Undefined function or variable 'x'.

Error in ==> E:\MATLAB6p5p1\work\xunyoumin.m
On line 3==> eval=xunyou(x);

Error in ==> E:\MATLAB6p5p1\toolbox\gaot\initializega.m
On line 41==>   eval(estr);

Error in ==> E:\MATLAB6p5p1\toolbox\gaot\ga.m
On line 148==>   startPop=initializega(80,bounds,evalFN,evalOps,opts(1:2));

心灯 发表于 2006-12-31 10:39

每个function是一个单独的文件,别弄错了....
这个不是遗传算法的问题,而是matlab基本编程的问题。

eight 发表于 2006-12-31 11:58

原帖由 心灯 于 2006-12-31 10:39 发表
每个function是一个单独的文件,别弄错了....
这个不是遗传算法的问题,而是matlab基本编程的问题。


每个function是一个单独的文件--这个倒不一定,可以n个function组成一个m文件

这个不是遗传算法的问题,而是matlab基本编程的问题--这个同意,准确说是基本编程问题,与matlab无关,楼主应补补“函数中的变量作用域”这一知识

心灯 发表于 2006-12-31 12:04

原帖由 eight 于 2006-12-31 11:58 发表

每个function是一个单独的文件--这个倒不一定,可以n个function组成一个m文件

这个不是遗传算法的问题,而是matlab基本编程的问题--这个同意,准确说是基本编程问题,与matlab无关,楼主应补补“函 ...

哦,我一般是每个function一个文件的,呵呵,方便被多个文件来调用... 没有尝试过n个function放一块,以为不可以呢... :)

handb 发表于 2007-1-3 16:11

我是把两个function 文件放在一起,是可以的。如果我的函数作用域有问题,那么,为什么运行matlab辅助优化设计上的例子提示同样的错误呢?程序中的函数挺简单的,就是一个x,至于a、y是两列数组。帮忙修改一下,让程序运行起来,谢谢:loveliness:

happy 发表于 2007-1-4 02:14

eval=sum(y-(x1*a+x2*a.^3+x3*(10.^x4/(2.25.^x5))*10*((2.25.^2-a.^2).^(x6*(10.^x7/2.25.^x8)).^(1/2)))).^2;在你前面的代码中根本没有出现过x1...x8这些变量,明显错误

这个程序都是些基本错误,建议搂主先学习一下matlab基础

[ 本帖最后由 ChaChing 于 2009-7-12 12:33 编辑 ]

handb 发表于 2007-1-4 17:03

谢谢大家的热心帮助,我这样改,为什么依然提示x没定义呢?
function eval=xunyou(sol)
numv=size(sol,8);
x=sol(1:numv);
xdata=(-10)*[(-1)*0.2
-0.19
-0.181
-0.176
-0.161
-0.151
-0.142
-0.132
-0.122
-0.107
-0.093
-0.078
-0.063
-0.049
-0.039
-0.024
-0.01
0
0.01
0.024
0.039
0.054
0.068
0.078
0.088
0.098
0.112
0.122
0.142
0.151
0.161
0.171
0.176
0.186
0.195
0.2
0.21
0.215
0.22
0.225
0.225
0.225
0.225
0.225
0.225
0.225
0.22
0.22
0.215
0.21]';
ydata=[0.034
0.034
0.034
0.044
0.039
0.039
0.039
0.039
0.029
0.034
0.029
0.029
0.029
0.015
0.015
0.015
0.005
0.005
0.02
0.02
0.015
0.01
0.01
0.015
0.015
0.01
0.02
0.015
0
0
-0.005
-0.01
-0.01
-0.015
-0.02
-0.02
-0.024
-0.029
-0.02
-0.02
-0.024
-0.024
-0.024
-0.02
-0.015
-0.02
-0.015
-0.02
-0.029
-0.029]';
eval=sum(ydata-(x(1)*xdata+x(2)*xdata.^3+x(3)*(10.^x(4)/(2.25.^x(5)))*10*((2.25.^2-xdata.^2).^(x(6)*(10.^x(7)/2.25.^x(8))).^(1/2)))).^2;


%定义适应度函数fitness
function=xunyoumin(sol,options)
numv=size(sol,8)-1;
eval=xunyou(x);
eval=-eval;

eight 发表于 2007-1-4 17:08

function表示不同子函数的开始,请问楼主,以下函数中的x从何而来?另外,建议不要使用eval作为返回值,这个在matlab中是自带的函数名。还有,你现在是xunyoumin函数调用xunyou函数,建议修改m文件名为前者

function=xunyoumin(sol,options)
numv=size(sol,8)-1;
eval=xunyou(x);
eval=-eval;

[ 本帖最后由 ChaChing 于 2009-7-12 12:32 编辑 ]

handb 发表于 2007-1-5 08:29

问题解决了,非常感谢eight和happy的热心解答,谢谢心灯和格陵兰的关注,谢谢你们,thanks...

甜点心 发表于 2007-10-8 21:14

学习一下

我想知道问题是怎么解决的,改哪拉!
页: [1]
查看完整版本: 请遗传算法的高手给看一下我的程序