• 沒有找到結果。

第五章 實證分析

6.2 建議

1. 本研究之模式係假設在船期及裝卸櫃量為已知之前提下進行排班作業,後續研究可 以考慮將船期規劃與人員排班一併納入,以擴展模式的功能。 

2. 本研究在指派排班作業中將人員操作熟練度以及起重機機具之裝卸效率視為一 致,建議未來可對其差異進行考量,以提升模式的功能。 

3. 在本研究中,休假方式嘗試以不同方法安排,建議後續研究可研擬不同之休假方案 進一步測試不同的休假方式所得到之結果,使排班作業更為完備。 

4. 後續研究可深入探討海運中貨櫃量之淡季與旺季之人力需求,以完整規劃人力需求 與調度。 

5. 實務單位若能採用電腦化排班以替代目前的人工排班方式,將能有效提升工作效率 與排班之平均化。 

參考文獻

1. 盧華安、林正偉,「岸肩橋式起重機工作排程之研運輸計劃季刊」,運輸計劃季 刊,

第三十五卷,第三期,頁 281-308,民國 95 年。

2. 杜宇平、顏上堯,「空服員排班網路模式與求解演算法之研究」,運輸學刊,第十四 卷第二期,頁 15-29,民國 91 年。

3. 陳立欣,「考慮平均化之後艙組員派遣模式---以座艙長為例」,碩士論文,國立交通 大學。

4. 蘇昭銘、張靖,「捷運系統站務人員排班模式之研究」,運輸學刊,第十二卷,第二 期,頁 1-14,民國 89 年。

5. 陳豪雷,「長途客運排程規劃暨班次表設計之研究」,中央大學土木工程學系,碩士 論文,民國 88 年。

6. 顏上堯、林錦翌,「空服員排班組合最佳化之研究」,中國土木水利工程學刊,第 9 卷 2 期,頁 303-313,民國 86 年。

7. 高建元,「護理人員之排班研究」,國立台灣科技大學管理技術研究所,民國 83 年。

8. 陳柏榮、王國琛,限制規劃 Constraint Programming 之應用研究 – 以排課問題 為例,國立交通大學運輸工程與管理學系畢業專題,民國 89 年。

9. 辛怡達、林正章,郵局快捷專車排班排程問題之研究,國立成功大學交通管理科學 研究所碩士班論文,民國 90 年。

10. 謝玉霜、陳春益,限制式規劃應用於港區貨櫃場軌道式門型起重機移動路徑之研 究,國立成功大學交通管理科學研究所碩士論文,民國 90 年。

11. 林詩芹、韓復華,以限制規劃構建全年無休服務人員排班模式 – 以客服人員排班 為例,國立交通大學運輸科技與管理學系,碩士論文,民國 92 年。

12. 翁得榮、喻奉天,排課問題之研究 – 以高雄第一科技大學運籌管理系為例,高雄 第一科技大學,民國 96 年。

13. ILOG OPL: Optimization Programming Language,皮托科技訓練課程教材,民國 90 年。

14. Abbound, N., M. Inuiguchi, M. Sakawa and Y. Uemura, “Manpower allocation using genetic annealing,” European Journal of Operational Research, Vol. 111, pp. 405-420, 1998.

15. A. Caprera, M. Fischetti, P. Toth, D. Vigo, and P. L Guida , Algorithms for Railway Crew Management, Mathematical Programming, Vol. 79, pp. 125-141, 1997.

16. Appelgren, L. H., “A Column Generation Algorithm for a Ship Scheduling Problem”, Transportation Science, 3, pp. 53-68, 1969

17. Bartholdi, J.J., “A Graranteed-Accuracy Round-off Algorithm for Cuclic Scheduling and Set Covering,” Operations Research, Vol.29, pp.501-510, 1981.

18. Beasely J.E and Cao B., A tree Search Algorithm for the Crew Scheduling Problem , European Journal of Operational Research,Vol. 94,No.3 , pp517-526(1996)。

19. Caprara, Alberto, Fischetti, Matteo, Toth, Paolo and Vigo, Daniele, “Algorithms for Railway Crew Management”, Mathematical Programming, Vol. 79,

pp.125-141, 1997.

20. Cheng, B., J. Lee, and J. Wu, “A Nurse Rostering System Using Constraint Programming and Redundant Modeling,” IEEE Transactions on Information Technology in

Biomedicine, Vol. 1, pp. 44-54, 1997.

21. Chew, K. L. (1991), Cyclic Schedule for Apron Services, Journal of the Operational Research Society. Vol. 42, No. 12, pp. 1061-1069.

22. Chu Hai D. , Eric Gelman and Ellis L. Johnson , “Solving large scale crew scheduling problems”, European Journal of Operational Research, Vol 97, pp260-268, 1997.

23. Chun, H.W., H.C. Chan, P.S. Lam, M.F. Tsang, J. Wang and W.M. Yeung, “Nurse

Rostering at the Hospital Authority of Hong Kong,” In Proceedings of AAAI/IAAI Conference, 2000.

24. Dantzig, G.B., “A Comment on Edie’s Traffic Dealys at Toll Booths,” Operations Research, Vol.3, pp. 339-341, 1954.

25. Higgins, A., Scheduling of Railway Track Maintenance Activities and Crews, Journal of the Operational Research Society, Vol. 49, pp. 1026-1033, 1998.

26. Hillier , F. S , Lieberman , G. J. “Introduction to Operation Research, McGraw-Hill。

27. Hoffman Karla L. and Padberg Manfred, ”Solving Airline Crew Scheduling Problem by Branch-and-Cut”, Management Science, Vol.39, NO.6, pp657-682, 1993.

28. Kim, K. H. and Kim, K. W., Operator-Scheduling Using A Constraint Satisfaction

Technique in Port Container Terminals, Computer & Industrial Engineering Vol. 46, pp.

373-381, 2004.

29. Lau, H. C., “On the Complexity of Manpower Shift Scheduling,” Computers Operations Research, Vol.23, No.1, pp. 93-102, 1996.

30. Lim Andrew, Brian Rodrigues, Zhou Xu, (2004), Solving the Crane Scheduling Problem Using In telligent Search Schemes, Lecture Notes in Computer Science, Volume 3258 31. Smith, L.D. and Wiggins A., “A Computer-Based Nurse Scheduling System,” Computer

Operation Research, Vol.4, pp.195-212, 1977.

32. Young-Man Park, Kap Hwan Kim, A scheduling method for Berth and Quay cranes, OR Spectrum, Volume 25, Number 1 , 2003.

附錄一、C語言程式

#include <stdlib.h>

#include <stdio.h>

#define DAY 7 /*全部天數為 7 天*/

#define SLOT 5 /*SLOT 有 5 個班次*/

#define GROUP 50 /*可供排班有 50 位人員*/

#define FDEMAND1 "D:\\論文程式\\TEST 包\最終版\\demand1.txt"

#define FDEMAND2 "D:\\論文程式\\TEST 包\最終版\\demand2.txt"

#define FDEMAND3 "D:\\論文程式\\TEST 包\最終版\\demand3.txt"

#define FDEMAND4 "D:\\論文程式\\TEST 包\最終版\\demand4.txt"

#define FDEMAND5 "D:\\論文程式\\TEST 包\最終版\\demand5.txt"

#define FDEMAND6 "D:\\論文程式\\TEST 包\最終版\\demand6.txt"

#define FDEMAND7 "D:\\論文程式\\TEST 包\最終版\\demand7.txt"

#define DAYNUM "D:\\論文程式\\TEST 包\最終版\\day.txt"

#define DAY_SHIP "D:\\論文程式\\TEST 包\最終版\\ship.txt"

#define SHIFT_DEMAND "D:\\論文程式\\TEST 包\最終版\\shift_demand.txt"

#define outmodel "D:\\論文程式\\TEST 包\最終版\\model.txt"

int *day;

int *ship;

int **demand1=NULL;

int **demand2=NULL;

int **demand3=NULL;

int **demand4=NULL;

int **demand5=NULL;

int **demand6=NULL;

int **demand7=NULL;

int **off=NULL;

int shiftkind[SHIFT]={1,2,3,4,5};

int i,j,k,l;

int d;

void read_all_demand(void); /*讀入所有的資料*/

void write_model(void); /*印出所有的 model*/

void read_day(char *); /*給予天數代號,如第一天為 day[0]等*/

void read_ship(char *); /*ship 函數*/

void requiredemand_space(int ***,int); /*各天需求的空間*/

void read_demand(char *,int,int **); /*讀取各天的需求*/

void read_rest(int ***);

int objective(FILE *model); /*宣告目標式函數*/

int a(void);

void min_group(FILE *model);

void work_need(int,int,int **,FILE *model); /*宣告工作時段需求限制式*/

void time_conflict(FILE *model); /*時段衝突限制式*/

void holiday(FILE *model); /*輪休限制式*/

void continue_work(FILE *model,int,int); /*連續執勤限制式*/

void day_no_work(FILE *model); /*隔日不立刻勤執限制式*/

int c(void);

void end(FILE *model);

int main(void) {

read_all_demand();

write_model();

return 0;

}

void read_all_demand(void) {

read_day(DAYNUM); /*天數代號*/

read_ship(DAY_SHIP); /*各天的船舶數量*/

requiredemand_space(&demand1,ship[0]); /*第一天的需求空間*/

requiredemand_space(&demand2,ship[1]); /*第二天的需求空間*/

requiredemand_space(&demand3,ship[2]); /*第三天的需求空間*/

requiredemand_space(&demand4,ship[3]); /*第四天的需求空間*/

requiredemand_space(&demand5,ship[4]); /*第五天的需求空間*/

requiredemand_space(&demand6,ship[5]); /*第六天的需求空間*/

requiredemand_space(&demand7,ship[6]); /*第七天的需求空間*/

read_demand(FDEMAND1,ship[0],demand1); /*讀取第一天的需求*/

read_demand(FDEMAND2,ship[1],demand2); /*讀取第二天的需求*/

read_demand(FDEMAND3,ship[2],demand3); /*讀取第三天的需求*/

read_demand(FDEMAND4,ship[3],demand4); /*讀取第四天的需求*/

read_demand(FDEMAND5,ship[4],demand5); /*讀取第五天的需求*/

read_demand(FDEMAND6,ship[5],demand6); /*讀取第六天的需求*/

read_demand(FDEMAND7,ship[6],demand7); /*讀取第七天的需求*/

read_rest(&off);

return;

}

void read_day(char *fileday) /*以下為各天代號的讀取*/

{

FILE *fday=NULL;

fday=fopen(fileday,"r");

day=(int *)malloc(DAY*sizeof(int));

for(i=0;i<DAY;i++) {

fscanf(fday,"%d",&day[i]);

}

fclose(fday);

return;

}

void read_ship(char *fileship) /*以下為各天船舶艘數的讀取*/

{

FILE *fship=NULL;

fship=fopen(fileship,"r");

ship=(int *)malloc(DAY*sizeof(int));

for(j=0;j<DAY;j++) {

fscanf(fship,"%d",&ship[j]);

}

fclose(fship);

return;

}

void requiredemand_space(int ***pta_demand,int shipnum) /*以下為各天需求的空間*/

{

int **a_demand=NULL;

a_demand=(int **)malloc(shipnum*sizeof(int *));

for(j=0;j<shipnum;j++)

a_demand[j]=(int *)malloc(SHIFT*sizeof(int));

*pta_demand=a_demand;

return;

}

void read_demand(char *filename,int shipnum,int **demand) /*以下為讀取各天的需求*/

{

FILE *fd=NULL;

fd=fopen(filename,"r");

for(j=0;j<shipnum;j++) for(k=0;k<SHIFT;k++)

{

fscanf(fd,"%d",&demand[j][k]);

} fclose(fd);

return;

}

void read_rest(int ***poff) {

for(i=0;i<DAY;i++)

for(l=0;l<GROUP;l++) {

fscanf(fo,"%d",&off[i][l]);

}

fclose(fo);

return;

}

void write_model(void) {

FILE *model=NULL;

model=fopen(outmodel,"w");

fprintf(model,"MIN\n");

objective(model); /*目標式*/

fprintf(model,"\nST.\n");

min_group(model);

work_need(day[0],ship[0],demand1,model); /*第一天工作時段限制式*/

work_need(day[1],ship[1],demand2,model); /*第二天工作時段限制式*/

work_need(day[2],ship[2],demand3,model); /*第三天工作時段限制式*/

work_need(day[3],ship[3],demand4,model); /*第四天工作時段限制式*/

work_need(day[4],ship[4],demand5,model); /*第五天工作時段限制式*/

work_need(day[5],ship[5],demand6,model); /*第六天工作時段限制式*/

work_need(day[6],ship[6],demand7,model); /*第七天工作時段限制式*/

time_conflict(model); /*時段衝突限制式*/

holiday(model); /*輪休限制式*/

continue_work(model,shiftkind[0],shiftkind[1]); /*連續勤執限制式 1*/

continue_work(model,shiftkind[1],shiftkind[2]); /*連續勤執限制式 2*/

continue_work(model,shiftkind[2],shiftkind[3]); /*連續勤執限制式 3*/

continue_work(model,shiftkind[3],shiftkind[4]); /*連續勤執限制式 4*/

day_no_work(model); /*隔日不立刻勤執限制式*/

end(model);

fclose(model);

return;

}

int objective(FILE *model) /*以下為目標式*/

{

fprintf(model,"Z");

return 0;

}

int a(void) {

for(j=0;j<=DAY;j++) {

if(i-j==1) return ship[j];

}

return 0;

}

void min_group(FILE *model) {

int b;

for(l=1;l<=GROUP;l++) {

for(i=1;i<=DAY;i++)

{

b=a();

for(j=1;j<=b;j++)

for(k=1;k<=SHIFT;k++) {

fprintf(model,"+X%d_%d_%d_%d",i,j,k,l);

} }

fprintf(model,"-Z<=0\n");

}

return;

}

void work_need(int day,int shipnum,int **demand,FILE *model) /*以下為工作時段限制 式*/

{

for(j=0;j<shipnum;j++) for(k=0;k<SHIFT;k++)

{

for(l=1;l<=GROUP;l++) {

fprintf(model,"+X%d_%d_%d_%d",day,j+1,k+1,l);

}

fprintf(model,"=%d\n",demand[j][k]);

} return;

}

void time_conflict(FILE *model) /*以下為時段衝突限制式*/

{

int b;

for(l=1;l<=GROUP;l++) for(i=1;i<=DAY;i++) for(k=1;k<=SHIFT;k++)

{

b=a();

for(j=1;j<=b+1;j++) {

if(j<b+1) {

fprintf(model,"+X%d_%d_%d_%d",i,j,k,l);

}

if(j==b+1 && b!=0) fprintf(model,"<=1\n");

} } return ; }

void holiday(FILE *model) /*以下為輪休限制式*/

{ int b;

for(i=1;i<=DAY;i++) {

b=a();

for(j=1;j<=b;j++)

for(k=1;k<=SHIFT;k++)

for(l=1;l<=GROUP;l++)

void continue_work(FILE *model,int o,int p) /*以下為不可連續執勤時段限制式*/

{

int b;

for(l=1;l<=GROUP;l++) for(i=1;i<=DAY;i++)

void day_no_work(FILE *model) /*以下為隔日不立刻勤執限制式*/

{

int b,e;

k=SHIFT;

for(l=1;l<=GROUP;l++) {

for(i=1;i<=DAY-1;i++) }

} return;

}

int c(void) {

for(j=0;j<=DAY;j++) {

if(d-j==1)

return ship[j];

} return 0;

}

void end(FILE *model) {

int b;

fprintf(model,"BIN\n");

}

fprintf(model,"\nend\n");

return;

相關文件