📄 gantt.h
字号:
#ifndef Gantt_H
#define Gantt_H
#define NULL 0
#define HUGENUM 1.0E+20
#include "HistoryStruct.h"
/*-----------------------------------------------------*/
// //
// GanttUnit 结构 //
// 说明:甘特图的单元结构 //
// 作用:表示一个作业的某个工序的时间调度 //
// //
/*-----------------------------------------------------*/
struct GanttUnit
{
int start; //调度方案中该工序开始时刻
int end; //调度方案中该工序结束时刻
int job; //该工序所属作业号
int order; //该工序在作业中的工序号
int machine; //该工序所使用的机器号
};
/*----------------------------------------------------*/
// //
// GanttChart 类 //
// 说明:甘特图类 //
// 作用:生成绘制某调度方案的甘特图 //
// //
/*----------------------------------------------------*/
class GanttChart
{
public:
/*-------------------设置甘特图所对应的调度问题--------------------------*/
//各参数依次为:调度问题的作业数、机器数、机器分配、时间分配、调度结果矩阵
//注:机器分配、时间分配和调度结果矩阵可以在以后单独设置
GanttChart(int, int, int** = NULL, int** = NULL, double** = NULL);
~GanttChart();
//设置所对应调度问题的机器分配
void setMachine(int**);
//设置所对应调度问题的时间分配
void setProTime(int**);
//设置甘特图所对应的调度方案(此处调度方案用换位矩阵表示)
void setMatrix(double**);
/*-----------------------甘特图的生成与绘制------------------------*/
//将调度方案的换位矩阵转换成甘特图
bool constructGantt();
//输出调度结果矩阵
void drawNeroOutputs(GanttHis*);
//绘制甘特图
//参数为绘图句柄、在文档中的起始高度点、图像记录和文字记录(用于重画)
void drawGantt(GanttHis*, int = 0);
//返回甘特图结构
//GanttUnit** getGuantt();
//得到当前调度的最大时间成本
//若当前调度方案为非法,则返回-1
int getMaxTime();
//当前调度方案是否为合法调度
bool isValid();
int loopfail;
protected:
//生成甘特图辅助函数:处理在时间上依赖与某一个工序的所有工序
void findNextUnit(int, int);
//生成索引分别为作业数和机器数的表,元素值为所对应的工序号
void GetOrder();
//检查是否所有工序都被分配了机器时间
bool checkJobNum();
//检查在所生成的甘特图中,各工序的时间安排是否有重叠
bool checkJobTime();
//检查在所生成的工序-机器双搜索图中是否有环
bool dfscheck();
//递归检查在所生成的工序-机器双搜索图中是否有环
bool checkLoops(int, int);
//适当调整无效解,使其成为合法调度方案,从而提高调度成功率
void AdjustJobs();
//调度问题的描述参数
int n; //作业总数
int m; //机器总数
int** machine; //作业的机器分配(从1开始)
int** protime; //作业的加工时间分配
int** proorder; //各工序相对于作业和机器的分配
//甘特图的相关信息
double** matrix; //调度方案的换位矩阵
int **machorder; //调度方案中各工序在某一机器上的次序号(作业数×工序数)
GanttUnit** ganttPic; //甘特图结构
int *machstep; //当前已分配在某机器上完成的工序数
bool res; //当前调度方案是否为合法调度
bool** checked; //搜索工序-机器双搜索图时的访问标记
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -