Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用遗传算法策略实现DFA对二进制字符串进行分类的建议_Java_Dfa_Evolutionary Algorithm - Fatal编程技术网

Java 使用遗传算法策略实现DFA对二进制字符串进行分类的建议

Java 使用遗传算法策略实现DFA对二进制字符串进行分类的建议,java,dfa,evolutionary-algorithm,Java,Dfa,Evolutionary Algorithm,我正在尝试解决此问题(),其中包括对此类原始文件数据进行分类: 5000 2 0 9 1 1 0 1 0 0 1 1 0 1 15 1 1 1 1 0 1 0 1 1 1 0 0 0 1 0 0 15 1 1 0 1 1 0 1 0 0 0 1 1 1 0 1 1 15 1 0 0 1 1 1 1 1 1 0 0 0 1 1 0 0 15 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 0 13 1 1 0 0 1 0 0 0 0 1 1 1 0 1 15 1 0 0 0 1 0 1

我正在尝试解决此问题(),其中包括对此类原始文件数据进行分类:

5000 2
0 9 1 1 0 1 0 0 1 1 0
1 15 1 1 1 1 0 1 0 1 1 1 0 0 0 1 0
0 15 1 1 0 1 1 0 1 0 0 0 1 1 1 0 1
1 15 1 0 0 1 1 1 1 1 1 0 0 0 1 1 0
0 15 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1
0 13 1 1 0 0 1 0 0 0 0 1 1 1 0
1 15 1 0 0 0 1 0 1 1 0 1 0 0 0 1 0
1 15 1 1 1 0 0 1 0 0 1 1 0 1 0 1 1
0 15 0 0 0 0 0 1 0 0 1 1 1 0 0 1 1
0 15 1 0 0 0 0 1 1 1 0 1 0 0 1 0 0
0 15 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1
1 15 1 0 0 1 1 1 0 1 0 0 0 1 1 1 1
0 15 1 0 1 1 1 1 0 0 1 0 0 1 0 0 1
0 15 0 1 0 0 0 1 1 0 1 1 1 0 0 1 0
0 14 1 1 0 1 0 1 1 0 0 1 1 1 1 0 
其中,第一行是文件的行长度,下一行是文件中的标签数。第一列是正确的标签,第二列是长度,最后一列是要分类的二进制字符串(0或1)。要做到这一点,我们的想法是生成一个确定性有限自动机(DFA),但实现表明状态的数量是预先确定的。对于该数据,状态为10、20、30和50。此外,我需要包括一个进化算法策略,但我不明白如何确定适应度函数或在自动机上应用不同的运算符。我正试图实现这一点,以便用Java对该文件进行分类:

/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包装DFA;
导入java.util.Scanner;
/**
*
*@作者克里斯蒂安
*/
公共类DFACristian{
受保护的最终int状态3=3;
受保护的最终int状态2=2;
受保护的最终int状态1=1;
受保护的最终整数状态0=0;
受保护的最终int死区状态=-1;
受保护的int currentState=0;
公共无效更新(字符串边缘){
如果(currentState==state3&&edge.equals(“c”)){
当前状态=状态3;
}else if(currentState==state2&&edge.equals(“b”)){
当前状态=状态2;
}else if(currentState==state2&&edge.equals(“c”)){
当前状态=状态3;
}else if(currentState==state1&&edge.equals(“a”)){
currentState=state1;
}else if(currentState==state1&&edge.equals(“b”)){
当前状态=状态2;
}else if(currentState==state1&&edge.equals(“c”)){
当前状态=状态3;
}else if(currentState==state0&&edge.equals(“a”)){
currentState=state1;
}否则{
currentState=deadState;
}
}
公共布尔匹配(){
如果((currentState==state3 | | currentState==state2 | | currentState==state1)){
返回true;
}否则{
返回false;
}
}
公共静态void main(字符串[]args){
教程自动机=新教程();
char nextInt;
System.out.print(“输入字符串:”);
扫描仪=新的扫描仪(System.in);
字符串输入=scanner.nextLine();
对于(int i=0;i}
否。手动实现DFA的方法是在循环中切换。打开当前状态,然后在每种情况下根据下一个输入更改当前状态。在最终状态下,完全中断循环,或者直接返回