设为首页收藏本站

 找回密码
 注册
查看: 1213|回复: 2
打印 上一主题 下一主题

旗舰版CrossOver,CrossUnder的严重bug [复制链接]

Rank: 2

精华
0
UID
258595
积分
56
帖子
30
主题
14
阅读权限
30
注册时间
2017-11-1
最后登录
2019-8-15
跳转到指定楼层
1#
发表于 2019-3-7 14:30:57 |只看该作者 |倒序浏览
本帖最后由 gzfun2 于 2019-3-7 14:55 编辑

公式1:
b1= A1 && CrossOver(a[1],b[1]) && C1;

公式2:
t=CrossOver(a[1],b[1]);
b1=A1 && t && C1;
以上两个等式,是等价的, 但是在测试中偶然发现, 公式1,有时在CrossOver(a[1],b[1])不成立的时候,公式1的b1=true; 同样的情况下,换成公式2就没问题,b1=false;
另外如果使用自己实现的CrossOver,写在公式1中也没问题。 a[2]<b[2] && a[1]>b[1];
希望技术人员好好测试检查一下其中的问题。

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2019-3-7 15:32:48 |只看该作者
crossover是序列函数,其运算是需要序列值的,所以不可放在条件下进行运算。
在A && B && C 这类的判断式中,当A不满足时,就不会去判断B以及C了。
所以,在你的语句中,A1是否满足,就相当于一个限制crossover的条件 。

序列函数的运算,可以先声明一个中间变量,将crossover的运算赋值 给中间变量,再将此变量代入原语句中即可。
比如:AA = crossover(a[1],b[1]);  b1 = A[1] && AA && C1;

使用道具 举报

Rank: 2

精华
0
UID
258595
积分
56
帖子
30
主题
14
阅读权限
30
注册时间
2017-11-1
最后登录
2019-8-15
3#
发表于 2019-3-8 23:13:31 |只看该作者
本帖最后由 gzfun2 于 2019-3-8 23:17 编辑

如果只对序列变量进行判断,也需要中间变量吗? 例如判断 if( a[1]>0) 这样的。 这个坑有点大啊,很多地方都要改,程序不应这样设计啊,对用户来说很不方便。

使用道具 举报

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

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-8 18:58

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部