声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2650|回复: 12

[编程技巧] 请遗传算法的高手给看一下我的程序

[复制链接]
发表于 2006-12-28 14:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
想用遗传算法搜寻多项式的最优系数,一共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[sol,eval]=xunyoumin(sol,options)
numv=size(sol,2)-1;
eval=xunyou(x);
eval=-eval;
%用遗传算法求解
bounds=ones(8,1)*[-1 2];
[p,endPop,bestSols,trace]=ga(bounds,'xunyoumin');
%查看迭代过程
figure(1)
plot(endPop(:,1),endPop(:,2),'y*')
figure(2)
plot(trace(:,1),trace(:,2),'r-')
xlabel('Generation');
ylabel('Fittness');
legend('解的变化','种群平均值的变化');
回复
分享到:

使用道具 举报

发表于 2006-12-29 20:33 | 显示全部楼层
什么意思?
发表于 2006-12-29 20:49 | 显示全部楼层
不知道楼主还在不在?
 楼主| 发表于 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基本编程的问题。
发表于 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放一块,以为不可以呢... :)
 楼主| 发表于 2007-1-3 16:11 | 显示全部楼层
我是把两个function 文件放在一起,是可以的。如果我的函数作用域有问题,那么,为什么运行matlab辅助优化设计上的例子提示同样的错误呢?程序中的函数挺简单的,就是一个x,至于a、y是两列数组。帮忙修改一下,让程序运行起来,谢谢:loveliness:
发表于 2007-1-4 02:14 | 显示全部楼层
  1. 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 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 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[sol,eval]=xunyoumin(sol,options)
numv=size(sol,8)-1;
eval=xunyou(x);
eval=-eval;
发表于 2007-1-4 17:08 | 显示全部楼层
function表示不同子函数的开始,请问楼主,以下函数中的x从何而来?另外,建议不要使用eval作为返回值,这个在matlab中是自带的函数名。还有,你现在是xunyoumin函数调用xunyou函数,建议修改m文件名为前者

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

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

评分

1

查看全部评分

 楼主| 发表于 2007-1-5 08:29 | 显示全部楼层
问题解决了,非常感谢eight和happy的热心解答,谢谢心灯和格陵兰的关注,谢谢你们,thanks...
发表于 2007-10-8 21:14 | 显示全部楼层

学习一下

我想知道问题是怎么解决的,改哪拉!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 09:13 , Processed in 0.072761 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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