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

📄 hnn.h

📁 一个用于JSP神经网络的演示软件
💻 H
字号:
#ifndef HNN_H
#define HNN_H
#define NULL 0

#include <fstream>
#include "Gantt.h"


/*-------------------------------------------------------------------*/
//                                                                   //
//                 HNN 类                                            //
//       说明:Hopfield神经网络类(同时也是其它多种神经网络类的基类)  //                         
//       作用:用连续型Hopfield网络求解JSP问题                       //
//                                                                   //
/*-------------------------------------------------------------------*/


class HNN
{
public:

	/*--------------------设置所要解决的调度问题--------------------------*/
	
	//各参数依次为:调度问题的作业数、机器数、机器分配、时间分配
	//注:机器分配和时间分配可以在以后单独设置
	HNN(int, int, int** = NULL, int** = NULL);
	~HNN();

	//设置调度问题的机器分配
	void setMachine(int**);

	//设置调度问题的时间分配
	void setTime(int**);


	/*--------------------运行网络解决优化调度问题-----------------------*/

	//设置神经运动方程的相关参数
	void setPara(double, double, double, double, double, double, double = 0.00001, double = 1, double = 1, double = 0.2);

	//运行Hopfield网络并达到稳定状态
	bool run();


	/*------------------------处理调度结果-------------------------------*/
	
	//输出调度结果矩阵
	void drawNeroOutputs(GanttHis*);

	//绘制调度结果的甘特图
	void drawGantt(GanttHis*,int = 0);

	//得到调度结果的最大时间成本
	int getCost();

	//得到运行时间
	CString getRunTime();

protected:
	/*------------------------算法内部实现------------------------------*/

	//初始化偏置电流
	void initI();

	//初始化神经元输入输出矩阵
	void initNeros();

	//解神经元运动方程 c*du/dt = -u/r+M
	void solveMotionEqu();

	//计算神经元输出
	void neroOutputs();

	//计算神经网络能量函数
	void countE();

	//累计w*v,得神经运动方程项M
	void countM();

	//用4阶Runge-Kutta法求解神经网络运动方程
	void rungeKutta4();
	
	//用1阶Runge-Kutta法求解神经网络运动方程
	void rungeKutta1();

	//转换运行时间格式
	void formatTime(double);

	/*------------------------调试内部状态用-------------------------------*/

	//输出调度结果矩阵
	void printNeroOutputs();

	//输出神经元输入矩阵
	void printNeroInputs();

	//输出初始化偏置电流
	void printI();

	//调度问题描述相关信息
	int n;            //作业总数
	int m;            //机器总数
	int **machine;    //作业的机器分配
	int **protime;    //作业的加工时间分配

	//换位矩阵及其所对应神经网络相关信息	
	int N;            //换位矩阵行数
	double **u;       //神经元输入矩阵
	double **v;       //神经元输出矩阵
	double **th;      //δ数组
	double **I;       //偏置电流
    double **M;       //神经网络运动方程(c*du/dt = -u/r+M)中M数组
	double E;         //神经网络能量函数值
	
	//神经运动方程的相关参数
	double A, B, C, D1, D2, D3;  
	double c, R;
	double u0;
	double dt;//时间步长

	//调度结果相关信息
	GanttChart *chart; //换位矩阵所对应的甘特图对象
	int cost;          //调度完成后的最大时间成本
	int runMin;        //运行时间的分钟部分
	int runSec;        //运行时间的秒部分
	int runMSec;       //运行时间的微秒部分
	ofstream cout;     //文本输出流

};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -