智能生产调度系统代码
#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 ;
}
数据保存文件自己创建 代码只是提示 写的很垃圾 效果也不是很好
智能生产调度系统代码相关推荐
- 使用TensorFlow搭建智能开发系统,自动生成App UI代码
本文转自微信号EAWorld.扫描下方二维码,关注成功后,回复"普元方法+",将会获得热门课堂免费学习机会! 本文目录: 一.我们的现状与期望 二.我们的初级探索及建议 三.智能开 ...
- 如何利用AI(ChatGPT、NewBing、PHIND、YouChat)实现多智能体系统一致性仿真的代码编写
多智能体系统(Multi-Agent System,MAS)已成为人工智能.机器人.自动化等领域的研究热点之一.在MAS中,实现智能体之间的一致性是一个重要问题.为了研究这个问题,如今爆火的AI软件被 ...
- 吴裕雄 人工智能 java、javascript、HTML5、python、oracle ——智能医疗系统WEB端初诊代码简洁版实现...
<!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...
- 第5章 - 二阶多智能体系统的协同控制 --> 连续时间含时延系统一致性【程序代码】
第5章 - 二阶多智能体系统的协同控制 --> 连续时间含时延系统一致性 回到目录 第5章 - 二阶多智能体系统的协同控制 --> 领航跟随系统一致性 文章目录 τ = 0 \tau=0 ...
- 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统编队控制【程序代码】
第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统编队控制 回到目录 第6章 - 多无人车系统的协同控制 --> 无人车运动原理 文章目录 % 多智能体系统一致性的控制基础及其应 ...
- 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统一致性【程序代码】
第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统一致性 回到目录 第5章 - 二阶多智能体系统的协同控制 --> 离散时间系统一致性 文章目录 动态一致性 静态一致性 动态一致 ...
- python医疗系统设计_吴裕雄 python 人工智能——智能医疗系统后台用户复诊模块简约版代码展示...
#复诊 importsysimportosimporttimeimportoperatorimportcx_Oracleimportnumpy as npimportpandas as pdimpor ...
- 2023最新智慧停车场小程序源码/智能停车系统源码+代码全开源
正文: 智慧停车场微信小程序源码,智能停车系统源码,全开源 技术架构: 后端开发语言java,框架oauth2+springboot2+doubble2.7.3,数据库mysql/mongodb/re ...
- 基于 Python 和 OpenCV 构建智能停车系统
作者 | 努比 来源 | 小白学视觉 当今时代最令人头疼的事情就是找不到停车位,尤其是找20分钟还没有找到停车位. 根据复杂性和效率的不同,任何问题都具有一个或多个解决方案.目前智能停车系统的解决方案 ...
最新文章
- PCL中PFH、FPFH理论
- 江苏关于领取软考2021年上半年合格证书的通知
- Android 省份城市搜索,android - 非常不错的 城市省份的选择组件: citypicker
- IMA文件如何打开,winimage使用方
- java 深入了解DTO及如何使用DTO
- linux wifi ip,Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址
- Linux查看lvm元数据,LVM元数据服务lvmetad分析
- DRBD+keepalived+LAMP+discuz
- MySQL数据库搜题_智慧树_MySQL数据库设计与应用_搜题公众号
- springboot项目识别不了pom.xml文件_Spring Boot Web 项目教程,Spring Boot的环境配置
- 栈实现 —— 二进制转换为十进制
- modelform 对象和model之间的关系
- python剪切文件到另外路径_python剪切文件
- 计算机专业考研可关注哪些公众号,考研应关注哪些公众号?
- 在 Excel 中对多行多列进行条件求和
- 深度学习数据增强(data_augmentation):Keras ImageDataGenerator
- kafka消费模型,分区,偏移量等
- MFC生成错误msado15.tlh(3991):fatal error C1003: 错误计数超过100;正在停止编译
- 谷歌索引量查询,批量查询网站在谷歌RR权重值
- linux 内核 f2fs,f2fs系列之一:实战f2fs 下载、编译和挂载