⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gantt.h

📁 一个用于JSP神经网络的演示软件
💻 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 + -