这是针对时间表问题的GA。我正在尝试创建初始填充,但由于未输入if条件,因此无法正常工作。有人可以指出错误吗?

我尝试在每种情况下插入语句,但是一切都检查了。不过,我似乎没有找到解决方案。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
int random_number_creator(int upper, int lower)
{
    int n;
    n = rand() % (upper-lower)+ lower;
    return n;
}

struct pop{
    int subjects[6];
    int days[5][9];
}oldpop, bench;

main()
{
    int i,j,s=1,d,h,stop=1,cou=0;
    for(i=0;i<5;i++)
    {
         for(j=0;j<9;j++)
         if(j!=6)
            bench.days[i][j]=0;
         else
            bench.days[i][j]=11111;
    }

    for(i=0;i<6;i++)
    {
       if(i<4)
           oldpop.subjects[i]=3;
       else
           oldpop.subjects[i]=2;
    }
    for(i=0;i<5;i++)
    {
      printf("\n");
      for(j=0;j<9;j++)
        printf("    %d",bench.days[i][j]);
    }
    for(i=0;i<6;i++)
    {
        printf(" \n %d",oldpop.subjects[i]);
    }
    cou=0;
    for(i=0;i<6;i++)
    {
        cou=cou+ oldpop.subjects[i];
    }
    printf("\n%d\n",cou);
    do
    {
        s=random_number_creator(5,0);
        printf("\nsubject number:%d\n",s);
        printf("\nloop 1 entery %d",cou);
        do
        {
            printf("\nloop 2 entry\n");
            d=random_number_creator(5,0);h=random_number_creator(8,0);
            printf("\nDay Number:%d   \nHour Number:%d\n",d,h);
            if(bench.days[d][h]==0&&oldpop.subjects[s]!=0)
            {
                 printf("\nif condition reached\n");
                 oldpop.days[d][h]=10+s;
                 bench.days[d][h]=11111;
                 stop=0;
                 cou--;
                 oldpop.subjects[s]--;
            }

            else
            {
                printf("\nIf condition not satisified.\n");
                break;
            }
        }while(stop!=0);
    }while(cou!=0);

    for(i=0;i<5;i++)
    {
        printf("final entery \n");
        for(j=0;j<9;j++)
            printf("    %d",oldpop.days[i][j]);

    }
}


我希望针对此时间表问题初始化oldpop变量,但代码不会在do while循环中输入if条件。

最佳答案

程序中的问题来自主题选择(添加缺少的}之后):

s=random_number_creator(5,0);


将返回0到4之间的随机数。

要更正此问题,只需将以下行替换为

s=random_number_creator(7,0);


选择一个介于0和6之间的数字。因此cou变量将能够达到0



您的代码可以改进:

代替这种块:

for(i=0;i<5;i++)
{
    printf("final entery \n");
    for(j=0;j<9;j++)
        printf("    %d",oldpop.days[i][j]);

}


创建一个函数,学习使用printf

void print_table(struct pop pop, const char *label)
{
    int i, j;
    printf("\n%s\n", label);
    for (i=0;i<5;i++)
    {
        for (j=0;j<9;j++)
        {
            printf(" %5d",pop.days[i][j]);
        }
    }
}


并以这种方式使用

print_table(oldpop, "oldpop");

关于c - 我的遗传算法C代码无法正常运行,没有进入if条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56855232/

10-11 16:49