資源簡介
本文件包含了模擬退火算法的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
- 上一篇:操作系統 多級目錄管理
- 下一篇:模擬退火算法C實現解決了工作指派問題
評論
共有 條評論