#include<stdio.h>
#include<time.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
#define A 9//工件数
#define B 9//机器数 
#define G 1000//初始种群个数
#define GEN 100//繁衍代数
int time1[B][A];
int c[G][A];//工件数组,初始种群
int select[2] ;//父代随机从初始种群选俩个父代
int fit1[G];//存种群适度值
int bestfit ;//最佳时间    
int pos[6];//随机点
int time2[GEN];//中间数组
int e[GEN][A];//中间数组
int m[A][A] ;
int    n[B][A] ;
void random()//随机初始种群
{
    for(int j = 0;j<G;j++)//初始化
    {
        for(int i=0;i<A;i++)
            {
                c[j][i]=i+1;
            }
    }
   for( j = 0;j<A;j++)
   {
        for(int i = 0;i<G;i++)
        {
            for(int k=0;k<A;k++)
            {
                int d=rand()%(A);         
                std::swap(c[i][k],c[i][d]);//交换    
            }
        }
    }
 /*  for( j = 0;j<G;j++)//测试
   {
       printf("初始种群");
       for( int i =0;i<A;i++)
       {
           printf("%d",c[j][i]);
       }
       printf("\n");
   }*/
}
/*交叉函数从种群中随机选择两个个体进行交叉,交叉后可能存在某些工件加工次数多余、
某些工件加工次数缺少的现象,在这种情况下,通过补缺操作确保每个工件的加工次数满足要
求。交叉函数的主要代码如下:*/
void hhh()
{
    for(int j = 0;j<2;j++)
    {
        select[j]=rand()%(G/2);
    }
}
void random1()
{
    for( int i =0;i<6;i++)
    {
        pos[i]= rand()%(A);
    }
    hhh();
    while(select[0] == select[1])
    {
        hhh();
    }
//    pos1 = 1;pos2 =2;
    /*printf("交叉点");
    for(  i =0;i<6;i++)
    {
        printf("%4d",pos[i]);
    }
    printf("\n");*/
/*    printf("选取点");
    for(int j = 0;j<2;j++)
    {
    printf("%4d",select[j]);
    }
    printf("\n");*/
}
void cross()//交叉函数
{
    /*printf("选取的俩个父代\n");
        for(int x = 0;x<A;x++)//测试
    {
        printf("%d",c[select[0]][x]);
    }
            printf("\n");
            for( x = 0;x<A;x++)//测试
    {
        printf("%d",c[select[1]][x]);
    }
                printf("\n");*/
    int tp=0;
    if(pos[0] > pos[1])//比较交叉点
    {
        tp=pos[0];
        pos[0]=pos[1];
        pos[1]=tp;
    }
    //printf("%d,%d\n",pos[0],pos[1]);
    for(int t=0, h=pos[0];t<pos[1]-pos[0]+1,h<pos[1]+1;t++,h++)//取出第一个父代的交叉片段
    {
        c[select[0]][t] = c[select[0]][h];
    }
    /*for(int o = 0;o<A;o++)//测试
    {
        printf("%d",c[select[0]][o]);
    }
    printf("\n");*/
    for(int v =0;v<pos[1]-pos[0]+1;v++)
        {
            for(t=0;t<A;t++)//让相等的部分变为0
            {
                if(c[select[0]][v] == c[select[1]][t])
                {
                    c[select[1]][t]=0;
                }
            }
        }
    /*for(int l=0;l<A;l++)//测试输出
    {
        printf("%d",c[select[1]][l]);
    }    printf("\n");*/
    int p = 0;//中间值
    for(int i = 0;i<A;i++)
    {
        for(v = 0;v<A-1;v++)///把0放后面
        {
            if(c[select[1]][v] == 0)
            {    
                p = c[select[1]][v];
            c[select[1]][v]=c[select[1]][v+1];
                c[select[1]][v+1] = p;
            }
        }
    }
    /*for(int m=0;m<A;m++)//测试输出
    {
        printf("%d",c[select[1]][m]);
    }
                printf("\n");*/
    int j =0;
    for( j=pos[1]-pos[0]+1,v=0;j<A,v<A-1-pos[1]+pos[0];v++,j++)//拼接
    {
        c[select[0]][j]=c[select[1]][v];
    }
    for(j=0,v=A-1-pos[1]+pos[0];j<pos[1]-pos[0]+1,v<A;v++,j++)
    {
        c[select[1]][v]=c[select[0]][j];
    }
    /*printf("交叉后的俩个子代\n");
    for(j=0;j<A;j++)       //测试输出
    {
        printf("%d",c[select[0]][j]);
        
    }    printf("\n");
    for(j=0;j<A;j++)
    {
        printf("%d",c[select[1]][j]);}
    printf("\n");*/
}
/*变异函数首先随机选择--个变异个体,然后选择个体的两个位置进行交叉,交叉完后判断
工件的工序是否符合要求,不符合要求则进行调整。变异操作主要代码如下:*/
void variation()

    int t =0;
    t = c[select[0]][pos[2]];
    c[select[0]][pos[2]] = c[select[0]][pos[3]];
    c[select[0]][pos[3]] = t;
    t = c[select[1]][pos[4]];
    c[select[1]][pos[4]] = c[select[1]][pos[5]];
    c[select[1]][pos[5]] = t;
/*    printf("变异后的俩个子代\n");
    for(int j=0;j<A;j++)       //测试输出
    {
        printf("%d",c[select[0]][j]);
        
    }    printf("\n");
    for(j=0;j<A;j++)
    {
        printf("%d",c[select[1]][j]);}
    printf("\n");*/
}
void fitness1(int w)//适度值 
{                
    time1[0][0] = n[0][c[w][0]-1];
    //printf("%d\n",time1[0][0]);
    for(int f =1;f < A ; f++)//给第一道工件赋加工完成时间
    {    
        time1[0][f] = n[0][c[w][f]-1]+time1[0][f-1]+m[c[w][f-1]-1][c[w][f]-1];
    //    printf("%d",n[f-1][e[0]-1]);//测试 没问题
    //    printf("第一道工件加工时间%d\n",time1[0][f]);
    }
    for(int i=1; i < B ; i++)//给每道的工件1赋完成时间
    {    
        time1[i][0] = n[i][c[w][0]-1]+time1[i-1][0];
    }
    /*for(i=0; i<B ; i++) //测试 没问题
    {    
        printf("每道的工件1赋完成时间%d\n",time1[i][0]);
    }*/
    int q = 0;
    //time1[1][1] = 0;printf("%d\n",time1[1][1]);
    for(int g=1;g<B;g++)//选择
    {    
        for(int j =1;j<A;j++)
        {
             q =time1[g][j-1]+ m[c[w][j-1]-1][c[w][j]-1];//工件加工时间+准备时间
        //    printf("前一件工件完成时间+准备时间%d\n",q);
            if( q > time1[g-1][j])
            {
                time1[g][j] = q + n[g][c[w][j]-1];//printf("wwww%dwwww",n[g][e[j]-1]);
            }
            else
            {
                time1[g][j] = time1[g-1][j] + n[g][c[w][j]-1];
            }
        }
    }        
}
void paixu()
{    
    int fit2[G];
    int j =0;
    for( j=0;j<G;j++)
    {
        fit2[j]=fit1[j];
        //printf("新种群适度值②%d\n",fit2[j]);
    }
    int th =0;
    for( j = 0;j<G-1;j++)//冒泡排序 升序
    {
        for( int i =0;i<G-j-1;i++)
        {
            if(fit2[i]>fit2[i+1])
            {
                th = fit2[i+1];
                fit2[i+1]= fit2[i];
                fit2[i] =th;
            }    
        }
    }
    /*for(j=0;j<G;j++)
    {
        printf("排序后适度值%d\n",fit2[j]);
    }printf("\n");*/
    for(j=0;j<G;j++)//给新种群排序 升序
    {
        for(int i=0;i<G;i++)
        {
            while(fit2[j] == fit1[i])
            {
                for(int k =0;k<A;k++)
                {
                    c[j][k] = c[i][k];    
                }
            break;
            }
        }
    }
}
void fitvariation()//新种群
{
    for(int i =10;i<G;i++)//选择出新种群
    {    
        random1();
        cross();
        int a = rand()%5;//printf("随机值a%d\n",a);
        if( a == 0)//变异概率 0.2
        {        
            variation();
        }
        for(int j=0;j<A;j++)
        {
        
            c[i][j] = c[select[0]][j];
            c[i+5][j] = c[select[1]][j];
        }
    }
    /*printf("新种群\n");
    for( i =0;i<G;i++) //测试新种群
    {
        for(int j=0;j<A;j++)
        {
            printf("%d",c[i][j]);
        }
        printf("\n");
    }*/
    for(int w =0;w<G;w++)
    {
        
        fitness1(w);
        fit1[w] = time1[B-1][A-1];    
        bestfit = fit1[0];
        //printf("新种群适度值%d\n",fit1[w]);
    }
    for( w=0;w<G;w++)
    {
        if(    bestfit>fit1[w])
        {
            bestfit = fit1[w];
        }
    }
    printf("新种群最佳时间%d\n",bestfit);
    for(int j = 0;j<G;j++)
    {
        while(fit1[j] == bestfit)
        {    
            printf("新种群最佳时间对应排序");
            for(int k =0;k<A;k++)
            {    
                printf("%d",c[j][k]);
            }
            printf("\n");
            break;
        }    
    }
    paixu();
    /*printf("测试新种群\n");
    for( i =0;i<G;i++) //测试新种群
    {
        for(int j=0;j<A;j++)
        {
            printf("%d",c[i][j]);
        }
        printf("\n");
    }*/
}
void select1()//选择最短时间
{
    int besttime=time2[0];
    for(int i=0;i<GEN-1;i++)//初始化
    {
        if( besttime > time2[i+1])
        {
            besttime=time2[i+1];
        }
    }
    printf("工件加工最短时间%d\n",besttime);
    printf("工件最短时间对应排序");
    for(int j = 0;j<GEN;j++)
    {
        while(time2[j] == besttime)
        {    
            for(int k =0;k<A;k++)
            {    
                printf("%d",e[j][k]);
            }
            FILE *fp1=fopen("shuju1.txt","w");  
            for(int i=0;i<A;i++)  
            fprintf(fp1,"%d ",e[j][i]);  
            fclose(fp1);
            printf("\n");break;
        }    
    }

}
int main()
{    
    int M,N;
    FILE* fp=fopen("shuju.txt","r"); //打开文件
    if(fp==NULL)
    {
        printf("无文件");
        return -1;
    }
    for(M=0;M<A;M++)
    {
        for(N=0;N<A;N++)
        {
            fscanf(fp,"%d",&m[M][N]);/*每次读取一个数,fscanf函数遇到空格或者换行结束*/
        }
        fscanf(fp,"\n");
    }
    for(M=0;M<B;M++)
    {
        for(N=0;N<A;N++)
        {
            fscanf(fp,"%d",&n[M][N]);/*每次读取一个数,fscanf函数遇到空格或者换行结束*/
        }
        fscanf(fp,"\n");
    }
    fclose(fp);
     srand((unsigned)time(NULL));
    random();
    for(int w =0;w<G;w++)
    {    
        fitness1(w);
        fit1[w] = time1[B-1][A-1];    
    //    printf("初始种群适度值%d\n",fit1[w]);
    }
    paixu();
    for(int i = 0;i<GEN;i++)
    {
            
        fitvariation();
        time2[i] = bestfit;
        for(int k=0;k<A;k++)
        {
            e[i][k] = c[0][k];
        }
    }
    /*for(i =0;i<GEN;i++)\\测试
    {
        printf("######%d\n",time2[i]);
    }printf("\n");*/
    select1();

return 0 ;
}
数据保存文件自己创建 代码只是提示 写的很垃圾 效果也不是很好

智能生产调度系统代码相关推荐

  1. 使用TensorFlow搭建智能开发系统,自动生成App UI代码

    本文转自微信号EAWorld.扫描下方二维码,关注成功后,回复"普元方法+",将会获得热门课堂免费学习机会! 本文目录: 一.我们的现状与期望 二.我们的初级探索及建议 三.智能开 ...

  2. 如何利用AI(ChatGPT、NewBing、PHIND、YouChat)实现多智能体系统一致性仿真的代码编写

    多智能体系统(Multi-Agent System,MAS)已成为人工智能.机器人.自动化等领域的研究热点之一.在MAS中,实现智能体之间的一致性是一个重要问题.为了研究这个问题,如今爆火的AI软件被 ...

  3. 吴裕雄 人工智能 java、javascript、HTML5、python、oracle ——智能医疗系统WEB端初诊代码简洁版实现...

    <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...

  4. 第5章 - 二阶多智能体系统的协同控制 --> 连续时间含时延系统一致性【程序代码】

    第5章 - 二阶多智能体系统的协同控制 --> 连续时间含时延系统一致性 回到目录 第5章 - 二阶多智能体系统的协同控制 --> 领航跟随系统一致性 文章目录 τ = 0 \tau=0 ...

  5. 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统编队控制【程序代码】

    第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统编队控制 回到目录 第6章 - 多无人车系统的协同控制 --> 无人车运动原理 文章目录 % 多智能体系统一致性的控制基础及其应 ...

  6. 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统一致性【程序代码】

    第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统一致性 回到目录 第5章 - 二阶多智能体系统的协同控制 --> 离散时间系统一致性 文章目录 动态一致性 静态一致性 动态一致 ...

  7. python医疗系统设计_吴裕雄 python 人工智能——智能医疗系统后台用户复诊模块简约版代码展示...

    #复诊 importsysimportosimporttimeimportoperatorimportcx_Oracleimportnumpy as npimportpandas as pdimpor ...

  8. 2023最新智慧停车场小程序源码/智能停车系统源码+代码全开源

    正文: 智慧停车场微信小程序源码,智能停车系统源码,全开源 技术架构: 后端开发语言java,框架oauth2+springboot2+doubble2.7.3,数据库mysql/mongodb/re ...

  9. 基于 Python 和 OpenCV 构建智能停车系统

    作者 | 努比 来源 | 小白学视觉 当今时代最令人头疼的事情就是找不到停车位,尤其是找20分钟还没有找到停车位. 根据复杂性和效率的不同,任何问题都具有一个或多个解决方案.目前智能停车系统的解决方案 ...

最新文章

  1. PCL中PFH、FPFH理论
  2. 江苏关于领取软考2021年上半年合格证书的通知
  3. Android 省份城市搜索,android - 非常不错的 城市省份的选择组件: citypicker
  4. IMA文件如何打开,winimage使用方
  5. java 深入了解DTO及如何使用DTO
  6. linux wifi ip,Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址
  7. Linux查看lvm元数据,LVM元数据服务lvmetad分析
  8. DRBD+keepalived+LAMP+discuz
  9. MySQL数据库搜题_智慧树_MySQL数据库设计与应用_搜题公众号
  10. springboot项目识别不了pom.xml文件_Spring Boot Web 项目教程,Spring Boot的环境配置
  11. 栈实现 —— 二进制转换为十进制
  12. modelform 对象和model之间的关系
  13. python剪切文件到另外路径_python剪切文件
  14. 计算机专业考研可关注哪些公众号,考研应关注哪些公众号?
  15. 在 Excel 中对多行多列进行条件求和
  16. 深度学习数据增强(data_augmentation):Keras ImageDataGenerator
  17. kafka消费模型,分区,偏移量等
  18. MFC生成错误msado15.tlh(3991):fatal error C1003: 错误计数超过100;正在停止编译
  19. 谷歌索引量查询,批量查询网站在谷歌RR权重值
  20. linux 内核 f2fs,f2fs系列之一:实战f2fs 下载、编译和挂载

热门文章

  1. rj45插座尺寸图_rj45接口尺寸、标准、电压、颜色介绍
  2. 关于引流脚本,你了解的引流脚本的优势有哪些?
  3. Gitlab下新建project并上传本地project整理
  4. 涂鸦智能通过聆讯:拟回归香港上市 腾讯是重要股东
  5. 认真对待每一道算法题 之 找明星问题 - 淘宇瀚
  6. 打印样式CSS的技巧和要点介绍
  7. 7.3 cas与流量风暴
  8. 苹果笔记本有uefi启动吗_联想和华硕笔记本重装系统时新BIOS无法设置u盘启动怎么办...
  9. 免费获得Java 7并发食谱
  10. 免费小程序制作平台体验感受分享