• 大小: 776KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: SA  模拟退火  

资源简介

本文件包含了模拟退火算法的C源码,解决了工作指派问题,内部包含了该实验的要求,以及缩写的报告,简要的写出了本实验的设计思路

资源截图

代码片段和文件信息


/*****************************************************************************
** Copyright: NEW NEU laboratory
** File name: SA_工作指派问题 
** Description:模拟退火算法解决工作指派问题
** Author: 1702--GCJ 
** Version: 1.0
** Date: 2017/10/4
** History: 无
*****************************************************************************/

#include“stdio.h“
#include“stdlib.h“
#include“string.h“
#include “time.h“
#include “math.h“

/*----------------------------------------------------
@brief 参数配置区 
*/
#define WORK_NUM 50  //工作数量
#define WORKER_NUM 50  //工人数量
#define INIT_TEM (60 + WORK_NUM * 10) //初始温度
#define END_TEM 60 //终止温度
#define De_TEM 2 //降温函数
#define INTER_WHILE 500 //内循环次数 类似于邻居个数 

typedef int ElementType;
ElementType **Time; //存储工人工作时间 指针 
ElementType CurrentTem; //当前温度

//定义解的存储类型 向量形式 
typedef struct _Solve{
ElementType *initSolution; //初始解 //每个元素对应的序号表示工人 总序号表示工人总数 内部元素表示工人对应的工作 
ElementType *currentSolution; //当前解 
ElementType * optimalSolution; //最优解 
ElementType *tempSolution; //临时解   
ElementType  OptimalSolutionValue; //记录最优解 (总时间) 
ElementType  CurrentSolutionValue; //记录上次的值 
ElementType  NextSolutionValue ; //记录交换后的总时间

}StrSolve;//存储解结构 

StrSolve * SolutionSpace ;  //解空间(包含当前解和初始解)指针 

typedef struct _Tabu{
int smallNum;
int bigNum; //存储数量大的元素 
}Tabu; //禁忌表结构 

typedef struct _MotionTable{
Tabu  tabu; //存储改变的元素 
ElementType changedistance; //改变的距离 
}MotionTable;//记录2opt邻域移动信息 

/*************************************************
**Function: MemBlockWork
**Description: 申请存储工人工作时间的空间 
**Calls: 无
**Called By: ReadDataTxt() 
**Input: 无
**Output: 无 
**Return: 指向存储工人工作时间的指针 
**Others: 无
*************************************************/
ElementType ** MemBlockWork();
 
/*************************************************
**Function: ReadDataTxt
**Description: 从txt文档中读取工人工作时间数据
**Calls: MemBlockWork() 
**Called By: main()
**Input: 无
**Output: 无 
**Return: void 
**Others: 里面直接用的全局变量 指针Time
*************************************************/
void ReadDataTxt();

/*************************************************
**Function: CreateSolutionSpace
**Description: 创建并初始化解空间
**Calls: 无  
**Called By:  Init2Opt()
**Input: worker_num  工人数量 
**Output: 无 
**Return: StrSolve  *指针变量 
**Others: 不用这块内存的时候要逐一释放掉 ! 
*************************************************/
StrSolve *CreateSolutionSpace(int worker_num);

/*************************************************
**Function: GetInitSolution
**Description: 获得初始解
**Calls: 无  
**Called By:  Init2Opt()
**Input: StrSolve * 指针变量 
**Output: 无 
**Return: StrSolve  *指针变量 
**Others: 这里在初始化解的时候可以用其他元启发式算法得出一个较好的解  ! 工人工作不能重复及数组空间的数字不能重复 
*************************************************/ 
void GetInitSolution(StrSolve * strSolve);

/*************************************************
**Function: Get2optSolution
**Description: 得到1个2邻域解 用tempSolution来存储 
**Calls:  
**Called By:  SA()
*

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       21062  2017-10-05 09:21  data.txt
     文件         252  2017-10-04 19:52  data1.txt
     文件     2101141  2017-10-05 09:24  data3.txt
     文件         408  2018-01-06 10:04  readme.txt
     文件       16398  2018-01-06 09:58  SA.c
     文件      172735  2018-01-06 09:59  SA.exe
     文件      159812  2018-01-06 10:07  禁忌搜索算法试验报告.docx

评论

共有 条评论