声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1716|回复: 4

[编程技巧] 遗传算法目标函数的问题

[复制链接]
发表于 2009-10-15 11:36 | 显示全部楼层 |阅读模式

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

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

x
我想用遗传算法工具箱选择最优的x取值,有八个x,目标函数如下
% a1--WBC a2--RBC a3--切口等级 a4--SAS评分 a5--出血量
% a6--抗菌药种数 a7--药物选用合理性 a8--剂量合理性
% r--right  w--wrong  ct--test class  cr--real class
function y=ga_disease(x)
cr=[1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 1]
a1=[1 2 2 2 2 3 2 2 2 2 2 2 2 3 2 2 2 2 1 3]
a2=[2 2 2 2 2 2 2 2 3 2 2 2 2 1 2 1 1 2 2 2]
a3=[2 2 2 4 2 4 4 4 1 1 2 1 3 3 2 2 2 2 1 4]
a4=[2 2 2 2 1 3 2 1 2 2 2 1 2 2 2 2 2 3 1 3]
a5=[2 1 2 1 1 1 1 1 1 2 2 1 1 1 2 2 2 2 1 3]
a6=[3 2 2 5 2 2 5 2 3 3 3 1 2 1 3 3 5 1 1 4]
a7=[0 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 1 0]
a8=[1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 1 1 0]
r=0
w=0
for i=1:20
    q=x(9)+a1(i)*x(1)+a2(i)*x(2)+a3(i)*x(3)+a4(i)*x(4)+a5(i)*x(5)+a6(i)*x(6)+a7(i)*x(7)+a8(i)*x(8)
    p=e^q/(1+e^q)
    if p>0.5
        ct(i)=1
        if cr(i)=1   %程序运行到这一行总显示出错
            r=r+1
        else w=w+1
        end
    else
        ct(i)=0
        if cr(i)=1
            w=w+1
        else r=r+1
        end
    end
end
    y=w/(r+w)      
如上面蓝色字体显示,程序运行到那一行总显示出错,但是我想把相应第i位的cr值拿来参考,也就是说我要的结果是:如果ct(测试到的分类)是1,并且cr(实际分类)也是1的话,那么就使r(正确分类个数)增加1。
请问如何解决这个问题?请各位大侠帮忙,谢谢!
回复
分享到:

使用道具 举报

发表于 2009-10-15 21:39 | 显示全部楼层
不懂遗传算法
help if下, 应为if cr(i)==1
还有请注意下, 求助完整格式:出错代码和出错提示
 楼主| 发表于 2009-10-16 10:19 | 显示全部楼层
呵呵,我试试用这个if格式,另外
谢谢提醒!出错代码是:
Error: File: C:\Program Files\MATLAB71\work\ga_disease.m Line: 21 Column: 17
The expression to the left of the equals sign is not a valid target for an assignment.
标记的那行即是21行,请各位指教!谢谢!
 楼主| 发表于 2009-10-16 10:26 | 显示全部楼层
哇!!太神了!可以运行了,哈哈!
补充提问一下,if cr(i)==1 其中的“==”不是表示恒等的意思么?那样不会导致cr的取值每次不变么?
谢谢!
发表于 2009-10-16 11:55 | 显示全部楼层
逻辑判断使用==, 设定变数值使用=:@)
please "doc eq" in cmd window
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-18 21:13 , Processed in 0.071360 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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