資源簡介
代碼是通過設(shè)定不同的參數(shù)來進行求解混合流水車間的調(diào)度問題
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
ofstream?outfile;
#define?machinenumber?6??//機器的總數(shù)(等于每道工序的并行機個數(shù)×工序數(shù))
#define?parallel?2???????//每道工序的并行機個數(shù)
#define?ordernumber?3?????//工序數(shù)
#define?workpiecesnumber?6??//工件總數(shù)
#define?populationnumber?200??//每一代種群的個體數(shù)
double?crossoverrate=0.6;????????????//交叉概率
double?mutationrate=0.05;?????????????//變異概率
int?G=100;????????????????????????//循環(huán)代數(shù)100
int?usetime[workpiecesnumber][ordernumber];??//第幾個工件第幾道工序的加工用時;
int?machinetime[ordernumber][parallel]=?{0};?//第幾道工序的第幾臺并行機器的統(tǒng)計時間;
int?starttime[workpiecesnumber][ordernumber][parallel];//第幾個工件第幾道工序在第幾臺并行機上開始加工的時間;
int?finishtime?[workpiecesnumber][ordernumber][parallel];//第幾個工件第幾道工序在第幾臺并行機上完成加工的時間;
int?ttime[populationnumber];??????//個體的makespan;???????????????????????????????????????????????????????????????????????????
int?a?[populationnumber][workpiecesnumber];//第幾代的染色體順序,即工件加工順序;
int?times[100];??//用來存儲已知用時的數(shù)組;
int?makespan;????//總的流程加工時間;
int?flg7;???//暫時存儲流程加工時間;
double?fits[populationnumber]?;//存儲每一代種群每一個個體的適應(yīng)度,便于進行選擇操作;
???????????????????????????????????????????????????????????????????????????????????????//????????????????
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)???//計算適應(yīng)度函數(shù),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道工序的第一臺并行機器的當(dāng)前工作時間;
????????????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]);??//開
評論
共有 條評論