首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Fitness函数不起作用

Java Fitness函数不起作用
EN

Stack Overflow用户
提问于 2011-03-15 03:50:39
回答 3查看 853关注 0票数 0

我有一个适应度函数作为实验室的一部分,并希望将其应用于一组“权重”(ArrayList权重)。我已经创建了数组,并在其中存储了一些值。我已经创建了随机二进制字符串(它的末尾有一个'x‘,以便生成随机值),我希望也对其应用适应度函数;然而,我遇到的问题是适应度函数总是返回值0。我是不是漏掉了什么?

适应度函数如下:

代码语言:javascript
复制
public static double scalesFitness(ArrayList<Double> weights){  
    if (scasol.length() > weights.size()) return(-1);
    double lhs = 0.0,rhs = 0.0;

    double L = 0.0;
    double R = 0.0;

    for(int i = 0; i < scasol.length(); i++){
        if(scasol.charAt(i) == '0'){
        L = L += 0;
    }
    else if(scasol.charAt(i) == '1'){
        R = R += 1;
    }
    }//end for

    int n = scasol.length();

    return(L-R);

}

随机二进制串方法:

代码语言:javascript
复制
private static String RandomBinaryString(int n){
    String s = new String();

    for(int i = 0; i <= n; i++){
        int y = CS2004.UI(0,1);
            if(y == 0){
                System.out.print(s + '0');
            }
            else if(y == 1){
                System.out.print(s + '1');
            }
    }

    return(s);
}

Main方法(在单独的类中):

代码语言:javascript
复制
public static void main(String args[]){

    for(int i = 0; i < 10; i++){
        ScalesSolution s = new ScalesSolution("10101x");
        s.println();
    }

    ArrayList<Double> weights = new ArrayList<Double>();

        weights.add(1.0);
        weights.add(2.0);
        weights.add(3.0);
        weights.add(4.0);
        weights.add(10.0);
        System.out.println();

    System.out.print("Fitness: ");
    System.out.print(ScalesSolution.scalesFitness(weights));
}

一旦运行,随机二进制字符串就可以很好地工作,但适应度函数无法从0更改。以下是示例输出:

代码语言:javascript
复制
1101100
1100111
0001111
1001010
1110000
0011111
1100111
1011001
0000110
1000000

Fitness: 0.0

如果您希望为整个类编写代码,请让我知道。

非常感谢大家抽出时间。

米克。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-15 04:04:19

在我看来,你总是从RandomBinaryString()返回一个空字符串--你打印出一些数字,但实际上从来没有附加过它们。使用s = s+'0's += '0's.concat("0"),或者使用StringBuilder等。

我假设scasol是你的二进制字符串,所以它是空的,那么for循环中的任何东西都不会被调用一次,所以L和R都保持在0.0,你最终返回0.0。

票数 2
EN

Stack Overflow用户

发布于 2011-03-15 04:05:45

你的随机字符串RandomBinaryString只打印's‘,它不会改变它,所以函数的和等同于返回'new String()’。

另一个问题,'L =L += 0‘是多余的。它与L= 0相同。一直都是。

'R = R+=1‘也是多余的,它与R += 1相同。

票数 0
EN

Stack Overflow用户

发布于 2011-03-15 04:23:28

@ scasol构造函数的DHall代码:

代码语言:javascript
复制
public ScalesSolution(String s)
{
    boolean ok = true;
    int n = s.length();
    for(int i=0;i<n;++i)
    {
        char si = s.charAt(i);
        if (si != '0' && si != '1') ok = false;
    }
    if (ok)
    {
        scasol = s;
    }
    else
    {
        scasol = RandomBinaryString(n);
    }
}

如果这对我没有帮助,我可以上传这个类的代码。

谢谢。

米克。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5303665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档