• 大小: 16KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签: 12  

资源简介

代码是通过设定不同的参数来进行求解混合流水车间的调度问题

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
ofstream outfile;
#define machinenumber 6  //机器的总数(等于每道工序的并行机个数×工序数)
#define parallel 2       //每道工序的并行机个数
#define ordernumber 3     //工序数
#define workpiecesnumber 6  //工件总数
#define populationnumber 200  //每一代种群的个体数

double crossoverrate=0.6;            //交叉概率
double mutationrate=0.05;             //变异概率
int G=100;                        //循环代数100
int usetime[workpiecesnumber][ordernumber];  //第几个工件第几道工序的加工用时;
int machinetime[ordernumber][parallel]= {0}; //第几道工序的第几台并行机器的统计时间;
int starttime[workpiecesnumber][ordernumber][parallel];//第几个工件第几道工序在第几台并行机上开始加工的时间;
int finishtime [workpiecesnumber][ordernumber][parallel];//第几个工件第几道工序在第几台并行机上完成加工的时间;
int ttime[populationnumber];      //个体的makespan;                                                    ???????????????????????
int a [populationnumber][workpiecesnumber];//第几代的染色体顺序,即工件加工顺序;
int times[100];  //用来存储已知用时的数组;
int makespan;    //总的流程加工时间;
int flg7;   //暂时存储流程加工时间;
double fits[populationnumber] ;//存储每一代种群每一个个体的适应度,便于进行选择操作;
                                                                                       //????????????????
int initialization()   //初始化种群;
{
    for(int i=0; i        for(int j=0; j        {
            a[i][j]=j+1;
        }
        
    for(int i=0; i        for(int j=0; j        {
            int flg1=rand()%workpiecesnumber;
            int flg2=rand()%workpiecesnumber;
            int flg3=a[i][flg1];
            a[i][flg1]=a[i][flg2];
            a[i][flg2]=flg3;
        }
        
    for(int i=0; i    {
        for(int j=0; j        {
            cout<        }
        cout<    }
    return 0;
}

int fitness(int c)   //计算适应度函数,c代表某个体;
{
    int totaltime;      //总的加工流程时间(makespan);
    int temp1[workpiecesnumber]= {0};
    int temp2[workpiecesnumber]= {0};
    int temp3[workpiecesnumber]= {0};

    for(int j=0; j    {
        temp1[j]=a[c][j];
    }

    for(int i=0; i    {
        for(int j=0; j        {
            int m=machinetime[i][0];        //先记录第i道工序的第一台并行机器的当前工作时间;
            int n=0;
            for (int p=0; p            {
                if (m>machinetime[i][p])
                {
                    m=machinetime[i][p];
                    n=p;
                }
            }
            int q=temp1[j];                 //按顺序提取temp1中的工件号,对工件进行加工;
            starttime[q-1][i][n]=max(machinetime[i][n]temp3[j]);  //开

评论

共有 条评论