เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/nattaporn...การว...

138
รายงานวิจัย เรื่อง การจัดเส้นทางการขนส่งด้วยวิธีเมต้าฮิวริสติกส์ กรณีศึกษา บริษัทผู้ให้บริการขนส่งทางด้านโลจิสติกส์ Metaheuristic for Transportation Routing: A Case Study of Transportation Company ณัตพร ไชยเสนา Nattaporn Chaisena การวิจัยครั้งนี้ได้รับเงินทุนการวิจัยจากมหาวิทยาลัยราชพฤกษ์ ปีการศึกษา 2560

Upload: others

Post on 04-Mar-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

1

รายงานวจย

เรอง

การจดเสนทางการขนสงดวยวธเมตาฮวรสตกส

กรณศกษา บรษทผใหบรการขนสงทางดานโลจสตกส Metaheuristic for Transportation Routing: A Case Study of

Transportation Company

ณตพร ไชยเสนา Nattaporn Chaisena

การวจยครงนไดรบเงนทนการวจยจากมหาวทยาลยราชพฤกษ ปการศกษา 2560

Page 2: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

ชองานวจย: การจดเสนทางการขนสงดวยวธเมตาฮวรสตกส : กรณศกษา บรษท ผใหบรการขนสง

ชอผวจย: ณตพร ไชยเสนา ปทท างานวจยแลวเสรจ: 2560

บทคดยอ

การวจยครงนมจดประสงคเพอน าเทคนคในการจดเสนทางการขนสงดวยวธการเมตาฮว - รสตกสมาใชในการจดเสนทางการขนสงสนคาใหกบบรษทกรณศกษาและน ามาชวยในการลดระยะทางในการขนสงใหไดระยะทางทสนทสด ผวจยไดมการออกแบบจ าลองและปรบปรงใหใกลเคยงสอดคลองกบปญหาจรง โดยน าเทคนควธการเมตาฮวรสตกสดวยวธการสลบจดสงทละ 3 จด (3-OPT)

ผลการวจย พบวา การออกแบบจ าลองการจดเสนทางเดนรถขนสงสนคาโดยไดน าหลกการเมตาฮวรสตกสดวยวธการสลบจด 3 จด 3-OPT มาประยกตกบโปรแกรมจดเสนทางทเขยนชดค าสงลงบนโปรแกรม Visual Basic for Application (VBA) และท างานบนโปรแกรม Microsoft Excel และดงขอมลระยะทางดวยระบบสารสนเทศทางภมศาสตร โดยการเกบขอมลตวอยาง 7 ชดขอมลระหวางวนท 6 -12 พฤศจกายน 2560 ทดลองจดเสนทางดวยวธ 3-OPT โดยเลอกรถบรรทกประเภท 6 ลอกลาง ผลทไดจากการทดลองสามารถลดระยะทางขนสงรวมจากเดม 5,005.93 กโลเมตร เหลอเพยง 4,512.11 กโลเมตร โดยสามารถลดระยะทางจากเดมลง 493.82 กโลเมตร และยงสามารถลดตนทนคาน ามนเชอเพลงลงได 7 วน 12,389.94 บาท

ค าส าคญ: การจดเสนทางเดนรถขนสงสนคา วธการเมตาฮวรสตกส วธการสลบจดสงทละ 3 จด

(3-OPT)

Page 3: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

Research Title: Metaheuristic for Transportation Routing: A Case Study of Transportation Company

Researcher: Nattaporn Chaisena Year: 2017

Abstract The research purposes were to manage and reduce transportation routing of transportation company using metaheuristic technique. Design model corresponds to problem by 3-OPT. Applied the 3-OPT with routing software in Visual Basic for Application (VBA) and process on Microsoft Excel. The samples were 7 routes distance from Geographic Information System (GIS) of six-wheel truck between November 6 – 12, 2017.

The results found that; The vehicle routing reduced the transportation distance from 5,005.93 KM to

4,512.11 KM; the distance reduced for 493.82 KM and reduced the cost of fuel for 12,389.94 Baht in 7 days. Keywords: transportation routing, metaheuristics, 3-OPT

Page 4: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

กตตกรรมประกาศ

งานวจยเรอง การจดเสนทางการขนสงดวยวธเมตาฮวรสตกส กรณศกษา บรษทผใหบรการขนสง เสรจสมบรณไดดวยความกรณาจากมหาวทยาลยราชพฤกษ ดร.อณาวฒ ชทรพย อธการบด ประธานกรรมการวจย คณะกรรมการวจยทกทานทไดพจารณาทนอดหนนการวจยใหแกขาพเจา รวมถงทปรกษาโครงการวจยดร.สภาภรณ ตงด าเนนสวสด ทไดใหค าแนะน าและชวยแกไขขอบกพรองมาตลอด ซงท าใหงานวจยเรองนเสรจสมบรณ

มกราคม 2561

Page 5: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

สารบญ หนา

บทคดยอภาษาไทย ............................................................................................................... ก บทคดยอภาษาองกฤษ .......................................................................................................... ข กตตกรรมประกาศ................................................................................................................ ค สารบญ ................................................................................................................................. ง สารบญตาราง ....................................................................................................................... ฉ สารบญภาพ ......................................................................................................................... ช บทท 1 บทน า ................................................................................................................ 1 ความเปนมาและความส าคญของปญหา .................................................................. 1 ค าถามการวจย ....................................................................................................... 2 วตถประสงคของการวจย ........................................................................................ 2 ขอบเขตการวจย ..................................................................................................... 2 ประโยชนทคาดวาจะไดรบ ...................................................................................... 2 นยามค าศพทเฉพาะ ................................................................................................ 3 บทท 2 แนวคด ทฤษฎ และงานวจยทเกยวของ ............................................................. 4 ความหมายของการขนสง ........................................................................................ 4 รปแบบของการขนสงสนคา .................................................................................... 5 ลกษณะของการขนสงสนคาดวยรถบรรทก ............................................................. 6 การจดเสนทางการเดนรถ (Vehicle Routing) ....................................................... 7 ปญหาการจดเสนทางการเดนรถ ............................................................................. 9 เทคนคการหาค าตอบ .............................................................................................. 14 ระบบสารสนเทศทางภมศาสตร .............................................................................. 23 Visual Basic .......................................................................................................... 29 งานวจยทเกยวของ ................................................................................................. 29 บทท 3 ระเบยบวธวจย .................................................................................................. 34 ประชากรทใชในการศกษา ...................................................................................... 34 ขนตอนการด าเนนงานวจย ..................................................................................... 34 เครองมอทใชในงานวจย ......................................................................................... 35

Page 6: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

สารบญ (ตอ) หนา

บทท 4 ผลการวจย ........................................................................................................ 37 การออกแบบการจดเสนทางเดนรถขนสงสนคา ...................................................... . 37 แบบจ าลองทางคณตศาสตร .................................................................................... 40 ตนทนน ามนเชอเพลง .............................................................................................. 41 ผลการทดลองการจดเสนทางเดนรถขนสงสนคา ..................................................... 41 บทท 5 อภปรายผล และขอเสนอแนะ ............................................................................ 44 สรปผลการวจย ....................................................................................................... 44 อภปรายผลการวจย ................................................................................................ 45 ขอเสนอแนะ ........................................................................................................... 46 ขอเสนอแนะในการน าผลการวจยไปใช ........................................................ 46 ขอเสนอแนะในการน าท าวจยครงตอไป ....................................................... 46 บรรณานกรม ....................................................................................................................... 47 ประวตผวจย ........................................................................................................................ 134

Page 7: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

สารบญตาราง

ตารางท หนา 2.1 เปรยบเทยบคณลกษณะของรปแบบการขนสงตาง ๆ ............................................ 6 3.1 ประเภทและขอจ ากดดานน าหนกและปรมาตร...................................................... 35 4.1 ตวอยางเมตรกซระยะทาง ..................................................................................... 38 4.2 เปรยบเทยบระยะทางหลงจากการปรบปรงเสนทาง .............................................. 43

Page 8: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

สารบญภาพ

ภาพท หนา 2.1 การสงสนคา แบบ 1 เทยว ตอ 1 ลกคา ................................................................. 8 2.2 การจดเสนทางเดนรถจากศนยกระจายสนคาแหลงเดยวไปยงลกคาตาง ๆ ............. 12 2.3 ผลลพธการจดเสนทางเดนรถขนสงสนคาแบบเสนทางเดยว (STSP) ...................... 13 2.4 ผลลพธการจดเสนทางเดนรถขนสงสนคาแบบหลายเสนทาง (MTSP) .................... 13 2.5 ผลลพธการจดเสนทางเดนรถขนสงสนคาแบบคลาสสค (CVRP) ............................ 14 2.6 แสดงวธการรวมจดสงสนคาโดยวธ saving: Clark and Wright saving ............... 17 2.7 การแกปญหาโดยวธ Sweep Approach .............................................................. 18 2.8 เทคนคการปรบปรงเสนทางดวยวธ 2 – OPT ........................................................ 19 2.9 เทคนคการปรบปรงเสนทางดวยวธ 3 – OPT ........................................................ 19 2.10 ระบบสารสนเทศทางภมศาสตร ........................................................................... 23 2.11 องคประกอบในการทางานของระบบ GIS ........................................................... 25 3.1 โปรแกรม Google Map ....................................................................................... 36 3.2 โปรแกรมทท างานบน Microsoft Excel รวมกบ VBA (Visual Basic for Application ......................................................................................................................

36

4.1 แผนภมการจดเสนทางการเดนรถดวยวธ 3-OPT ................................................... 39 4.2 การเปรยบเทยบระยะทางระหวางพนกงานจดรถและวธ 3-OPT ........................... 43

Page 9: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

1

บทท 1 บทน า

1.1 ความเปนมาและความส าคญของปญหา การท าธรกจในปจจบนนมการแขงขนสงถอเปนเรองทาทายส าหรบเจาของธรกจเปนอยางมากจงจ าเปนจะตองหาวธตาง ๆ เพอท าใหธรกจของตนสามารถอยได เปนทแนนอนวาธรกจตาง ๆ ไดเปรยบทางการแขงขนไดนน จะตองสามารถบรการลกคาไดรวดเรวกวาคแขง ใชทรพยากรทมอยไดอยางมประสทธภาพโดยอาศยอยภายใตตนทนทเหมาะสมหรอต ากวาคแขง ท าใหธรกจตาง ๆ กนมาใหความสนใจเกยวกบการจดการระบบใหดโดยการวางแผนการจดการโลจสตกสใหด ดงนนในปจจบน โลจสตกสจงมบทบาทอยางมากในกระบวนการท างานในธรกจตางๆ ไมวาจะเปนในดานการบรหารคลงสนคา การวางแผนระบบการผลต และดานการขนสงซงในปจจบนจะพบวาธรกจหลากหลายประเภทใหบรการเสรมโดยการขนสงสนคาเพอใหลกคาเลอกทจะมาใชบรการมากยงขน ดงจะเหนจากสถตจ านวนใบอนญาตประกอบการขนสงและจ านวนผประกอบการขนสงทวประเทศ ขอมล ณ วนท 30 มถนายน 2559 กรมการขนสงทางบก มผประกอบการขนสง มากถง 422, 819 ราย (ทมา: กลมสถตการขนสง กองแผนงาน กรมการขนสงทางบกป 2559)

บรษทกรณศกษาทผวจยไดเกบขอมล เปนบรษทผใหบรการขนสงทางดานโลจสตกสรบขนสงสนคาไปยงหางสรรพสนคาตางๆ โดยถาบรษทมแผนการสงสนคาใหเกดความคมคาในแตละเทยว และสามารถลดระยะทางในการวงของรถขนสนคา กจะสงผลใหตนทนการจดสงสนคาลดลง ท าใหบรษทมโอกาสในการแขงขนทางการคามากยงขน ส าหรบปญหาของกรณศกษาน พบวาขนตอนในการสงสนคาใหลกคาแตละรายนนยงไมไดน าหลกการวชาการมาใชในการจดสรรเสนทางการเดนรถใหคมคา อาศยเพยงความคนเคยของพนกงานทจดเสนทางการเดนรถเพยงอยางเดยว โดยไมไดค านงถงระยะทางและจ านวนสนคาในแตละเทยว ใชหลกการสถานทใกลไปสงดวยกน โดยไมพจารณาหลกเกณฑใดๆทงสน อาศยเพยงความช านาญของพนกงานขบรถเทานน ซงมความเสยงตอการใชทรพยากรในแตละเทยวบรรทกอยางไมคมคา

ดงนนจงเปนทมาของงานวจยในการประยกตใชวธการเมตาฮวรสตกส ดวยวธ 3 OPT ซงวธนเปนวธหนงของวธการเมตาฮวรสตกส ส าหรบแกปญหาการจดเสนทางการเดนรถของกรณศกษา ทจะสงสนคาใหลกคาแตละราย โดยมงเนนทจะลดระยะทางการขนสงใหมระยะทางโดยรวมสนทสด และน าผลทไดมาเปรยบเทยบกบสภาพปจจบนเพอหาค าตอบ ตลอดจนสามารถใชทรพยากรทมอยไดอยางมประสทธภาพ

Page 10: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

2

1.2 ค าถามการวจย 1.2.1 อะไรเปนเทคนคในการจดเสนทางการขนสงดวยวธการเมตาฮวรสตกส 1.2.2 เทคนคในการจดเสนทางการขนสงดวยวธการเมตาฮวรสตกสชวยลดระยะทางในการขนสงใหสนทสดไดอยางไร

1.3 วตถประสงคของการวจย 1.3.1 เพอศกษาเทคนคในการจดเสนทางการขนสงดวยวธการเมตาฮวรสตกสมาใชในการจดเสนทางการขนสงสนคาใหกบบรษทกรณศกษา 1.3.2 เพอศกษาวธการน าเทคนคในการจดเสนทางการขนสงดวยวธการเมตาฮวรสตกสมาชวยในการลดระยะทางในการขนสงใหไดระยะทางทสนทสด 1.4 ประโยชนทคาดวาจะไดรบจากวจย 1.4.1 วธการเมตาฮวรสตกสสามารถลดตนทนการขนสงใหกบบรษทกรณศกษาได 1.4.2 วธการเมตาฮวรสตกสชวยในการจดเสนทางการขนสงใหกบบรษทกรณศกษาโดยใหไดระยะทางสนทสด 1.4.3 เปนประโยชนแกบรษทอน ๆ เพอใชในการลดตนทนการขนสงและจดเสนทางการขนสงใหไดระยะทางสนทสด 1.5 ขอบเขตการวจย ขอบเขตดานเนอหา

1.5.1 การศกษานจะพจารณาการขนสงสนคาของบรษทกรณศกษาเฉพาะในเขตกรงเทพและปรมณฑลเทานน

1.5.2 รถทใชในการขนสงประเภทหกลอ สามารถบรรทกสนคาไดไมเกน 7,500 กโลกรม 1.5.3 การศกษานจะศกษาวธการเมตาฮวรสตกสดวยวธการ 3 OPT ในการลดระยะทางการ

ขนสงเทานน

ขอบเขตดานพนท พนทของบรษทกรณศกษานต งอย บรเวณถนน บรมราชชนน ต าบลบางเตย อ าเภอ สามพราน จงหวดนครปฐม โดยผวจยจะเกบขอมลโดยลงพนทไปยงกรณศกษา และเกบขอมลการขนสงไมจ ากดระยะทางในแตละวนเปนระยะเวลา 7 วน

Page 11: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

3

ขอบเขตดานระยะเวลา การศกษานจะเกบขอมลเฉพาะบรษทกรณศกษาเพยงบรษทเดยวเทานน เนองจากบรษทกรณศกษาน เปนผใหบรการขนสงและกระจายสนคาใหกบ ผประกอบการอตสาหกรรม หาง ราน ในเขตกรงเทพมหานคร ปรมณฑล และตางจงหวด ปจจบนมลกคาใชบรการ ไมนอยกวา 2,000 ราย และเปนบรษททใหบรการดานโลจสตกสแบบครบวงจร โดยในการเกบขอมลเพอท าการวจยนครงนในชวงเดอน ตลาคม 2560 1.6 นยามศพทเฉพาะ

1.6.1 วธการเมตาฮวรสตกส หมายถง วธในการคนหาค าตอบทดภายในพนทของค าตอบทเปนไปได มจดประสงคเพอหาค าตอบทดทสดหรอค าตอบทใกลเคยงค าตอบทดทสดภายในระยะเวลาอนสน แมวาน าไปประยกตใชในปญหาทหลากหลาย

1.6.2 วธการสลบสามต าแหนง (3- OPT) หมายถง เทคนคการปรบปรงเสนทางภายในเสนทางเดยวกนทมความคลายคลงกบเทคนคการปรบปรงเสนทางดวยวธ 2-Opt แตการสลบล าดบจดสงนนจะถกเลอกสลบครงละ 3 จด

1.6.3 การขนสง หมายถง กระบวนการเคลอนยายสนคาและบรการจากผผลตไปสผบรโภคหรอเปนการเคลอนยายวตถดบไปยงโรงงานเพอท าการผลตสนคาหรอบรการ โดยใชเครองมอและอปกรณในการขนสงเปนพาหนะพาไปตามความตองการและเกดอรรถประโยชนตามทผท าการขนสงตองการ

1.6.4 การจดเสนทางการขนสง หมายถง การก าหนดเสนทางของยานพาหนะแตละคนเพอไปใหบรการลกคาทก าหนดโดยเสยคาใชจายในการขนสงนอยทสด

1.6.5 การขนสงสนคาจากจดเดยว หมายถง การขนสงสนคาจากคลงสนคาเพยงแหงเดยวไปยงลกคารายตางๆ

Page 12: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

4

บทท 2 แนวคด ทฤษฎ และงานวจยทเกยวของ

การวจยครงนมวตถประสงคในการวจยเพอประยกตใชวธการเมตาฮวรสตกสในการจดเสนทางการขนสงสนคาและน ามาใชเปนเครองมอในการลดตนทนการขนสงสนคาและเพมประสทธภาพในการขนสงใหกบบรษทกรณศกษา ผวจยน าเสนอแนวคดทฤษฎและงานวจยทเกยวของ โดยแบงออกตามประเดนดงตอไปน

2.1 ความหมายของการขนสง 2.2 รปแบบของการขนสงสนคา 2.3 ลกษณะของการขนสงสนคาดวยรถบรรทก 2.4 การจดเสนทางการเดนรถ (Vehicle Routing) 2.5 ปญหาการจดเสนทางการเดนรถ 2.6 เทคนคการหาค าตอบ 2.7 ระบบสานสนเทศทางภมศาสตร 2.8 Visual Basic วชวลเบสก 2.9 กรณศกษา บรษทผใหบรการขนสงทางดานโลจสตกส 2.10 งานวจยทเกยวของ โดยมรายละเอยดดงน

2.1 ความหมายของการขนสง แลมเบรต, สตอค และเอลแรม (2546: 137) อธบายวา การขนสง หมายถง การเคลอนยาย สนคาจากสถานทผลตไปยงสถานทบรโภคสนคานน ซงการเคลอนยายสนคาระหวางสถานท ดงกลาวกอใหเกดมลคาเพมแกสนคา ซงมลคาเพมนเรยกวา อรรถประโยชนดานสถานท (Place Utility) นอกจากนการขนสงยงกอใหเกดอรรถประโยชนดานเวลา (Time Utility) ซงเกดขนจากการ เกบรกษาสนคาไวจนกระทงเกดความตองการในการบรโภคสนคานน วโรจน พทธวถ (2547: 170) อธบายวา การขนสงเปนการเคลอนยายสนคาและบรการจากแหลงผผลตหรอผจดเกบ ไปยงลกคาในระดบตาง ๆ การขนสงจะเปนตวขบเคลอนสนคาหรอ บรการเขาไปยงกลมเปาหมายทางการตลาด ท าใหสนคาและบรการถกสงมอบไปในททตองการ บรโภค และสนคาหรอบรการนนจะเปนทรจกมากขน

Page 13: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

5

จากขอมลขางตนสรปไดวา การขนสง คอ การเคลอนยายบคคลหรอสงของจากสถานทหนง ไปยงอกสถานทหนง ซงกอใหเกดอรรถประโยชนดานสถานทและเวลา และมรปแบบในการขนสง ทหลากหลาย ดงจะกลาวในหวขอถดไป 2.2 รปแบบของการขนสงสนคา ในดานกายภาพ (Physical view) การขนสงสนคา สามารถแบงออกไดเปน 5 รปแบบ (วโรจน พทธวถ, 2547: 173-176) ไดแก 2.2.1 การขนสงสนคาทางถนน (Road transportation) คอการขนสงทใชรถยนตในการ บรรทกสนคา และขนสงระหวางต าแหนงตาง ๆ ทมแผนดนเชอมกน การขนสงเกอบทกกรณจะตอง อาศยการขนสงทางถนน เพราะเปนการขนสงทสามารถเขาถงตนทางและปลายทางไดอยางสะดวก รวดเรว 2.2.2 การขนสงสนคาทางราง (Rail transportation) เปนการขนสงผานระบบรางทม อปกรณหลก คอ ขบวนรถไฟ ระบบนมขอจ ากดในดานสถานทตงของต าแหนงสถาน ทมเฉพาะเทาทภาครฐของประเทศนน ๆ สรางไวเทานน ซงไมครอบคลมทกท แตเปนรปแบบการขนสงทมตนทนต า กวาการขนสงสนคาทางถนน โดยเหมาะส าหรบการขนสงสนคาปรมาณมากและในระยะทางไกล 2.2.3 การขนสงสนคาทางน า (Water transportation) เปนรปแบบการขนสงทประหยด ทสด โดยจะใชเรอสนคาทมขนาดใหญในการขนสงสนคาท าใหขนสงไดครงละมาก ๆ แตมความเรวต า จงเปนระบบขนสงหลกของการขนสงระหวางประเทศ 2.2.4 การขนสงสนคาทางอากาศ (Air transportation) เปนรปแบบการขนสงทใช เครองบนในการขนสงสนคา จงมความรวดเรว และคาขนสงทสง และสนคามความปลอดภยกวาการขนสงในรปแบบอน 2.2.5 การขนสงทางทอ (Pipeline transportation) เปนการขนสงซงใชสาหรบการขนสง ของเหลว โดยมการก าหนดทตงของสถานทสงและรบแนนอนและใชในการขนสงทสรางขน เฉพาะเทานน เชน ปโตรเลยม น าประปา กาซธรรมชาต จากรปแบบการขนสงสนคาทไดกลาวมาแลวนน แตละรปแบบการขนสงมความเหมาะสม กบประเภทสนคาและลกษณะการขนสงทแตกตางกนไป ขนอยกบคณลกษณะของการขนสงสนคา ในแตละรปแบบ ดงแสดงในตารางท 2.1

Page 14: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

6

ตารางท 2.1 เปรยบเทยบคณลกษณะของรปแบบการขนสงตาง ๆ

คณลกษณะ ทางถนน ทางราง ทางน า ทางอากาศ

ทางทอ

ความเรวการขนสง 2 3 4 1 5 ความมพรอมบรการ 1 2 4 3 5

ความเรวของระเบยบขนตอน 2 3 4 5 1

ปรมาณทขนสงได 3 2 1 4 5 ความยดหยนตามความตองการ 2 4 5 3 1

รวม 10 14 18 16 17

หมายเหต 1 = ดมาก, 2 = ด, 3 = ปานกลาง, 4 = พอใช และ 5 = ไมด (วโรจน พทธวถ, 2547: 178) จากตารางท 2.1 สรปไดวา การขนสงสนคาทางถนนถอเปนการขนสงทสะดวกทสด เนองจากสามารถเขาถงไดทกจด ถงแมวาจะมตนทนการขนสงสงกวาการขนสงในรปแบบอน ๆ 2.3 ลกษณะของการขนสงสนคาดวยรถบรรทก ลกษณะของการขนสงสนคาดวยรถบรรทกจ าแนกตามลกษณะของการบรรทกสนคา สามารถจ าแนกได 2 ลกษณะ คอ การขนสงสนคาแบบเตมคนรถ (Full Truckload or FTL Freight) ชารอน และ ซาน (Barker Sharon and San, 1981) ไดนยามการขนสงแบบเตมคนรถวา เปนลกษณะหนงของการขนสงแบบวาจาง ซงตองขนสงสนคาจากสถานทหนงไปยงอกสถานทหนงทมจ านวนสนคาของลกคาเทากบจ านวนสนคาทรถบรรทกสามารถบรรทกได คมกฤช วลวงศ (2547) ไดนยามการขนสงแบบเตมคนรถวา หมายถง การขนสงสนคาท ปรมาณสนคาทบรรทกในรถแตละเทยวเตมขดจากดของความจทก าหนดไว และมกมการขนสง สนคาทงหมดไปยงจดหมายเพยงจดเดยว การขนสงสนคาแบบไมเตมคนรถ (Less-Than-Truckload or LTL Freight) โพเวลล และ เซฟฟ (Powell and Sheffi, 1983) ไดนยามการขนสงแบบไมเตมคนรถวาเปนการขนสงสนคาทจ านวนสนคาของลกคาในทตาง ๆ มนอยกวาจ านวนสนคาทรถบรรทกสามารถบรรทกได ดงนนจงตองมการรวมสนคาจากลกคาหลาย ๆ แหลง (Consolidation) เพอใหสนคาเตมคนรถทงนเพอลดคาใชจายในการขนสงสนคา

Page 15: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

7

คมกฤช วลวงศ (2547) ไดนยามการขนสงแบบไมเตมคนรถวา หมายถง การขนสงสนคาทมการขนสงในแตละเทยวรถไมถงขดจ ากดของรถทก าหนดไว ท าใหอตราคาขนสงสงกวารปแบบการขนสงแบบเตมคนรถ

จากขอมลขางตนสรปไดวา การขนสงสนคาแบบเตมคนรถเปนการขนสงสนคาทปรมาณ สนคาของลกคาเทากบขดจ ากดของปรมาณสนคาทรถบรรทกบรรทกสนคาได และการขนสงสนคา แบบไมเตมคนรถ คอ เปนการขนสงสนคาทปรมาณสนคาของลกคานอยกวาขดจ ากดของปรมาณ สนคาทรถบรรทกบรรทกสนคาได 2.4 การจดเสนทางการเดนรถ (Vehicle Routing) เปนปญหาประจ าของบรษทขนสง ในแตละวนจะมลกคาจ านวนหนงมากบางนอยบางตองการใหนาสนคาไปสงให ปญหาทนาทาทายคอผจดการจะตองใชรถขนสงกคนและควรจะจดล าดบการสงสนคาอยางไร รถคนไหนควรไปสงสนคาใหแกลกคารายใดบาง และจะจดล าดบการสงสนคาของลกคาแตละรายอยางไร ในทางคณตศาสตรแลวถอวาปญหาการจดเสนทางการเดนรถ (Vehicle Routing Problem) เปนปญหาทยากมากๆ ในการทจะวเคราะหหาแผนการเดนรถทดทสดในบรรดาแผนทเปนไปไดจ านวนมากโดยเฉพาะอยางยงหากค าสงซอจากลกคาและรถสงสนคามจ านวนมาก ซงแทบจะไมมโอกาสเลยทจะจดเสนทางการเดนรถใหประหยดทสด อยางดทสดคงท าไดเพยงการวเคราะหใหไดแผนทคอนขางดมาใชปฏบตเทานนในกรณทมลกคาจ านวนมาก การหาเสนทางทเปนไปไดทงหมดแลวเลอกเอาเสนทางขนสงทมตนทนต าทสด เปนสงทแทบจะเปนไปไมไดในทางปฏบต เพราะจะตองใชเวลาในการค านวณวเคราะหยาวนานมากจนไมทนการณ จงจ าเปนตองมวธการอนๆ มาชวยใหไดค าตอบทเรว ซงมวธการหนงทเปนทนยมใชกนอยางแพรหลายในการจดเสน ทางการเดนรถ ไดแก การจดเสนทางโดยคาประมาณ (Approximation Methods) ซงค าตอบของเสนทางขนสงทไดรบจากการใชวธการนอาจจะไมดทสดแตจะไดค าตอบทดพอใช ภายในระยะเวลาทไมนานมาก น าไปใชงานไดทนเวลา วธการจดเสนทางโดยคาประมาณนยงมหลากหลายวธ ค าตอบทไดรบจากแตละวธอาจจะมคณภาพแตกตางกน ขนอยกบลกษณะรายละเอยดของปญหาแตละกรณ ซงวธทไดรบความนยมและเขาใจงายวธการหนงคอวธเซฟวงอลกอรทม (Saving Algorithm) ซงเสนอโดย Clarke and Wright นกวจยในประเทศองกฤษ ใน ค.ศ. 1964 ซงไดพจารณาการจดเสนทางยานพาหนะทมความตองการของลกคาหลายราย และยานพาหนะมความจหลายขนาดสงสนคาออกจากคลงพสดแหงเดยว งานวจยนไดพฒนาขนตอนใหสามารถเลอกเสนทางยานพาหนะทเหมาะสมทสด และผลทไดจากการแกปญหานคอ ท าใหทราบจ านวนยานพาหนะทจะใชในการขนสง และปรมาตรสนคาทขนสงโดยยานพาหนะแตละคน โดยมวธในการด าเนนงานดงน

Page 16: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

8

1. เลอกจดเรมตนจากคลงสนคาขนมาหนงปมใหเปนปมทหนง 2. ค านวณคาของระยะเวลา, ระยะทางหรอคาใชจายในการขนสงทประหยด (Saving Cost),

Sij = CiD + CDj – Cij เมอ i , j คอลกคา และ D คอคลงสนคา 3. เรยงล าดบคา Sij จากมากไปหานอย 4. สรางเสนทางของยานพาหนะโดยเชอมปม i และ j ทมคา Sij มากทสด 5. ท าซ าจนกวาจะจดเสนทางไดครบ โดยมเงอนไขของขอจากดในการเดนทางแตละ

ยานพาหนะจะตองมสนคาไมเกนความจของยานพาหนะ และตองใชเวลาในการเดนทางไมเกนระยะเวลาทก าหนด

วธเซฟวงอลกอรทมเปนทฤษฎทเปนทยอมรบในการจดการปญหาการขนสงยานพาหนะ ใจความของทฤษฎไมซบซอน คอ พจารณาการสงจากคลงสนคา D ลกคา I ลกคา I ลกคา j

คลงสนคา D คลงสนคา D

ภาพท 2.1 การสงสนคา แบบ 1 เทยว ตอ 1 ลกคา

จากรปท 1 ถาใชรถ 1 คน วงสงสนคาใหลกคา 2 ราย (i และ j) ในเทยวเดยวกนระยะทางทงหมดจะลดลงเทากบ S(i, j) = 2d( D, i ) + 2d( D, j) – [d( D, i ) + d( i, j) + d( D, j)] = d( D, i) + d( D, j) – d( i, j) คา Saving S(i, j) ทไดคอระยะทางทสามารถลดได หากระยะทางระหวางลกคาใด ท าใหเกดคา Saving สงกหมายความวา สามารถลดระยะทางไดมาก

โปรแกรมเชงเสนตรง (Linear Programming) เปนเทคนคทรจกกนแพรหลายและเปนสวนหนงของการวจยด าเนนงาน(Operations Research) ในหลาย ๆ หนวยงานไดประยกตใชวธการทางโปรแกรมเชงเสน ในการแกปญหาทางการจดสรรปจจยหรอทรพยากร (allocating resource) โดยทปจจยหรอทรพยากรมความหมายรวมถงวตถดบ ก าลงคน เวลา สถานท เงน หรอความรความสามารถตางๆ โดยมลกษณะความสมพนธของตวแปรตางๆเปนแบบเชงเสน มจดหมายเพอแกปญหาและตดสนใจใหเกดผลตามแนวทางการด าเนนงานทดทสด (OPTimal) เชน ก าไรสงสด คาใชจายนอยทสด หรอแนวทางการด าเนนงานอนๆทใหผลประโยชนมากทสดตอระบบนน ๆ โดยพจารณาเงอนไขหรอขอจากดทก าหนด เชน สภาวะตลาด การขาดแคลนวตถดบ ก าลงคนเงนทน

Page 17: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

9

สถานท ความรขอก าหนดของกฎหมายและระเบยบตางๆของสงคม นโยบายของฝายบรหาร ขอบขายของธรกจทด าเนนอยและอนๆ เทคนคทางการโปรแกรม เชงเสนนพฒนามาจากผลความกาวหนาทางวทยาศาสตร ซงมแนวคดรเรมมาจากนกคณตศาสตร วทยาศาสตรหลาย ๆ ทานซงไดนาไปใชในทฤษฎเกม รวมทงถกพฒนานาไปใชในทางการขนสง แกปญหาทางโภชนาการ และแกปญหาทางการวางแผนโครงงานในกองทพ ปจจบนเปนทยอมรบกนในหลายๆวงการในการนาเทคนคทางการโปรแกรมเชงเสนไปใชประโยชนในหลาย ๆ ดาน เชน ทางการเกษตร ทางเศรษฐศาสตร และการจดการเกยวกบการผลตทางอตสาหกรรม โปรแกรมเชงเสนประกอบไปดวย 2 สวนดงน

1. มสมการก าหนดเปาหมาย (objective function) คอสมการแสดงความสมพนธของตนทน ก าไร เพอใหก าหนดเปาหมายสงสดหรอต าสด

2. มสมการแสดงขอบขาย (constraints) ซงแสดงขอจากดตางๆของปจจยหรอทรพยากรในรปสมการหรออสมการโดยทสมการตางๆทงหมดเปนสมการเชงเสน

2.5 ปญหาการจดเสนทางการเดนรถ การจดเสนทางในการเดนรถทดและมประสทธภาพนน จะสงผลใหสามารถลดระยะทางใน การขนสงได และในบางครงยงสามารถลดจ านวนพยานพาหนะทใชในการขนสงไดอกดวย เมอ ระยะทางและจ านวนยานพาหนะทใชในการขนสงลดลง สงผลใหมลพษทเกดขนจากการขนสง ลดลงและยงท า ใหตนทนในการขนสงของบรษทลดลงอกดวย ซงรปแบบในการจดเสนทางการขนสงสามารถแบงไดเปน 13 รปแบบ (ศรวรรณ โพธทอง: ออนไลน 2553) โดยมรายละเอยด ดงน

1. การหาเสนทางทสนทสด (Shortest Path) เปนการจดเสนทางการขนสงโดยใหมการ ขนสงสนคาจากบรษทไปยงลกคาทกๆ รายใหมระยะทางรวมในการขนสงทนอยทสด โดยหา เสนทางทมระยะทางสนสดระหวางจดเรมตนกบจดหมาย (Thomas, Charles and Ronald, 1990)

2. ปญหาการเดนทางของเซลสแมน (Traveling Salesman Problem: STP) เปนการจด เสนทางการขนสงโดยใหมการขนสงสนคาจากบรษทไปยงลกคาทกๆ รายใหมระยะทางรวมในการ ขนสงทนอยทสด โดยรวมระยะทางการเดนทางของพาหนะทใชในการขนสงสนคากลบมายงบรษท ดวย

3. ปญหาการจดเสนทางสาหรบยานพาหนะ (Vehicle Routing Problem: VRP) เปนการจดเสนทางในการขนสงสนคาโดยหาจ านวนพาหนะทใชในการขนสงสนคา ทเหมาะสมกบปรมาณสนคาพรอมทงหาเสนทางเสนทางในการขนสงสนคาท เหมาะสม ภายใตขอก าหนดในเรองของ คาใชจายทนอยทสด

Page 18: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

10

4. ปญหาการขนสง (Transportation Problem) เปนการจดเสนทางในการขนสงสนคา จากคลงสนคาหลายแหงไปยงลกคาหลายราย โดยการปรมาณในการขนสงสนคาตองเทากบปรมาณ ความตองการของลกคาทสง ไวและเสยคาใชจายในการขนสงนอยทสด

5. การไหลของคาใชจายอยางต าสด (Minimum Cost Flow) เปนการจดเสนทางในการ ขนสงสนคาจากคลงสนคาไปยงลกคาแตละราย ตามปรมาณและจ านวนทลกคาตองการและม คาใชจายในการขนสงต า ทสด

6. ตนไมแบบทอดขามเลกสด (Minimum Spanning Tree) เปนการจดเสนทางการขนสงสนคาโดยพจารณาถงความเชอมโยงของเสนทางท ใชในการขนสง โดยระยะทางรวมในการขนสงนอยทสด โดยวธนถกน าไปประยกตใชในงานวจยหลาย ๆ ดาน

7. การเลอกท าเลทตง (Facility Location) เปนการหาต าแหนงทตงทเหมาะสมของจด กระจายสนคา เพอใหการขนสงสนคาจากบรษทไปยงลกคามระยะทางและคาใชจายในการขนสง นอยทสด

8. การบรรจสงของลงกลอง (Bin Packing) เปนวธการจดจ านวนพาหนะทนอยทสดทใชในการขนสงสนคาใหเพยงพอกบปรมาณสนคาทตองสงไปใหลกคา

9. การจดตารางเครองจกรโหลดบรรจภณฑ (Parallel Machine Scheduling) เปนการจด เสนทางในการขนสงสนคาโดยค านงถงลา ดบขนตอนในการดา เนน การโหลดสนคาไปยงพาหนะท ใชในการขนสงเพอใหพาหนะทเสรจเปนลา ดบสดทายใชเวลานอยทสด

10. การจดตารางงานของพนกงาน (Crew Scheduling) เปนวธการจดตารางท างานของ พนกงานทด าเนนงานเกยวกบการขนสง เชน พนกงานขบรถ พนกงานโหลดสนคา

11. การวางแผนขนสนคาบนเครองบน (Aircraft Load Planning) เปนวธการจดแผนการวางสมภาระในทองเครองบนใหสมดล เพอความปลอดภยและประหยดน ามน

12. การจดแผนการเคลอนยายตคอนเทนเนอรในทาเรอ (Container Handling at Ports) การวางแผนการเคลอนยายตคอนเทนเนอรไปมาระหวางเรอกบทาเรอ และ ทาเรอกบรถบรรทก

13. วธศกษาส านก (Heuristics) เปนวธการแกปญหาทใชในการคนหาค าตอบทใกลเคยงค าตอบทเหมาะสมทสด ซงรปแบบการแกปญหาและการคนหาค าตอบ จะเปนวธการคดอยางมเหตผลซงอาศยการก าหนดกฎเกณฑบางประการขนมา เพอหาค าตอบทดและเหมาะสมในระดบหนง ถงแมอาจไมใชค าตอบทดทสดแตจะไดค าตอบทรวดเรวโดยค าตอบทไดนนจะตองเปนค าตอบทดเพยงพอและยอมรบได และวธการแกปญหาจะพฒนาขนตามระดบความยากงายของปญหาซงจะน าความคด สามญส านกของมนษยผนวกเขากบแบบจ าลองทางคณตศาสตรเพอใชในการแกปญหา โดยใชวธการแบงพนทออกเปนกลม (Cluster First – Route Second) แลวท าการจดเสนทางเดนรถโดยใชวธเลอกจดทใกลทสด (Nearest Neighbor Approach)

Page 19: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

11

ปญหาการจดเสนทางเดนรถ (Vehicle Routing Problem : VRP) ในอดตระยะสามสบถงสสบปทผานมา ปญหานไดรบความสนใจและมการศกษากนอยางกวางขวางทกแงมมท หลากหลายรวมถงมความซบซอนใกลเคยงกบปญหาทพบไดในสถานการณจรงมากยงขนการพฒนาวธการและแนวทางการแกไขปญหามหลากหลายโดยมจดเรมตนจากบทความของ Dantzig and Ramser (1959) ซงมการตพมพในชวงทศวรรษ 1950 ดวยเหตทปญหานไดรบความสนใจเปนอยางมากเนองจากปญหาการจดเสนทางเดนรถนนเปนปญหาทพบไดบอยในชวตประจ าวน และปญหาการจดเสนทางเดนรถเปนปญหาทมความสนใจในเชงทฤษฎและกไมงายในการทจะหาค าตอบ ซงตวปญหาจะถกพจารณาแบงออกเปน 2 กลมหลก ๆ คอกลมของปญหาทมลกษณะเปนแบบ Deterministic หมายถงปญหาทตองทราบขอมลทจ าเปนเบองตนกอนคอยเรมท าการจดเสนทาง สวนกลมของปญหาทมลกษณะเปนแบบ Dynamic จะเปนปญหาทไมทราบขอมลเบองตนกอนท าการการจดเสนทาง แตจะมขอมลทยอยออกมา ในระหวางทท าการจดเสนทาง โดยปญหาพนฐานของการจดเสนทางเดนรถทรจกและม การศกษาวจยกนมากทสดคอ ปญหาการเดนทางของพนกงานขาย (The Traveling Salesman Problem : TSP) ซงมจดเรมตนในชวงทศวรรษท 1920 โดยนกคณตศาสตรและนกเศรษฐศาสตร ทมชอวา Karl Menger จากนนกมการศกษาคนควากนเรอยมาท าใหปญหานไดรบความนยม และเปนทรจกกนอยางแพรหลายโดยนกคณตศาสตรชอ Merill Flood ตอมาในป ค.ศ. 1954 George Dantzig Ray Fulkerson และ Selmer Johnson ไดเสนอวธการหาค าตอบในการจดเสนทาง ซงสามารถจดการกบปญหาการจดเสนทางในการเดนทางซงมเมองทตองเดนผานทงหมด 49 เมอง ไดจากนนกมการศกษาอยางตอเนองจนกระทงในชวงป ค.ศ. 2004 Applegate Bixby Chvatal Cook และ Helsgaun สามารถหาเสนทางทเหมาะสมในการเดนทางผานเมองทงหมด 24,978 เมองในประเทศสวเดนได

ส าหรบปญหาการจดเสนทางการเดนรถ (The Vehicle Routing Problem: VRP) นนถอไดวาเปนกรณทวไปของปญหาการเดนทางของพนกงานขาย (TSP) จะมยานพาหนะทใชเดนทางมากกวาหนงคนโดยตวปญหาจะถกแบงออกเปนประเภทยอย ๆ อกหลายประเภทตามลกษณะเฉพาะของตวปญหา ในระยะแรกนนจะมการศกษาตวปญหาทมลกษณะเปนแบบ Deterministic โดยเรมจากปญหาการจดเสนทางเดนรถพนฐานซงตวปญหาจะเปนการจดเสนทางเดนรถใหผานไปยงจดรบใหครบทกจดดวยคาใชจายในการเดนทางต าทสด และเมอมขอจ ากดในเรองขนาดความจของยานพาหนะทใชขนสง ตวปญหาจงถกเรยกวา Capacitated VRP (CVRP) แตถามทาจอดรถมากกวาหนงแหงจะถกจดเปนปญหาเรยกวา Multiple Depot VRP (MDVRP) สวนปญหาทมการไปสงและรบคนสนคาจะถกจดเปนปญหาเรยกวา Vehicle Routing Problem with Pick-up and Delivering (VRPPD) และถามขอจ ากดเรองกรอบ ระยะเวลาในการขนสงปญหานเรยกวา VRP with

Page 20: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

12

Time Windows (VRPTW) และทผานมากมผลงานวจยน าเสนออกมากมายทงทเปนของคนไทยและตางประเทศ ปญหาการเดนทางของพนกงานขาย (The Traveling Salesman Problem: TSP) เปนปญหาในการคนหาเสนทางรวมทสนทสดทจะใชในการเดนทางของพนกงานขายทตองเดนทางไปยงเมองตาง ๆ ใหครบทกเมองตามทก าหนดโดยอยางนอยจะตองเดนทางผานเมองละหนงครงซงในระหวางเมองแตละเมองจะมเสนทางทเชอมตอถงกน (Gen and Cheng, 1997) ในป ค.ศ.1950 มการตพมพวารสารเกยวกบปญหาการเดนทางของพนกงานขายเปนจ านวนมากทไดกลาวถงผลงานการวจยทส าคญตาง ๆ ในยคนน และในชวง 20 ปทผานมานไดมววฒนาการอยางมากในการจดการกบปญหาการเดนทางของพนกงานขาย และไดก าหนดเปาหมายในการวจยโดยใชจ านวนเมองทสามารถจดเสนทางเดนผานได เชน 48-City Problem, 318-City Problem, 666-City Problem และ 2392-City Problem ดงนนการคนหาเสนทางและหรอวธการแกไขปญหาทมรปแบบคลายกบปญหาการจดเสนทางเดนรถ (The Vehicle Routing Problem: VRP) ซงกเปนปญหาของการจดการเพอหาจ านวนเสนทาง และจดล าดบของการเดนรถทมความเหมาะสมไปยงลกคาตาง ๆ ใน แตละเสนทางเพอใหสอดคลองกบวตถประสงคและเปาหมายธรกจ เพราะการจดเสนทางเดนรถในทางปฏบต แสดงดงภาพท 2.2 (Ballou, 1999) จะตองค านงถงปจจยตางๆ ทสงผลกระทบตอการจดเสนทางเดนรถ (Hall and Partyka, 1997) เชน ขอจ ากดเสนทางเดนรถ (Route Capacities) จะสะทอนถงขนาดของรถและเงอนไขเวลาในการขบขซงตองเปนไปตามทกฎหมายก าหนดหรออนญาต กรอบเวลาเปนการก าหนดชวงเวลาการลงสนคาของแตละลกคา โดยขอก าหนดนอาจจะตกลงกนซงเปนไปไดทงขอก าหนดทมความเขมงวดหลกเลยงไมได (Hard Time Window) และขอก าหนดทไมมความเขมงวดสามารถยดหยนได (Soft Time Window) เชนการเสยแคคาปรบหรอลงโทษ เปนตน

ภาพท 2.2 การจดเสนทางเดนรถจากศนยกระจายสนคาแหลงเดยวไปยงลกคาตาง ๆ

Page 21: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

13

ปญหาการจดเสนทางเดนรถออกจากศนยกระจายสนคา (Depot) เปนปญหาในการจดการเสนทางและหาล าดบในการเดนทางไปยงลกคาโดยมเปาหมายทางธรกจเพอใหเกดคาใชจายนอยทสด ซงแนวทางในการวเคราะหปญหามรปแบบโดยวธการจ าลองเรยงล าดบของปญหาจากทมความซบซอนนอยไปยงปญหาทมความซบซอนมาก ซงสามารถอธบายรายละเอยดไดดงน

2.5.1 การจดเสนทางเดนรถขนสงสนคาแบบเสนทางเดยว (The Single Traveling Salesman Problem: STSP) เปนปญหาการจดเสนทางเดนรถระดบงายสดเนองจากเปนการจดล าดบการขนสงสนคาแบบใชเสนทางเดนรถทางเดยวเพอขนสงสนคาใหกบลกคาตามจดตางๆโดยรถบรรทกจะเดนทางออกจากศนยกระจายสนคาเดยว ไมมขอจ ากดทางดานเวลา และขนาดความจบรรทกของรถ ซงผลลพธของเสนทางทจดไดจะเรมตนเดนทางผานจดของลกคาแตละรายเพยงครงเดยว และเดนทางวนรอบมาสนสดทศนยกระจายสนคาเชนเดม ดงตวอยางแสดงในภาพท 2.3

ภาพท 2.3 ผลลพธการจดเสนทางเดนรถขนสงสนคาแบบเสนทางเดยว (STSP)

2.5.2 การจดเสนทางเดนรถขนสงสนคาแบบหลายเสนทาง (The Multiple Traveling Salesman Problem: MTSP) เปนปญหาทมความซบซอนมากยงขนซงการจดล าดบการขนสงสนคาแบบใชเสนทางหลายเสนทางเพอขนสงสนคาใหกบลกคาตามจดตาง ๆ โดยจะเดนทางออกจากศนยกระจายสนคาเดยว ไมมขอจ ากดทางดานเวลาและขนาดความจบรรทกของรถ ซงผลลพธของเสนทางทจดได ดงตวอยางแสดงในภาพท 2.4

ภาพท 2.4 ผลลพธการจดเสนทางเดนรถขนสงสนคาแบบหลายเสนทาง (MTSP)

Page 22: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

14

2.5.3 การจดเสนทางเดนรถขนสงสนคาแบบคลาสสค (The Classical Vehicle Routing Problem: CVRP) ปญหาในระดบนเปนการหาจ านวนเสนทาง และการจดล าดบการขนสงสนคาใหกบลกคาตามจดตางๆ โดยจะเดนทางออกจากศนยกระจายสนคาเดยวซงรบทราบความตองการสนคาของลกคาแตละรายภายใตขอจ ากดทางดานเวลาและขนาดความจบรรทกของรถทก าหนดไว ดงตวอยางแสดงในภาพท 2.5

ภาพท 2.5 ผลลพธการจดเสนทางเดนรถขนสงสนคาแบบคลาสสค (CVRP)

2.6 เทคนคการหาค าตอบ 2.6.1 วธหาค าตอบโดยใชแบบจ าลองทางคณตศาสตร เปนการน าเอาปญหาทเกดขนจรงมาสรางเปนสมการแบบจ าลองขน โดยจะมการสรางแบบจ าลองในสวนทเปนสมการ วตถประสงคและสวนทเปนขอจ ากดเพอน าไปใชในการแกปญหาซงสามารถใชคนหรอคอมพวเตอรในการแกไขปญหาได แตในการใชคนกรณทปญหาทมตวแปรมากอาจจะท าใหไมสามารถหาค าตอบทดไดดงนนการใชคอมพวเตอรชวยนนจะท าใหสามารถรองรบปญหาทใหญไดและใชเวลาในการหาค าตอบเรวกวาการใชคน อยางไรกตามการหาค าตอบโดยใชวธการทางคอมพวเตอรจะไดค าตอบทใกลเคยงกบค าตอบทเหมาะสมทสดแตยงใชเวลาในการหาค าตอบทนานถาตวแปรเยอะมากเวลาในการหาค าตอบจะทวคณขนไปตวอยางของวธการแกปญหาโดยใชแบบจ าลองทางคณตศาสตร ของการจ าลองเสนทางแบบปญหา VRP ดงน

Page 23: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

15

ก าหนด n = จ านวนต าแหนง k = จ านวนรถบรรทก (k =1, f, NV)

พารามเตอร NV = จ านวนของรถบรรทก Ck = ความจของรถบรรทก k Qi = ปรมาณ ความตองการ ท จด I dij = ระยะทาง ทสนทสด จากจด i ถง j pij = เวลาเมอถงจด I tij = เวลาขนสงสนคาจากจด i ถง j Tk = เวลาสงสดทอนญาต สาหรบรถบรรทก k

ตวแปร XK

ij = รถบรรทก k เดนทางจากจด i ถง j XKip = รถบรรทก k เดนทางจากจด i

ถง p XK

pj = รถบรรทก k เดนทางจากจด p ถง j

X = matrix Xij =

nv

k

jikx

1

ก าหนดการเชอมตอของเสนทาง

U i , U j = ตวสรางขนเพอปองกนไมให Sub-tour ทจด i และ j ตามล าดบ S= {(Xij) :

qi

qi

xij 1 ,} ส าหรบชด Q ทเหมาะสม

ฟงกชนวตถประสงคอาจจะเปนอยางใดอยางหนงลดระยะการขนสงรวมหรอลดผลรวมของระยะทางทขนสงทงหมดและเวลาการขนสงทงหมดกรณแรก ; ลดระยะทางทขนสงทงหมด Minimize

Z = xdk

ij

nv

k ij

n

j

n

i

111

(1.1) Subject To

n

j 1x

k

ij

nv

k

1

= 1 j = 2,……., n

(1.2) xk

ij

nv

k

1

= 1 i = 2,……, n

(1.3)

n

i

k

ipx1

- xk

ij

nv

k

1

=0 p = 1,……., n ; k=1,…….,NV

(1.4)

n

j

k

iji

n

i

xQ11

< Ck k = 1,…….,NV

(1.5)

n

j

k

iji

n

i

xp11

+

n

j

k

iji

n

i

xt11

< Tk k = 1,…….,NV

Page 24: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

16

(1.6) xk

j

nv

i1

2

< 1 k = 1,…….,NV

(1.7) xk

i

nv

i1

2

< 1 k = 1,…….,NV

(1.8) Xkij = 0 k = 1,…….,NV ; i = j where { j=1

i=1 (1.9) U I = U j + Sxk

ij < S – 1 i j ; i = 2 ,…….n ; j = 2 ,….,n ; k = 1,….,NV (1.10)Xk

ij {0,1} เงอนไขท 1.1 ตนทนการเดนทางจากจด i ไปจด j โดยยานพาหนะ K โดยใชคาใชจายนอยทสด เงอนไขท 1.2 เงอนไขประกนวาจด j ใดๆ จะไดรบการเดนทางผานโดยยานพาหนะใดๆ อยางนอย 1 ครงโดยใชเสนทางทผานมาจากจด i ใดๆ เงอนไขท 1.2 และ 1.3 ก าหนดวารถขนสงสนคาสามารถเขาถงแตละจดทตองสงสนคาใหกบลกคาแตละรอบ เงอนไขท 1.4 เงอนไขการสงสนคาใหกบลกคารายหนง ๆ จะเดนทางเขาและออกเทากน (1 ครง) เงอนไขท 1.5 เงอนไขประกนวายานพาหนะใด ๆ จะขนสงสนคาไปสงใหกบลกคาไมเกนจ านวนทสามารถบรรทกได เงอนไขท 1.6 เงอนไขทแสดงใหเหนวา ผลรวมของเวลาในการประมวลผลทงหมดและเวลาในการขนสงทงหมดไมเกนเวลาทไดรบอนญาตใหรถแตละคนในแตละรอบ เงอนไขท 1.7 เงอนไขทแสดงใหเหนวารถบรรทกหนงคนสามารถออกจากศนยกระจายสนคาไดเพยงครงเดยว เงอนไขท 1.8 เงอนไขทแสดงใหเหนวา รถบรรทกสามารถสงของไปยงลกคา ไดเพยงครงเดยว เงอนไขท 1.7 และ 1.8 เงอนไขทแสดงใหเหนวารถบรรทกสามารถออกและสงของใหกบลกคา เพยงครงเดยวในแตละรอบ เงอนไขท 1.9 เงอนไขเพอปองกนไมใหรถบรรทกไปสงสนคายงจดเดมเงอนไขท 1.10 เงอนไขเพอปองกนไมใหเกดทวรยอย (Sub tour) เงอนไขท 1.11 เงอนไขทแสดงใหเหนวา ตวแปรทงหมด X สามารถเปน 0 หรอ 1 2.6.2 วธการหาค าตอบโดยใชวธฮวรสตก เปนวธการทอาศยการก าหนดกฎเกณฑบางประการขนมาโดยใชสามญส านกของมนษยเขาชวยในการแกปญหา เพอหาค าตอบทดและเหมาะสมในระดบหนงถงแมไมใชค าตอบทดทสด แตสามารถใหค าตอบไดภายในเวลาทเหมาะสมไมนานเกนไปรปแบบการแกไขปญหาและการคนหาค าตอบเปนวธการทคดอยางมเหตผลตามประสบการณและความสมเหตสมผลทมการพฒนามานานกวา 20 ป วธการแกไขปญหาจะถกพฒนาการตามระดบความยากงาย ของปญหาโดยมการน าสามญส านกของมนษยผนวกเขากบแบบจ าลองทางคณตศาสตร เทคนคการหาค าตอบดวยวธฮวรสตกสเปนแนวทางทพยายามลดความซบซอนของปญหาดงนน วธฮวรสตกสจงมรปแบบในการแกปญหาทคอนขางยดหยนอยางมาก สงผลใหในปญหาหนงๆอาจมวธในการแกปญหาแบบฮวรสตกสทแตกตางๆกนมากมายหลายวธและแมวาวธฮวรสตกสจะไดรบผล

Page 25: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

17

เฉลยทดทสด แตวธนกมจดเดนอยทความรวดเรวในการค านวณผลเฉลย เทคนคการแกปญหาดวยวธฮวรสตกสสามารถแบงวธการวเคราะหเพอหาค าตอบได 2 กลม คอ

1) กลม Classical heuristics 2) กลม Metaheuristics

เทคนคทนยมใชส าหรบการจดเสนทางเดนรถกลม Classical heuristics

1) Saving หรอ Insertion Procedure เปนวธการรวมจดสงสนคาจดอนๆเขาไวในเสนทางหลกแทนการจดสงสนคาเปน 2 เสนทาง การรวมจดสงท าใหเกดการประหยดในการเดนทาง คาการประหยด Saving จากจดสงสนคาจดท 2 มารวมกบเสนทางหลกของลกคาจดท 1 ดงแสดงในภาพท 2.6

ภาพท 2.6 แสดงวธการรวมจดสงสนคาโดยวธ saving: Clark and Wright saving

ทงนคาการประหยดอาจพจารณาจากคาขนสง ระยะทางหรอคาอนๆ ตามแตความเหมาะสมอกทงควรพจารณาความเปนไปไดของเสนทางใหมในกรณทมการสงสนคาดวยวธการรวมจดสงวาสามารถจดสงสนคาไดตามสภาพความเปนจรงหรอไม

2) Sweep Approach เปนวธการหาจ านวนเสนทางและล าดบการสงสนคาโดยการแบงเสนทางเปนพนทรบผดชอบดวยการหมนเสนสมมตในทศทางทวนเขมนาฬกาและรวมปรมาณสนคาทเสนดงกลาวผานรานตางๆ จนกระทงหมนเสนครบรอบ หลงจากนนจงใชเทคนคการแกปญหา TSP ส าหรบแตละคน แตอยางไรกตามวธการนอาจมขอบกพรอง คอ ถาศนยกลางคาไมไดอย ณ ศนยกลางของพนทใหบรการ จะท าใหรปรางของเสนทางการเดนรถมขนาดไมสมดล และท าใหระยะเวลาในการเดนทางของรถแตละคนมากกวาวธการอนๆ นอกจากนแลววธการแบบนไมไดค านงถงลกษณะการวางแนวของถนนท าใหรานคาทอยในถนนเดยวกน อาจจะอยคนละเสนทางกไดซงไมถกตองกบความเปนจรง

Depot a

2 1

D a2 D a1

1 2

D a1 D a2

Depot a

Page 26: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

18

ภาพท 2.7 การแกปญหาโดยวธ Sweep Approach

3) Cluster Fist – Route Second เปนการหาเสนทางในการเดนรถโดยแบงพนทความรบผดชอบในการสงสนคากอน หลงจากนนจงหาล าดบในการสงสนคาในลพดบตอไป

4) Route First Second วธการนจะเรมจากการหาเสนทางเดนรถทเหมาะสมทผานลกคาทกราย ซงเรยกเสนทางนวา Giant Tour หลงจากนนจงแบงออกเปนเสนทางยอย ๆ เนองจากรถเพยงคนเดยวไมสามารถเดนทางไดครบทกจด ดงนนจงตองแบงเปนเสนทางยอยโดยค านงถงความจของรถ และขอจ ากดระยะทางเวลาการขนสง

5) Improvement หรอ Exchange Procedure เปนวธการในการปรบปรงเสนทางทมอยดวยการหาเสนทางทชวยลดคาใชจายในการขนสงจากการแลกเปลยนเสนทางทมอยแลว จนกระทงไมสามารถปรบปรงเสนทางได

6) Nearest Neighbor เปนวธการในการจดแบงคลาส เทคนคนจะตดสนใจ วาคลาสใดทจะแทนเงอนไขหรอกรณใหม ๆ ไดบาง โดยการตรวจสอบจ านวนบางจ านวน (“K” ใน K-nearest neighbor) ของกรณหรอเงอนไขทเหมอนกนหรอใกลเคยงกนมากทสด โดยจะหาผลรวม (Count Up) ของจ านวนเงอนไข หรอกรณตางๆส าหรบแตละคลาส และก าหนดเงอนไขใหมๆ ใหคลาสทเหมอนกนกบคลาสทใกลเคยงกนมากทสดในการน าเทคนคของ K-NN ไปใชในนนเปนการหาวธการวดระยะหางระหวางแตละ Attribute ในขอมลใหได และจากนนค านวณคาออกมา ซงวธนจะเหมาะส าหรบขอมลแบบตวเลข แตตวแปรทเปนคาแบบไมตอเนองนนกสามารถท าได เพยงแตตองการการจดการแบบพเศษเพมขน อยางเชน ถาเปนเรองของสจะใชอะไรวดความแตกตางระหวางสน าเงนกบสเขยว ตอจากนนเราตองมวธในการรวมคาระยะหางของ Attribute ทกคาทวดมาได เมอเราสามารถค านวณระยะหางระหวางเงอนไขหรอกรณตาง ๆ ไดจากนนเราเลอกชดของเงอนไขทใชจดคลาสมาเปนฐานส าหรบการจดคลาสในเงอนไขใหมๆ ไดแลวเราจะตดสนไดวาขอบเขตของจดขางเคยงทควรเปนนน ควรมขนาดใหญเทาไร และอาจตดสนใจไดดวยวาจะนบจ านวนจดขางเคยงตวมนไดอยางไร

Depot

Page 27: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

19

เทคนคทนยมใชส าหรบการจดเสนทางเดนรถกลม Metaheuristics 1) เทคนคการปรบปรงเสนทางดวยวธ 2 – OPT เปนเทคนคการปรบปรงเสนทางภายใน

เสนทางเดยวไมมการปรบปรงระหวางเสนทางโดยวธการปรบปรงคอการสลบล าดบจดสงสนคาซงในการเลอกสลบล าดบจดสงนนจะถกเลอกสลบครงละ 2 จดสง เพอท าการเปรยบเทยบผลลพธการจดเสนทางระหวางกอนปรบปรงและหลงปรบปรงเพอเลอกเสนทางทใหผลลพธทดทสดดงตวภาพท 2.8

1 2 3 4 5 6 7 8 1 1 3 2 4 5 6 7 8 1

ภาพท 2.8 เทคนคการปรบปรงเสนทางดวยวธ 2 – OPT

2) เทคนคการปรบปรงเสนทางดวยวธ 3 – OPT เปนเทคนคการปรบปรงเสนทางเดยวทมความคลายคลงกบเทคนคการปรบปรงเสนทางดวยวธ 2 – OPT แตการสลบล าดบจดสงนนจะถกเลอกสลบครงละ 3 จด วธนจะเกดการสลบล าดบครงละ 3 จด เพอใหเกดเสนทางใหมทใหผลลพธของการจดเสนทางทดขน แสดงดงภาพท 2.9

1 2 3 4 5 6 7 8 1 1 3 4 2 5 6 7 8 1

ภาพท 2.9 เทคนคการปรบปรงเสนทางดวยวธ 3 – OPT

3) เทคนคการปรบปรงเสนทางดวยวธ Genetic Algorithm เปนวธการคนหาและ

แกปญหาทเหมาะสมทสด โดยพฒนาและจ าลองมาจากกระบวนการทางพนธกรรม คอ ทฤษฎการอยรอดของสงมชวต Genetic Algorithm เปนทางเลอกทใชแกปญหาทดเพราะวธการใชแกปญหาเปนวธการแบบสมและชวยแกปญหาทมขนาดใหญและซบซอน ไดเนองจากมคณสมบตการเลยนแบบการถายทอดทางพนธกรรมตามธรรมชาต ซงจะน าคาทเหมาะสมทสดจากประชากรรนกอนมาใชในการพจารณาในการหาค าตอบของประชาชนรนถดมาซงจะถายทอดลกษณะทางพนธกรรรมจากบรรพบรษไปสรนลกหลานโดยใชคา Fitness Function ทสอดคลองกบ Objective Function ในการพจารณาหาค าตอบโดยมการพจารณาวา โครโมโซมใดควรทจะน ามาสบพนธ หรอไมควรน ามาสบพนธ จะท าใหสามารถหาค าตอบทมคาสงสดหรอต าสดทสมบรณไดโดยการถายทอดลกษณะทางพนธกรรมจะมกระบวนการทท าใหเกดการเปลยนแปลงทเรยกวา ววฒนาการ นนคอกระบวนการ Selection , Crossover , Mutation โดยค านวณหาคาความเหมาะสม Fitness Function

Page 28: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

20

ทสอดคลองกบวตถประสงคของปญหา Objective Function ก าหนดใหกบโครโมโซมแตละตวน าไปสกระบวนการคดเลอก แตบางปญหาไมสามารถทจะค านวณหาคาเพอใหไดคาความเหมาะสม ทตรงกบความจรงทโครโมโซมนนควรจะไดรบและสงนจงท าใหเกดปญหาขน ดงนนในการก าหนดคาความเหมาะสมของโครโมโซมแตละตว จงเปนสงทส าคญ

4) เทคนคการปรบปรงเสนทางดวยวธคนหาตองหาม Tabu Search เปนวธการคนหาค าตอบแบบเมตาฮวรสตก (Meta-Heuristics) ซงเปนวธทนยมมากในการน ามาแกปญหาทไมเปนโพลเมยล (NP-Problem) เชนปญหาการก าหนดเสนทางการขนสงรถบรรทก หรอปญหาการจดตารางการผลต เปนการยากทจะหาค าตอบทเหมาะสมทสด (OPTimal Solution) โดยเฉพาะอยางยงเมอปญหานนมขนาดใหญ (NP-hard) การหาค าตอบทเหมาะสมทสดอาจใชเวลาในการค านวณมากหรอเปนไปไมไดทหาค าตอบทเหมาะสมทสด วธการคนหาค าตอบแบบเมตาฮวรสตกจงถกน ามาใชในการแกไขปญหาเพราะใชเวลาในการค านวณนอยกวามาก อกทงค าตอบทไดจากวธเมตาฮวรสตกกสามารถยอมรบไดในการน าไปใชงานจรงดงนนการใชวธการคนหาค าตอบแบบเมตาฮวรสตก (Meta-Heuristics) หลาย ๆ วธไดถกน ามาประยกตใชในการแกไขปญหาตางๆอยางแพรหลาย

5) เทคนคการปรบปรงเสนทางดวยวธการอาณานคมมด Ant Colony OPTimization เปนวธทไดแรงบลดาลใจมากจากพฤตกรรมของมดทออกไปหาอาหาร โดยมดจะเดนทางจากรงไปสแหลงอาหารและกลบทรงอกครงหลงจากไดอาหารแลวในระหวางเดนทาง มดจะปลอยสารเคมทมชอวาฟโรโมน เพอใหมดตวอนๆเดนทางตามกลนหรอรองรอยของฟโรโมนนน ๆ เมอระยะเวลาผานไป ฟโรโมนนสามารถจะระเหยไปไดตามคณสมบตทางเคม ดงนนระยะทางทยาวเกนไปจะท าใหฟโรโมนระเหยหมดระหวางเดนทาง ในขณะเดยวกนหากระยะทางสนจะท าใหมโอกาสเพมฟโรโมนในขณะเดนทางไปกลบไดกอนทฟโรโมนจะระเหย เมอมการเดนทางของมดหลายๆตวหรอมการเดนทางหลายๆรอบ จะท าใหฟโรโมนเพมความเขมขนขนเรอยๆในทางตรงขามกบเสนทางเดนทมระยะยาวกวา จะมแรงดงดดหรอระดบความเขมขนของฟโรโมนมความเจอจางและไมดงดดมดตวอน ๆ ในทสด

6) เทคนคการปรบปรงเสนทางดวยวธการจ าลองการอบเหนยว Simulated Annealing เปนทฤษฎทจ าลองมาจากกลศาสตรสถต ซงเปนการศกษาถงลกษณะโครงสรางทางกายภาพโดยรวมของสสาร ซงจะมอะตอมประกอบอยเปนจ านวนถง 1023 หนวยตอลกบาศกเซนตเมตร โดยลกษณะพฤตกรรมตางๆ จะแสดงออกมาตามแรงกระตน และการเปลยนแปลงอณหภมท ไดรบจงเปรยบเสมอนเปนการหาคาเฉลยของผลทเกดขนจากทก ๆ อะตอมในระบบโดยรวบรวมจากคาสถตทเกดนนเอง ซงปญหากลศาสตรสถตในขนตอนสดทายจะมการศกษาถงผลกระทบตอระบบขณะทอณหภมเขาสสถานะพนฐาน ซงเปนชวงทพลงงานของระบบมคาต าสด โดยกระบวนการแอนนลลง Annealing จะประกอบไปดวยขนตอนตางๆดงน

Page 29: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

21

1. ท าการหลอมระบบ (Melting) ระบบในครงแรกดวยอณหภมทสง 2. ท าใหอณหภมลดต าลงอยางชาๆ โดยลดตามตารางอณหภม Annealing 3. ขณะทอณหภมใกลเคยงกบจดเยอกแขง ใหคงสภาพนนไวในชวงระยะหนง

โดยในแตละชวงของการลดอณหภมใหต าลงนกระบวนการ Annealing จะตองจดสรรเวลาทนานพอทจะท าใหระบบเกดภาวะสมดล หรอเรยกวาภาวะเสถยรและเมอระบบเกดภาวะเสถยรในแตละชวงอณหภมจนกระทงพบวาไมมการพฒนาผลลพธทไดอกแลว ซงแสดงถงระบบไดเขาสสถานะพนฐานแลวระบบกจะท าการหยดลง Metropolis, et.al. 1953 ไดแนะน าวธ มอนตค ารโล เพอใชในการศกษาพฤตกรรมของอะตอม ขณะเขาสสภาวะสมดลทอณหภมตางๆ ซงมขนตอนดงน

1. ก าหนดรปรางของสวนประกอบของกลศาสตรสถต 2. การยายต าแหนงของสวนประกอบตางๆ และค านวณหาผลของการเปลยนแปลงของ

พลงงาน 3. ผลการเปลยนแปลงพลงงาน E หรอ ทเกดจาก Eold – Enew นอยกวาศนยแสดงวา

เกดการเปลยนแปลงพลงงานทเพมขนเปนสงทดตอระบบ ดงนนใหยอมรบการยายต าแหนงของอะตอมท เกดขน และน าไปเปนรปรางของระบบใหมในขนตอนตอไป แตหากพบวาผลการเปลยนแปลงพลงงาน E มากกวาหรอเทากบศนยแสดงถงการเปลยนแปลงพลงงานทลดลงใน

ทศทางทไมด จะยอมรบการยายต าแหนงทเกดขนดวยความนาจะเปน P E = e (- E : KbT) โดย

e แทน ฟงกชนเอกโปเนนเชยล T แทน อณหภม Kb แทน คาคงทของโบลสแมน วธมอนตค ารโล วธการนจะมการสมตวอยางเพอใชในการจ าลองสถานการณทเกยวของกบการเปรยบเทยบคา P E ดวยตวเลขสมทแจกแจงแบบยนฟอรมในชวง (0,1) ท าใหมโอกาสในการ

ยอมรบการยายต าแหนงของอะตอมทเกดขนในระบบ และท าใหพลงงานของระบบเพมขน แทนการปฏเสธการยายต าแหนงของอะตอมนน กระบวนการตางๆ เหลานจะด าเนนการไปเพอใหระบบเขาสสภาวะสมดล ณ อณหภมปจจบนจากนนจะท าการลดอณหภมลงตามตารางอณหภมแอนนลลงจนกระทงระบบถงสถานะพนฐาน ซงมพลงงานในระบบต า Kirkpatrick และคณะ ไดกลาวถงซมเลทแอนนลลงไววาเปนการหาค าตอบโดยการประมาณซงเกดจากการน าสองทฤษฎมาเชอมกนระหวาง ทฤษฎทางกายภาพในการอบออนของวสดแขง รวมกบทฤษฎทางการหาค าตอบทดทสดแบบการรวม โดยซมเลทแอนนลลงจะเรมตนจากการกลอม

Page 30: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

22

ระบบในครงแรกดวยอณหภมทสงจากนนจะท าการลดอณหภมลงอยางชาๆ จนกระทงจดเยอกแขงและไมเกดการเปลยนแปลงใดๆ ขนอกภายในระบบ ในแตละชวงอณหภมทมการเปลยนแปลงน กระบวนการจะตองจดสรรเวลาทนานพอทจะใหระบบเกดสภาวะเสถยร ซงลกษณะการเกดสถานะเสถยรจะประยกตมาจากการหาค าตอบทดทสดดวยวธการรวม ทไดกลาวไวในขนตน คอ ระบบการจดเรยงรปแบบใหม จนกระทงพบวาการจดเรยงใหมนมการพฒนาทดขน ระบบกจะน าการจดเรยงใหมทไดดงกลาวมาเปนจดเรมตนในการด าเนนการใหม ซงระบบจะด าเนนการอยางตอเนองจนกระทงพบวาไมมการพฒนาผลลพธทไดแลวระบบกหยดตวลง ขนตอนของ Simulated Annealing ขนตอนของการหาคาทดทนอยทสด Simulated Annealing จะเรมตนจากการสรางผลลพธโดยอาจจะเกดจากการสมตวอยางขนมาหรอผานกระบวนการทางเลอกทางฮวรสตกสทวไป จากนนระบบจะพจารณาถงการเปลยนแปลงพลงงานภายในระบบ E (Eold – Enew ) หรอ ซง

ขอก าหนดของ E ( ) E >=0 แสดงถงพลงงานใหมมนอยกวาของเดมสงผลการเปลยนแปลง

พลงงานลดลง ระบบจะยอมรบวาไดค าตอบทดกวาดงนนผลลพธกจะถกใชเปนจดเรมตนในขนตอนถดไป แตถา E < 0 แสดงถงพลงงานในระบบเพมขนหรอหมายถงค าตอบกอนหนามคามากกวา

ครงกอนหนา วธการทางความนาจะเปนจะเขามาเกยวของในการประเมนโดยระบบจะท าการสมตวเลขทมการแจกแจงแบบยนฟอรม ขนมาเปรยบเทยบ P E ซง P E จะมคาเทากบ e (- E :

KbT) หรอ e ( : KbT) ซงถกเรยกอกนยหนงวาการแจกแจงแบบโบลสแมน ถากรณตวเลขทสมขนมานอยกวา P E ผลลพธเดมกจะถกน าไปใชเปนจดเรมตนในขนตอนถดไป ระบบจะท าการด าเนนการ

จนกระทงไมพบค าตอบทดไปกวาทหาไดระบบกจะท าการหยดลง 2.7 ระบบสารสนเทศทางภมศาสตร ระบบสารสนเทศทางภมศาสตร คอ ระบบการทางานทผสมผสานกนระหวางฮารตแวร ซอฟแวร และขอมลตางๆ เชน ขอมลทไดจากการถายภาพ หรอภาพถายดาวเทยมรวมถงการรวบรวม การบรหารจดการ การวเคราะห และการแสดงรปแบบขอมลทางแผนทตาง ๆ เขาดวยกน ซงจะชวยใหมองเหน และเขาใจภาพรวมทงหมดทแสดงออกมาผานภาพ แผนท และรายงานตางๆ ไดอยางทวถง ไมเพยงเทานระบบ GIS ยงสามารถตอบค าถามทตองการไดอกดวย ทงนระบบ GIS สามารถน ามาผสมผสานและประยกตใชไดกบทกหนวยงาน ซงนบวามอรรถประโยชนมากหากน าใชใหถกวธนนเอง

Page 31: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

23

ภาพท 2.10 ระบบสารสนเทศทางภมศาสตร

การเกดขนครงแรกของ GIS ไดถอก าเนดขนในป ค.ศ. 1960 ณ แถบอเมรกาเหนอ โดยหนวยงาน Canada Geographic Information System ในประเทศแคนนาดา ซงเหตผลในการจดตง GIS ขนนน เนองจากแคนาดาตองการรายไดหลกทางเศรษฐกจ ซงตองอาศยทรพยากรทางธรรมชาตเปนจ านวนมาก ภาระหนาทหลกของหนวยงานดงกลาว คอ การส ารวจเพอการวางแผนด าเนนการ เกยวกบทรพยากรปาไม แรธรรมชาต แหลงทอยอาศย แหลงน า โดยการทางานในระยะเรมตนยงมขอจ ากดทางดานเทคนคหลายประการ เชน - ขอมลทมปรมาณมากเกนไป - คอมพวเตอรทมก าลงและประสทธภาพไมเพยงพอ - เครองพมพสามารถพมพไดแคอกษร และเสนตรงเทานน - ปอนขอมลทางดาน Graphic ไมได - ระบบไมสามารถท าการวเคราะหขอมลได จนกระทงในชวง ค.ศ. 1980-1990 GIS มการพฒนามากขน เนองจากเรมมการเลงเหนถงความส าคญของ GIS กนมากขน รวมทงมปจจยความกาวหนาทางพฒนาการคอมพวเตอร และระบบการเชอมโยงเครอขายขอมล (Networking) การพฒนาทางเทคโนโลยทางคอมพวเตอรนเอง จงท าใหการจดเกบขอมลในระบบสามารถจไดมากขน สามารถมองภาพรวมและองคประกอบตางๆ ของพนทในภาพรวมไดงายขน นอกจาก GIS จะสามารถผลตแผนทไดอยางสวยงามและมการแสดงผลผานจอแสดงผลแลว GIS ยงสามารถสอบถามขอมลและวเคราะหขอมลผานแผนทบนระบบคอมพวเตอร รวมทงสามารถเรยกคนขอมลมาดไดหลายขอมลพรอมกนจากการแสดงผลเปนชน ขอมล (Layer) ท าใหงายตอการวเคราะห และประมวลผลทมการพฒนาเรอยมาจนถงปจจบน

GIS มาจากค าวา GEOGRAPHIC INFORMATION SYSTEM หรอแปลเปนภาษาไทยวา �ระบบ

สารสนเทศภมศาสตร � ซงหมายถง กระบวนการทางานเกยวกบการจดเกบขอมลในเชงพนท

Page 32: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

24

(spatial data) ดวยระบบคอมพวเตอรโดยการก าหนดขอมลเชงบรรยาย (attribute data) เพอน ามาประมวลผล หรอวเคราะหท าแบบจ าลองตาง ๆ และแสดงผลในรปของขอมลเชงพนท เพอน ามาใชสนบสนนในการตดสนใจแกปญหา การวางแผนทซบซอน เชน ทอย บานเลขท ทมความสมพนธกบต าแหนงในเชงพนท เชน ต าแหนง เสนรง เสนแวง ในรปของตารางขอมล และฐานขอมล หรอจะเรยกใหเขาใจงาย ๆ วา smart map นนเอง ระบบสารสนเทศภมศาสตร เปนโปรแกรมทสามารถน าไปใชในการสรางและวเคราะหขอมลรปทรงสณฐานของวตถทกอยางบนพนผวโลก (Spatial) เกยวกบระบบแผนทภาพถายทางอากาศและแผนผงตางๆ ของลกษณะภมประเทศทงทเกดขนเองตามธรรมชาตและทมนษยสรางขน สงเหลานสามารถแปลและถอดออกมาเปนรหสอเลกโทรนกส ซงสามารถเรยกออกมาใชงาน เพอแกไขและวเคราะหขอมลได แตจากการส ารวจอตราสวนในการน าไปใชประโยชนถอวา ประสบผลส าเรจคอนขางสงมากในปจจบน เพราะมพฒนาการทเจรญกาวหนาทางเทคโนโลย อกทงยงมการน ามาประยกตใชใหเขากบความตองการและการทางานของแตละหนวยงาน ในกระบวนการการทางานของ GIS จ าเปนตองใชคอมพวเตอรฮารดแวร (Hardware) ซอฟตแวร (Software) ขอมลทางภมศาสตร (Geographic Data) และการออกแบบ (Personnel Design) ในการเสรมสรางประสทธภาพของการจดเกบขอมล การปรบปรงขอมล การค านวณ และการวเคราะหขอมล ใหแสดงผลในรปของขอมลทสามารถอางองไดในทางภมศาสตร กลาวงาย ๆ คอ การใชสมรรถนะของคอมพวเตอรในการจดเกบและการใชขอมลเพออธบายสภาพตางๆ บนพนผวโลก โดยอาศยลกษณะทางภมศาสตร เปนตวเชอมโยงความสมพนธระหวางขอมลตางๆนนเอง เนองจาก GIS ใชกลองดาวเทยมในการทางาน จงมสวนชวยใหการทางานของ smart map มประสทธภาพในการทางานสง สามารถน าไปประยกตใชไดกบทกหนวยงาน เชน ชวยใหตรวจสอบถงลกษณะของพนทนนๆ ไดอยางละเอยด ในมมมองทกวางขนอกดวย หรอการแสดงภาพเหตการณนน ๆ ในปจจบน ดงนนจะเหนไดวา GIS นนมประสทธภาพในการทางานมาก สามารถน ามาประยกตใชและเปนประโยชนตอหลายหนวยงานอกดวย เชน การตรวจสอบพนททยากตอการเขาถง นอกจากจะชวยลดคาใชจายในการเดนทาง หรอแรงงานในการทางานแลว smart map ยงชวยเพมความถกตองแมนย า ไมเพยงเทาน ระบบ GIS ยงมประโยชนตอการวางผงเมอง ชวยในการวางแผนลวงหนา ทงระบบไฟฟา ประปา ทอน าทง บอบ าบดน าเสย ฯลฯ และมการแสดงผลทงายตอการท าความเขาใจอกดวย

Page 33: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

25

องคประกอบในการทางานของระบบ GIS ในการทางานของระบบ GIS จะมองคประกอบตาง ๆ ดงน

ภาพท 2.11 องคประกอบในการทางานของระบบ GIS

1. อปกรณคอมพวเตอร (hardware) หมายถง คอมพวเตอรและเครองตอพวงอน ๆ ทงเครองพมพ สแกนเนอร กลองถายรป ทมหนาทในการน าเขาขอมล ประมวลผล แสดงผล และผลตผลลพธของการทางาน 2. โปรแกรม (software) คอ กลมโปรแกรมส าเรจรปทตดตงบนระบบฮารดแวร เพอใหระบบสารสนเทศภมศาสตร สามารถทางานไดตามทไดรบการออกแบบไว โดยมโปรแกรมหลก คอ โปรแกรม WINDOW, UNIX โปรแกรมระบบสารสนเทศภมศาสตร เชน โปรแกรม ARC/INFO โปรแกรม PAMAP โปรแกรม INTERGRAPH, AutoCAD MAP, MAPINFO นอกจากนน อาจมโปรแกรมชวยงานตาง ๆ (Utilities) เชน โปรแกรมชวยจดการหนวยความจ า โปรแกรม Editor อกดวย ซงโปรแกรมตาง ๆ เหลาน จะประกอบดวยฟงกชน การทางานและเครองมอทจ าเปนตาง ๆ ส าหรบน าเขาและปรบแตงขอมล จดการระบบฐานขอมล เรยกคน วเคราะห และจ าลองภาพนนเอง 3. ขนตอนการทางาน (Methods) คอ วธการทองคกรนน ๆ น าเอาระบบ GIS ไปใชงานโดยแตละ ระบบ แตละองคกรยอมมความแตกตางกนออกไป ฉะนน ผปฏบตงานตองเลอกวธการในการจดการกบปญหาทเหมาะสมทสด ส าหรบของหนวยงานนน ๆ เอง ซงความส าเรจของการใชระบบจะขนอยกบแผนงานออกแบบ และการก าหนดขนตอนการปฏบตงาน เพอใหงานเปนไปตามขนตอน และมความนาเชอถอ ซงจะแตกตางไปตามความเหมาะสมของชนดงานนนเอง 4. บคลากร (people) คอ บคคลทมความรพนฐานทางดานคอมพวเตอร และทางดานภมศาสตร สามารถวเคราะห และออกแบบแผนทและแผนภมทเปนผลลพธของการวเคราะห เพอแสดงผลไดอยางถกตองตามมาตรฐานวาดวยวชาการออกแบบแผนท (Cartography) โดยจ าแนกบคลากรตามลกษณะงานดงน เชน พนกงานภาคสนาม พนกงานเตรยมขอมลและตนราง พนกงาน

Page 34: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

26

ปอนขอมล พนกงานวเคราะหขอมล และพนกงานออกแบบแผนท เปนตน ทงนบคลากรทเกยวของกบระบบสารสนเทศภมศาสตร ถอเปนองคประกอบทส าคญทสดในระบบ GIS เนองจากถาขาดบคลากรเหลาน ขอมลทมอยมากมายมหาศาลนน กจะเปนเพยงขยะไมมคณคาใดเลย เพราะไมไดถกน าไปใชงานนนเอง 5. ขอมล (data) แหลงขอมลของระบบสารสนเทศภมศาสตรทส าคญ ไดแก แผนทภมประเทศ มาตราสวน 1:50,000 รปถายทางอากาศ (Aerial Photographs) หรอ ภาพถายดาวเทยม (Satellite Imagery) นอกเหนอจากขอมลเชงพนทขางตนแลว ระบบสารสนเทศยงตองการขอมลเชงบรรยาย ทจะชวยขยายความดานรายละเอยดของขอมลเชงพนท ตวอยางของขอมลเชงบรรยาย ไดแก ชอของหมบาน จ านวนครวเรอน จ านวนประชากรชาย-หญง เปนตน แหลงทมาของขอมลเชงบรรยายอาจไดมาจากหนวยงานทเกยวของหรอไดมา จากการส ารวจขอมลภาคสนาม (Field Data Collection) กได ขอมลเชงบรรยายจะถกบนทกเกบในลกษณะของบนทก (Record) โดยแตละบนทกจะถกแบงยอยออกเปนชองสนาม (Field) ชองสนามแตละชองอาจถกก าหนดใหบนทกขอมลทเปนตวอกษร (Alphabetic) หรอ ขอมลทเปนตวเลข (Numeric) กแลวแตความเหมาะสมไมเพยงเทาน ขอมลตางๆ ทใชในระบบ GIS นนจะถกจดเกบในรปแบบของฐานขอมล โดยไดรบการดแลจากระบบจดการฐานขอมลหรอ DBMS ขอมลถอเปนองคประกอบทส าคญรองลงมาจากบคลากร ขนตอนการทางานของ GIS ในสวนของขนตอนการทางาน (Methods) คอ วธการทองคกรนน ๆ น าเอาระบบ GIS ไปใชงาน ซงจะแตกตางไปตามแตละองคกร ฉะนนผปฏบตงานตองเลอกวธการในการจดการกบปญหาทเหมาะสมทสดส าหรบของหนวยงานของตนเอง ทงนกเพอประโยชนและประสทธภาพทสงสดของหนวยงานนนเอง 1. การน าเขาขอมล (input) กอนทขอมลทางภมศาสตรจะถกใชงานไดในระบบสารสนเทศภมศาสตร ขอมลจะตองถกแปลงใหอยในรปของขอมลเชงตวเลข (digital format) กอน เชน จากแผนทกระดาษไปสขอมลในรปแบบดจตอลหรอแฟมขอมลบนเครอง คอมพวเตอรอปกรณทใชในการน าเขาเชน Digitizer Scanner หรอ Keyboard เปนตน 2. การปรบแตงขอมล (manipulation) ขอมลทไดรบเขาสระบบ บางอยางจ าเปนตองไดรบการปรบแตงใหเหมาะสมกบการใชงาน เชน ขอมลบางอยางมขนาด หรอสเกล (scale) ทแตกตางกน หรอใชระบบพกดแผนททแตกตางกน ขอมลเหลานจะตองไดรบการปรบใหอยในระดบเดยวกนเสยกอน 3. การบรหารขอมล (management) ระบบจดการฐานขอมลหรอ DBMS จะถกน ามาใชในการบรหารขอมลเพอการทางานทมประสทธภาพในระบบ GIS DBMS ทไดรบการเชอถอและนยมใช

Page 35: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

27

กนอยางกวางขวางทสดคอ DBMS แบบ Relational หรอระบบจดการฐานขอมลแบบสมพทธ (DBMS) ซงมหลกการทางานพนฐาน ดงนคอ ขอมลจะถกจดเกบในรปของตารางหลาย ๆ ตาราง 4. การเรยกคนและวเคราะหขอมล (query and analysis) เมอระบบ GIS มความพรอมในเรองของขอมลแลว ขนตอนตอไป คอ การน าขอมลเหลานมาใชใหเกดประโยชน เชน ใครคอเจาของกรรมสทธในทดนผนทตดกบโรงเรยน? ตองมการสอบถามอยางงาย ๆ เชน ชเมาสไปในบรเวณทตองการแลวเลอก (Point and click) เพอสอบถามหรอเรยกคนขอมล นอกจากนระบบ GIS ยงมเครองมอในการวเคราะห เชน การวเคราะหเชงประมาณคา (proximity หรอ buffer) การวเคราะหเชงซอน (overlay analysis) เปนตน 5. การน าเสนอขอมล (visualization) จากการด าเนนการเรยกคนและวเคราะหขอมล ผลลพธทไดจะอยในรปของตวเลขหรอตวอกษร ซงยากตอการตความหมายหรอท าความเขาใจ การน าเสนอขอมลทด เชน การแสดงชารต (chart) แบบ 2 มต หรอ 3 มต รปภาพจากสถานทจรง ภาพเคลอนไหว แผนท หรอแมกระทงระบบมลตมเดยสอตางๆ เหลานจะท าใหผใชเขาใจความหมายและมองภาพของผลลพธทก าลงน าเสนอไดดยงขนอกนนเอง จากทกลาวมาทงหมดขางตนนน แสดงใหเหนถงความหลากหลายในการน ามาใชงานของระบบ GIS ซงหลากหลายและมประโยชนรอบดานมาก ซงจะแบงออกเปนหวขอใหญๆ ดงน 1. การอนรกษละจดการสงแวดลอม (Environmental Management, Conservation) การจดการทางพชและสตวในดน (Flora and Fauna) สตวปา (Wild Life) อทยานแหงชาต (National Park) การควบคมและตดตามมลภาวะ (Pollution Control and Monitoring) และแบบจ าลองดานนเวศวทยา (Ecological Modeling) 2. การจดการดานทรพยากร/การเกษตร (Resources Management / Agriculture) การจดการระบบชลประทานท าการพฒนาและจดการทดนเพอการเกษตร การอนรกษดนและน า การจดการทรพยากรธรรมชาต ปาไม และการท าไม 3. การวางแผนดานสาธารณะภย (Disaster Planning) การบรรเทาสาธารณะภย การตดตามการปนเปอนของสารพษ และแบบจ าลองผลกระทบอทกภย (Modeling Flood Impacts) 4. ดานผงเมอง (Urban GIS) การวางแผนผงเมอง การใชประโยชนทดนสงปลกสรางตาง ๆ เชน ถนน เขอน คลอง เปนตน การตรวจสอบการเคลอนยายถนฐานของประชากร การเปลยนแปลงของการใชพนท การวางผงเมอง การวเคราะหดานอาชญากรรม ทดนและภาษทดน ระบบการระบายน าเสย โครงการพฒนาทอยอาศย ฯลฯ 5. การจดการสาธารณปโภค (Facilities Management) การจดการดานไฟฟา ประปา ทอสงกาซ หนวยดบเพลง ระบบจราจรและโทรคมนาคม

Page 36: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

28

6. การวเคราะหดานตลาด (Marketing Analysis) การหาทตง ทเหมาะสมในการขยายสาขา หรอส านกงาน 7. ดานการเดนทาง แสดงแผนท เสนทาง จดส าคญในการเดนทาง เปนประโยชนตอการทองเทยว 8. ดานประโยชนทางการทหาร 9. ดานสาธารณสข เพอดการแพรขยายของโรคระบาดตางๆ เชน ไขหวด 10. ดานโบราณคด จากประโยชนตางๆขางตนจะพบวา ในปจจบนกจกรรมตางๆ ลวนมความจ าเปนทจะตองใชประโยชนจากแผนท และระบบ GIS กเขามามบทบาทส าคญเพอประกอบในกานตดสนใจ จงอาจกลาวไดวา GIS เปนเครองมอส าคญส าหรบองคกร ตลอดจนผบรหารและจาหนาททกๆ สวน ซงสามารถมองภาพรวมของแผนทตางๆ และลกษณะองคประกอบของพนทไดอยางชดเจน จงงายตอการตดสนใจวางโครงการ หรอประกอบธรกรรมตางๆ ไดเปนอยางด ในปจจบน GIS ไดรบความนยมอยางแพรหลาย เพราะเปน IT ทมประสทธภาพในการทางานสง ชวยใหสามารถเหนภาพหรอพนทตาง ๆ ไดในมมกวางอยางชดเจน อกทงสะดวกตอการทางานและชวยใหการวเคราะหพนทตาง ๆ เปนไปอยางงายดาย เพราะไมจ าเปนตองออกเดนทางไปยงพนทนนๆดวยตนเอง หรอชวยอ านวยความสะดวกในกรณทเราตองออกเดนทางไปในทๆ ยากตอการเขาถง และมขอจ ากดดานเวลา หรอระยะทางในการเดนทาง เปนตน ดงนน GIS จงชวยลดตนทนในการเดนทางไดเปนอยางด พฒนาการของเทคโนโลยในปจจบน มสวนชวยสงเสรมใหการด าเนนงานตาง ๆ ไปเปนอยางสะดวกสบายมากขน จงไมแปลกท GIS จะไดรบความนยมและสามารถน ามาประยกตใชใหเขากบความตองการของแตละองคกร ดวยเหตนเอง GIS จงเปนทแพรหลายมากในประเทศทพฒนาแลว อกทงยงถกพฒนาความสามารถใหดและมประสทธภาพมากขนเรอย ๆ อยางไมหยดยง ดงนน ในอนาคตคาดวา GIS คงมระบบและขนตอนการท างานทงายและสะดวกสบายกบผทใชงานมากขน เพราะเทคโนโลยจะมความเจรญกาวหนาอยางตอเนอง และไดรบการพฒนาใหเปนประโยชนกบผใชโดยตรง มตวเลอกทชวยในการวเคราะหทางาน หรอตอบค าถามทเราสงสยไดมากกวาน สามารถแสดงภาพและลกษณะของพนทดงกลาวไดใกลเคยงความเปนจรง มราคาตนทนการใชทถกลง และยงสามารถน ามาประยกตใชงานไดอยางแพรหลายกบทก ๆ หนวยงานอกดวย

Page 37: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

29

2.8 Visual Basic เปนเครองมอในการสรางแอพพลเคชน (โปรแกรมประยกต) ทท างานภายใตระบบปฏบตการ Windows ซงแอพพลเคชนทไดจะมรปแบบการตดตอกบผใชเปนกราฟก (GUI: Graphic User Interface) วชวลเบสก จะใช Event (เหตการณ) เปนตวขบเคลอนค าสง (event-driven) หมายความวา โคดของโปรแกรม จะยงไมท าอะไร (idle) จนกวามนจะถกเรยกใหตอบสนองตอ event (เชน การคลกเมาส การกดปม การเลอกเมน ฯลฯ) นนคอจะไมมอะไรเกดขนจนกวา event จะถกตรวจพบเมอนนแหละ code ของโปรแกรมกจะตอบสนองตอ event นน ๆ ในลกษณะของโปรแกรมยอย ๆ หรอโมดล (event procedure) 2.9 กรณศกษา บรษทผใหบรการขนสงทางดานโลจสตกส กรณศกษาเปนบรษทขนสงสนคาจากโรงงานไปยงลกคาปลายทาง ไดเปดใหบรการกระจายสนคาไปยงโมเดรนเทรดโดยเรมเปนผใหบรการกระจายสนคาใหกบ บรษท บกซ ซปเปอรเซนเตอร จ ากด (มหาชน) และ บรษท สยามแมคโคร จ ากด (มหาชน) นบเปนจดเรมแรกของการน าระบบกระจายสนคาแบบ Cross dock มาใชในงานดานการขนสงเปนตนมาจนถงปจจบน หลงจากนนในป พ.ศ. 2552 ไดมการขยายธรกจการขนสงสนคาเขารานคาโชหวยทว เพอเพมศกยภาพในการกระจายสนคา เขารานคา 20 จงหวด ทวภาคอสานใหแขงแกรงยงขน นอกจากนยงขยายงานดานการบรหารคลงสนคา อยางเตมรปแบบเพอเปนผใหบรการดานโลจสตกสแบบครบวงจร การบรการของบรษทกรณศกษามดงน - บรการกระจายสนคาในรปแบบ Cross-Docking เขาโมเดรนเทรด (Makro , Big C , Big C-Extra,Tesco Lotus) - บรการขนสงสนคาจากจดหนงไปยงอกจดหนง (Door to Door) เชน การขนสงสนคาระหวางโรงงาน-คลงสนคา, โรงงาน-โรงงาน เปนตน โดยบรรทกสนคาเตมคนรถ - บรการกระจายสนคาไปยงรานคา (Traditional Trade) ทวประเทศ เชน HomePro , VILLA MARKET , TOPS Supermarket, FOODLAND, Big C Market, Big C Mini ,ไทวสด และหางฯ ทองถน ทวประเทศ - บรการธรกจ E-Commerce ทงในดานการใหบรการระบบคลงสนคา, แพคสนคา และระบบขนสง รวมถงระบบสารสนเทศ เพอลดคาใชจาย และเพมศกยภาพ ทางการแขงขนใหกบ ผขายสนคา - บรการจดสงสนคา และพสดดวนพเศษ (Express) ทครอบคลมทวประเทศ เปนตน

Page 38: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

30

2.10 งานวจยทเกยวของ ทวนนท สมะจารก และคณะ (2552) ไดน าเสนองานวจยเรองการลดคาใชจายในการขนสง กรณศกษาโรงงานเคมภณฑ เพอวเคราะหหาสาเหตของปญหาในการขนสงและหาแนวทางการลดคาใชจายการขนสงสนคา พบวาคาเชอเพลงเปนปญหาทท าใหตนทนของบรษทสง ซงมสาเหตมาจากปจจยภายใน คอ การก าหนดเสนทางทเปนมาตรฐานและปจจยภายนอก คอ อตราคาเชอเพลงในตลาดโลกทมความผนผวน คณะผวจยจงไดก าหนดเสนทางการขนสงสนคาแบบใหม โดยใชเทคนคการแกปญหาเสนทางแบบวธการแบบจ าลองการขนสง (Transportation model) และวธการแกปญหาการจดเสนทางส าหรบรถบรรทก (Truck routing) รวบรวมสนคาเพอจดเสนทางใหลกคาทมเสนทางการขนสงในทางเดยวกนรวมเขาดวยกน เพอลดจ านวนเทยวและระยะทางในการขนสงสนคา หลงจากนนน ามาเปรยบเทยบหาวธการทมคาใชจายต าสดและเหมาะสมทสดจากผลการด าเนนงานพบวาวธการแบบจ าลองการขนสงและวธการแกปญหาการจดเสนทางส าหรบรถบรรทกท าใหจ านวนเทยว ระยะทางในการขนสงสนคา คาน ามนเชอเพลง คาใชจายรวมทงหมด คดเปนเปอรเซนตทลดลงจากการด าเนนงานแบบเดม

วไลวรรณ แกนสาร และ สมบต สนธเชาน (2556) ไดศกษาการเปรยบเทยบวธการฮวรสตกส ส าหรบระบบการจดการขยะซงจดท าเพอแกปญหาในการลดตนทนตาง ๆ ทงทางตรงและทางออม พรอมทงเกดการลดตนทนคาใชจายไดเปนอยางดอกทงยงมวธการทเขาใจงายไมซบซอนโดยเนอหาใน งานวจยนไดบอกถงการประยกตวธการหาค าตอบโดยวธการ Saving heuristic , Nearest heuristic และ Max-Nearest เพอท าการเปรยบเทยบกนโดยพจารณาจากผลลพธทไดภายใตเงอนไขเดยวกน โดยมเงอนไขดงน ความสามารถในการบรรจทเทากน และ มเวลาเขามาเกยวของ ผลทดลองของ งานวจยนจะเหนวาวธ Saving heuristic ใหค าตอบทดทสดคอมระยะทางรวม 55.022 กโลเมตร และวธ Nearest heuristic ตอดวยวธ Max-nearest คอ 62.152 กโลเมตร และ 67.196 กโลเมตร ตามล าดบ ซงในปจจบนเสนทางในการเกบขยะจะมระยะทางรวมอยท 62.246 กโลเมตร ดงนนจาก การทดลองจะเหนวาวธ Saving และ Nearest สามารถลดระยะทางลงไดพรอมกบสามารถควบคม เวลาในการเกบขยะไดอกดวย

อตนช ลมปมณรกษ และนระเกณฑ พมชศร (2556) ไดศกษาการออกแบบระบบสารสนเทศส าหรบองคกรกลางใหบรการการขนสง เพอน าเสนอหนทางทสามารถลดความสญเสยทเกดขนในการขนสง โดยแบงการศกษาวจยออกเปน 3 สวน ไดแก 1.การน าเสนอแนวคดระบบองคกรกลางทไมมรถขนสงเปนของตนเองส าหรบบรการขนสง 2.การวเคราะหระบบ 3.การออกแบบระบบสารสนเทศ ซงในการเสนอแนวความคดและการออกแบบระบบสารสนเทศนจะเปนตนแบบการจดการรถทมความจเหลอใหสามารถเกดมลคาจากความจทสญเสยเปลา จากการศกษาถงการประสานความรวมมอในการขนสง การวางแผนการขนสงโดยจะชวยใหสามารถใชประโยชนจากความจทเหลอทมได

Page 39: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

31

สงสด และสามารถเปนตนแบบในการจดการรถทมความจเหลอใหสามารถเพมมลคาจากความจทสญเสยเปลาอนนาไปสการลดตนทนการขนสงได

วลลภ รตนถาวร และ สรง ปรชานนท (2553) ไดศกษาฮวรสตกส าหรบปญหาต าแหนงทตงศนยกระจายสนคาแบบพลวตโดยมขอจ ากดดานขนาด เพอท าใหคาใชจายรวมของการตอบสนองตอความตองการของลกคาตลอดชวงเวลาการวางแผนมคานอยทสด ดวยการจดตงศนยกระจายสนคาทเหมาะสม โดยจะพจารณาจากความตองการของลกคาวามลกษณะเปลยนแปลงไปตามเวลาและเปนฟงกชนของเวลา งานวจยนไดน าเสนอขนตอนวธการแกปญหาดวยวธการคนหาแบบท าบ โดยใชวธการประมาณเซตขางเคยงแทนวธการหาค าตอบทดทสด และวธการแกปญหาแบบพนธกรรม (GA) จากการทดสอบสมรรถนะของฮวรสตกทพฒนาขนสามารถสรปไดวา วธการคนหาแบบท าบจะใหประสทธภาพในดานเวลาในการหาค าตอบทดกวาขนตอนวธพนธกรรมในทกชนดของปญหา โดยเฉพาะอยางยงเมอจ านวนค าบเวลายอยในระยะเวลาการวางแผนของปญหาแบบพลวตเพมสงขน ดานคณภาพของค าตอบวธการคนหาแบบท าบจะใหคณภาพของค าตอบทดกวาขนตอนพนธกรรมเพยงเลกนอย

ไพโรจน แสนด และคณะ (2557) ไดศกษาเสนทางเดนรถในการเคลอนยายผประสบอทกภยออกจากพนทอนตรายเมอระดบน าสง กรณศกษา : ต าบลลาดสวาย อ าเภอล าลกกา จงหวดปทมธาน เพอใหไดเสนทางการเดนรถทมระยะทางในการอพยพรวมต าทสด โดยพนทกรณศกษาคดเลอกมาจากบรเวณทมปญหานาทวมรนแรงในป 2554 ไดแก ต าบลลาดสวาย อ าเภอลาลกกา จงหวดปทมธาน ซงมประชากร 46,921 คน โดยสดสวนผอพยพคดเปน 10% ของจ านวนประชากร แบงโซนในการอพยพออกเปน 6 โซน ซงการหาเสนทางทเปนค าตอบไดใชวธการแบงพนทออกเปนกลมกอนจดเสนทาง( Cluster – Firdt Route – Second ) และวธการเปรยบเทยบการประหยด( Saving Algorithm ) ผลการศกษาพบวาวธการเปรยบเทยบการประหยด ( Saving Algorithm ) ใหเสนทางการอพยพ เปนระยะทางรวม 909.39 กโลเมตรและมคาใชจายรวมเทากบ 9,093.90 บาท ในขณะทวธการแบงพนทออกเปนกลมกอนจดเสนทาง (Cluster –Firdt Route – Second ) ใหเสนทางการอพยพ เปนระยะทางรวม 1,442.73 กโลเมตรและมคาใชจายรวมเทากบ 14,427.30 บาท โดยวธการเปรยบเทยบการประหยด สามารถประหยดคาใชจายไดมากกวาวธการแบงพนทออกเปนกลมกอนจดเสนทาง ไดเทากบ 5,333.40 บาท

ทวนนท สมะจารก และคณะ (2552) ไดน าเสนองานวจยเรองการลดคาใชจายในการขนสง กรณศกษาโรงงานเคมภณฑ เพอวเคราะหหาสาเหตของปญหาในการขนสงและหาแนวทางการลดคาใชจายการขนสงสนคา พบวาคาเชอเพลงเปนปญหาทท าใหตนทนของบรษทสง ซงมสาเหตมาจากปจจยภายใน คอ การก าหนดเสนทางทเปนมาตรฐานและปจจยภายนอก คอ อตราคาเชอเพลงในตลาดโลกทมความผนผวน คณะผวจยจงไดก าหนดเสนทางการขนสงสนคาแบบใหม โดยใชเทคนคการ

Page 40: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

32

แกปญหาเสนทางแบบวธการแบบจ าลองการขนสง (Transportation model) และวธการแกปญหาการจดเสนทางส าหรบรถบรรทก (Truck routing) รวบรวมสนคาเพอจดเสนทางใหลกคาทมเสนทางการขนสงในทางเดยวกนรวมเขาดวยกน เพอลดจ านวนเทยวและระยะทางในการขนสงสนคา หลงจากนนน ามาเปรยบเทยบหาวธการทมคาใชจายต าสดและเหมาะสมทสดจากผลการด าเนนงานพบวาวธการแบบจ าลองการขนสงและวธการแกปญหาการจดเสนทางส าหรบรถบรรทกท าใหจ านวนเทยว ระยะทางในการขนสงสนคา คาน ามนเชอเพลง คาใชจายรวมทงหมด คดเปนเปอรเซนตทลดลงจากการด าเนนงานแบบเดม

อรประไพ จารพฒน และ ปวณา เชาวลตวงศ (2556) ไดศกษาฮวรสตกสส าหรบการจดเสนทางล าดบการสงสนคาของรถแตละคนจากจดปลอยรถแหงเดยวหรอหลายแหง เพอใหลกคาทกรายไดรบสนคาโดยปญหาการจดเสนทางมหลากหลายแตกตางกนไปตามวตถประสงคและขอจ ากด ส าหรบการจดเสนทางเดนรถตามลกษณะการเดนทางจะแบงออกเปน 2 ประเภทใหญๆ คอ 1. เสนทางเดนแบบปด คอ รถแตละคนตองออกและกลบมาสจดปลายรถเดม 2. เสนทางเดนแบบเปด คอ รถขนสงไมตองยอนกลบมายงจดปลอยรถหลงจากสงสนคาใหกบลกคารายสดทาย โดยไดน า วธฮวรสตกสมาใชในการจดเสนทางการขนสง คอ การจดแบบแทรกงาน (Insertion Heuristic) ซงการหาค าตอบของวธนในแตละรอบจะท าการคนหาวา งานขนสงทรอการจดลงเสนทางในแตละจดรบ-สงสามารถแทรกลงในเสนทางทจดคางอยไดต าแหนงใดบาง โดยพยายามแทรกบนเสนทางทท าใหเกดคาใชจายเพมขนนอยทสด และตองค านงถงขอจากดหลกของความจรถและเวลาในการสงมอบ

พลอยพรรณ ศรกจการ และ อรอไร แสงสวาง (2556) ไดศกษาเสนทางเดนรถขนสงเครองส าอาง โดยจดท าเพอปรบปรงประสทธภาพของการจดเสนทางการเดนรถซงไดปรบปรงเกยวกบวางแผนและออกแบบเสนทางเดนรถขนสงเครองส าอางของบรษทมารคอพคอสเมตค โดยท าการจดสงสนคาไปยงรานตวแทนจ าหนาย 20 ราน ในเขตกรงเทพฯ และปรมณฑล ปญหาของงานวจยนคอปญหาการเดนทางของพนกงานขาย (Traveling Salesman problem) ซงไดประยกตใชหลกเมตาวธฮวรสตกสโดยวธการจ าลองการอบเหนยว (Simulated Annealing) ในการแกปญหา เพอหาเสนทางทสนทสดในการเดนทางผานเมองทกๆเมอง เมองละหนงครงแลวกลบมายงจดเรมตน จากวธการหาค าตอบทใกลเคยงทสดซงเปนวธทใชในปจจบน โดยสงสนคาไปยงจดทใกลทสดกอน มระยะทางรวม 377.3 กโลเมตรตอวน บรษทจดสงสนคาทกวนศกรท 2 และวนศกรท 4 ของเดอน ในระยะเวลา 1 เดอน จะใชระยะทางการวงงานรวมทงสน 377.3 x 2 = 754.6 กโลเมตร และเมอใชวธการจ าลองอบเหนยว (SA) ในการออกแบบเสนทางเดนรถพบวา รถสามารถวงงานดวยระยะทางเพยง 347.8 กโลเมตรตอวน ดงนนในระยะเวลา 1 เดอน จะมระยะทางรวมทงสน 347.8 x 2 = 695.6 กโลเมตร ซงลดลงจากเดม 7.81 เปอรเซนต หรอ 59 กโลเมตรตอเดอน

Page 41: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

33

อภชต มณงาม และคณะ (2556) ไดศกษาการแกปญหาการจดเสนทางการเดนรถโดยมการจ ากดเวลาการเดนรถบรรทกขนาดใหญดวยวธฮวรสตกส ซงไดน าเสนอวธฮวรสตกสสาหรบหาค าตอบของปญหาการจดเสนทางการเดนในกรงเทพมหานครและปรมณฑล โดยพจารณาเงอนการจากดเวลาเดนรถบรรทกขนาดใหญในเขตเมอง เพอใหไดเสนทางการเดนรถทมตนทนรวมต าทสด โดยไดพฒนาวธการหาค าตอบเปน 3 ขนตอนตามล าดบดงน 1.จดกลมลกคาตามเงอนไขการจ ากดเวลาในการเดนรถ 2.สรางค าตอบเรมตนดวยวธเซฟวงอลกอรทม (Savings Algorithm) 3.น าค าตอบทไดจากขนตอนทสองมาปรบปรงเสนทางโดยวธการปรบปรงเฉพาะท ซงใชการแลกเปลยนลกคาระหวางเสนทาง (Customer - exchange) ผสมกบ วธการยายลกคาหนงรายระหวางเสนทาง (One-move Operator) ผลจากการศกษาพบวาการสรางค าตอบเรมตนดวยวธเซฟวงอลกอรทม และปรบปรงค าตอบดวยวธการแลกเปลยนลกคาระหวางเสนทาง และผสมกบวธการยายลกคาหนงรายระหวางเสนทาง ใหผลการจดเสนทางทมระยะทางรวมต าทสดเมอเปรยบเทยบกบวธอนๆ ซงวธการดงกลาวสามารถลดระยะทางรวมจากเดม 19,367 กโลเมตร ลดลงเหลอ 17,489 กโลเมตร หรอลดลง 9.70เปอรเซนต โดยใชเวลาในการประมวลผลเพอหาค าตอบพรอมกนทกวธสงสดเพยง 9.72 วนาท อกดวย

อตนช ลมปมณรกษ และนระเกณฑ พมชศร (2556) ไดศกษาการออกแบบระบบสารสนเทศส าหรบองคกรกลางใหบรการการขนสง เพอน าเสนอหนทางทสามารถลดความสญเสยทเกดขนในการขนสง โดยแบงการศกษาวจยออกเปน 3 สวน ไดแก 1.การน าเสนอแนวคดระบบองคกรกลางทไมมรถขนสงเปนของตนเองส าหรบบรการขนสง 2.การวเคราะหระบบ 3.การออกแบบระบบสารสนเทศ ซงในการเสนอแนวความคดและการออกแบบระบบสารสนเทศนจะเปนตนแบบการจดการรถทมความจเหลอใหสามารถเกดมลคาจากความจทสญเสยเปลา จากการศกษาถงการประสานความรวมมอในการขนสง การวางแผนการขนสงโดยจะชวยใหสามารถใชประโยชนจากความจทเหลอทม ไดสงสด และสามารถเปนตนแบบในการจดการรถทมความจเหลอใหสามารถเพมมลคาจากความจทสญเสยเปลาอนน าไปสการลดตนทนการขนสงได

ปาลรฐ บญกอน (2554) ไดศกษาการพฒนาระบบการจดเสนทางขนสงสนคาจากศนยกระจายสนคาไปยงลกคาตามจดตางๆ เพอชวยสนบสนนการตดสนใจผใชระบบ โดยมศนยกระจายสนคาแหงเดยวและมรปแบบปญหาการจดเสนทางการเดนรถแบบมขอจ ากดเรองความสามารถในการบรรทกโดยพจารณาเรองน าหนกและปรมาตรสนคาใหอยภายใตเงอนไขทจ ากดเรองความสามารถในการบรรทกโดยพจารณาเรองน าหนกและปรมาตรสนคาใหอยภายใตเงอนไขของความจรถโดยมเปาหมายเพอใหไดระยะทางทสนทสด วธทใชในการจดเสนทางเดนรถขนสงสนคาของงานวจยน คอ วธฮวรสตกสแบบ Saving Algorithm ของ Clarke and Wright โดยใชวธ 2 –OPT ปรบปรงเสนทางและมการประยกตใชระบบสารสนเทศทางภมศาสตรรวมดวยโดยจดท าโปรแกรมลง

Page 42: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

34

บน Visual Basic for Application (VBA) ใน Microsoft Excel ผลลพธทแสดงออกมาสามารถระบต าแหนงจดสงสนคา ปรมาตรและน าหนกสนคาทรถบรรทกแตละคนบรรทกไปซงผลลพธทไดสามารถเพมประสทธภาพอรรถประโยชนการใชรถมากขนภายในระยะเวลาสนลงและสามารถลดเวลาทใชในการจดรถไดดเมอเปรยบเทยบกบขอมลตวอยาง

วลลภ รตนถาวร และ สรง ปรชานนท (2553) ไดศกษาฮวรสตกส าหรบปญหาต าแหนงทตงศนยกระจายสนคาแบบพลวตโดยมขอจ ากดดานขนาด เพอท าใหคาใชจายรวมของการตอบสนองตอความตองการของลกคาตลอดชวงเวลาการวางแผนมคานอยทสด ดวยการจดตงศนยกระจายสนคาทเหมาะสม โดยจะพจารณาจากความตองการของลกคาวามลกษณะเปลยนแปลงไปตามเวลาและเปนฟงกชนของเวลา งานวจยนไดน าเสนอขนตอนวธการแกปญหาดวยวธการคนหาแบบท าบ โดยใชวธการประมาณเซตขางเคยงแทนวธการหาค าตอบทดทสด และวธการแกปญหาแบบพนธกรรม (GA) จากการทดสอบสมรรถนะของฮวรสตกทพฒนาขนสามารถสรปไดวา วธการคนหาแบบท าบจะใหประสทธภาพในดานเวลาในการหาค าตอบทดกวาขนตอนวธพ นธกรรมในทกชนดของปญหา โดยเฉพาะอยางยงเมอจ านวนค าตอบเวลายอยในระยะเวลาการวางแผนของปญหาแบบพลวตเพมสงขน ดานคณภาพของค าตอบวธการคนหาแบบท าบจะใหคณภาพของค าตอบทดกวาขนตอนพนธกรรมเพยงเลกนอย

Page 43: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

35

บทท 3 วธด าเนนการวจย

การวจยเรอง การจดเสนทางการขนสงดวยวธเมตาฮวรสตกส กรณศกษา บรษทผใหบรการขนสงทางดานโลจสตกส ซงการวจยนผวจยไดก าหนด วธด าเนนการวจยมขนตอนดงน 3.1 ประชากรทใชในการศกษา 3.2 ขนตอนการด าเนนงานวจย 3.3 เครองมอทใชในงานวจย

3.1 ประชากรทใชในการศกษา กรณศกษาผวจยเลอกศกษาแบบเจาะจง (Purposive Sampling) ใชเพยงบรษทเดยวเทานน เนองจากบรษทกรณศกษาน เปนผใหบรการขนสงและกระจายสนคาใหกบ ผประกอบการอตสาหกรรม หาง ราน ในเขตกรงเทพมหานคร ปรมณฑล และตางจงหวด ปจจบนมลกคาใชบรการ ไมนอยกวา 2,000 ราย และเปนบรษททใหบรการดานโลจสตกสแบบครบวงจร 3.2 ขนตอนการด าเนนงานวจย ขนตอนการท างานวจยประกอบดวยขนตอนหลกๆ พอสรปไดดงน

1. ศกษาขนตอนการท างานของบรษทกรณศกษา โดยเนนศกษาในสวนการจดเสนทางขนสงสนคาพรอมทงศกษาแนวทางการพฒนา

2. ก าหนดปญหาและวตถประสงคในการท าวจยครงน 3. ศกษาคนควาทฤษฎและงานวจยทเกยวของกบการจดเสนทางขนสงสนคาเพอน ามา

รวบรวมและใชเปนเอกสารประกอบการวเคราะห 4. วเคราะหขอมลและเกบรวบรวมขอมลทเกยวของในงานวจยครงน

จากการวเคราะหขอมลทตองใชในการพฒนาสามารถแบงออกเปนแตละประเภท ดงน - ขอมลรถทใชในการขนสงสนคา เชน ประเภทของรถ น าหนกทรถแตละประเภทสามารถ

บรรทกได ปรมาตรทรถแตละประเภทสามารถบรรจไดและจ านวนรถบรรทกแตละประเภท

- ระยะเวลาทพนกงานใชในการจดเสนทางการขนสงสนคา - ขอมลเรองต าแหนงทตงของลกคาแตละราย - ขนาดและน าหนกของสนคา - ระยะทางจากคลงสนคาไปยงลกคาแตละราย

Page 44: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

36

5. ออกแบบฐานขอมลและคาพารามเตอรตางๆทใชในการค านวณทางโปรแกรม 6. ท าการทดลองการจดเสนทางขนสงสนคาดวยโปรแกรม 7. สรปผลในการท างานวจยครงน

3.3 เครองมอทใชในงานวจย งานวจยน ผวจยไดสรางเครองมอชวยพนกงานในการจดเสนทางเดนรถโดยเครองมอนคอโปรแกรมทท างานบน Microsoft Excel รวมกบ VBA (Visual Basic for Application) และมการดงขอมลเรองระยะทางจาก Google Map โดยน าวธการเมตาฮว ดวยวธ 3-OPT มาประยกตใชในการเขยนโปรแกรม ซงขอมลทน ามาใชในการเขยนโปรแกรมมดงน

1. รถบรรทกสนคา บรษทกรณศกษามรถขนสงสนคา 3 ประเภทดวยกน คอ รถกระบะ 4 ลอ

รถ 6 ลอ และรถ 10 ลอ (งานวจยครงนเลอกศกษารถประเภทรถ 6 ลอ เทานน) โดยมขอจ ากด ดงน

ตารางท 3.1 ประเภทและขอจ ากดดานน าหนกและปรมาตร

ประเภทรถ ขนาดรถ (m) น าหนกบรรทกไม

รวมสนคา ปรมาตรบรรทก

รถกระบะ 4 ลอ 1.72*5.04*1.64 1,700 2.82 รถ 6 ลอ 2.7 * 6.5 *2.5 7,500 10.8

รถ 10 ลอ 2.8*10.3.1 15,600 34

2. ระยะทาง ขอมลระยะทางถอเปนตวขอมลจ าเปนทตองประกอบในการจดเสนทางขนสง

สนคา การไดมาซงขอมลสวนนนนมหลากหลายวธ ไมวาจะเปนมาจากขอมลจรง จากการค านวณจาก

จดละตจด/ลองตจด หรอไดจากการประยกตใชระบบสารสนเทศทางภมศาสตร อยางไรกตามการ

ไดมาซงระยะทางไมวาจะวธใดลวนแตมเปาหมายในการจดเสนทางขนสงสนคาเดยวกนคอ ตองการ

จดเสนทางเดนรถใหมระยะทางทต าทสด

ในงานวจยน ไดใชการค านวณจากพกดละตจดลองตจด เปนการค านวณหาระยะทางระหวาง

จด 2 จดโดยการน าพกดของจด 2 จดมาค านวณหาระยะทางจากนนน าระบบสารสนเทศทาง

ภมศาสตร (GIS) มาใชในการหาระยะทาง ในงานวจยนไดเลอก Google Map ซงเปนโปรแกรมท

เกยวกบระบบสารสนเทศทางภมศาสตรอกรปแบบหนงทก าลงเปนทนยมใช งานวจยครงนจงตองการ

ทจะวางแนวทางในการประยกตน า (GIS) เขามาใชในการจดเสนทางเดนรถเพอเพมประสทธภาพให

Page 45: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

37

มากยงขน ซงจะจดเกบขอมลระยะทางจากศนยกระจายสนคาไปยงลกคาแตละรายโดยมศนยกระจาย

สนคาเพยงแหงเดยว

ภาพท 3.1 โปรแกรม Google Map

3. โปรแกรมทท างานบน Microsoft Excal รวมกบ VBA (Visual Basic for Application)

ถกน ามาเขยนโคดเพอจดเสนทางเดนรถขนสงสนคา

ภาพท 3.2 โปรแกรมทท างานบน Microsoft Excel รวมกบ VBA (Visual Basic for Application

Page 46: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

38

D001 Cus001 Cus002 Cus003 Cus004 Cus005 Cus006 Cus007 Cus008 Cus009 Cus010

D001 0.00 24.41 42.93 13.81 26.92 28.07 52.29 22.44 24.08 46.13 19.01

Cus001 27.70 0.00 20.09 30.29 20.58 2.40 26.87 29.73 18.24 38.12 9.64

Cus002 42.85 20.42 0.00 45.43 32.38 20.17 14.28 44.87 35.31 51.47 23.47

Cus003 12.74 25.21 44.58 0.00 29.09 31.52 53.08 11.62 13.58 35.36 21.92

Cus004 26.53 19.19 30.42 29.47 0.00 17.37 44.78 33.16 27.11 48.67 17.92

Cus005 27.74 2.61 19.51 31.87 18.83 0.00 24.83 31.31 20.02 36.36 7.89

Cus006 51.20 26.61 17.00 53.79 43.64 24.23 0.00 45.10 35.40 57.53 39.51

Cus007 24.67 22.84 40.59 12.66 35.99 25.73 46.13 0.00 8.21 20.57 24.24

Cus008 23.28 15.82 33.33 13.96 30.05 19.02 42.54 8.60 0.00 28.64 13.47

Cus009 44.25 32.06 49.82 25.04 48.57 34.96 55.06 18.02 23.52 0.00 34.35

Cus010 18.39 8.24 23.20 21.16 19.33 10.14 39.73 20.60 14.55 36.70 0.00

บทท 4 ผลการศกษา

การวจยเรอง การจดเสนทางการขนสงดวยวธเมตาฮวรสตกส กรณศกษา บรษทผใหบรการขนสงทางดานโลจสตกส ผวจยไดมการปรบปรงใหใกลเคยงและสอดคลองกบปญหาจรงใหมากขนโดยมการออกแบบจ าลองดงน 4.1 การออกแบบการจดเสนทางเดนรถขนสงสนคา งานวจยการจดเสนทางเดนรถขนสงสนคาไดมการออกแบบจ าลองการจดเสนทางเดนรถดงน 4.1.1 การสรางเมตรกซระยะทาง งานวจยการจดเสนทางเดนรถขนสงนมการจดเรยงขอมลระยะทางในรปแบบของเมตรกซซงจากงานวจยตาง ๆ ทเกยวกบการจดเสนทางเดนรถนนมการเลอกใชเมตรกซระยะทาง 2 แบบดวยกน คอ เมตรกซแบบครงชด (Half - Matrix) และเมตรกซแบบเตมชด (Full - Matrix) โดยเมตรกซทง 2 แบบนนมความแตกตางกนทแบบครงชดนนระยะทางจะมเพยงครงเมตรกซนนหมายถง ระยะทางการวง ไป – กลบ นนมระยะทางเทากน รปแบบเมตรกซแบบนจะงายตอการค านวณเนองจากสามารถลดจ านวนครงในการคดค านวณหาคาประหยดไปไดถงครงหนง สวนเมตรกซระยะทางแบบเตมชดนนมระยะทางในการวง ไป – กลบ ทไมเทากนจงมการจดเรยงขอมลเตมเมตรกซ ในงานวจยนเลอกใชการจดเรยงขอมลระยะทางเมตรกซแบบเตมชดเพอใหสอดคลองกบความเปนจรงมากขน เนองจากรถขนสงในสถานการณจรงนนระยะทางการวงรถ ไป – กลบ มความเปนไปไดทระยะทางไมเทากน ซงในเมตรกซระยะทางนเปนขอมลของระยะทางจากศนยกระจายสนคาไปยงลกคารายตาง ๆ และระยะทางระหวางลกคาในแตละราย หรอระยะทางจากจด i ไป j โดยมการก าหนดใหระยะทางทจด i ไป j ทเปนต าแหนงเดยวกนนนมคาเทากบ 0 ดงตารางเมตรกซระยะทาง ตารางท 4.1 ตวอยางเมตรกซระยะทาง

Page 47: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

39

จากตารางท 4.1 ระยะทางทบรรจลงในตารางเมตรกซนไดจากการประยกตระบบสารสนเทศทางภมศาสตรโดยการดงขอมลระยะทางจาก Google Map มาจดเกบไวในโปรแกรมทางคอมพวเตอร

4.1.2 การประยกตใชวธ 3-OPT ในการปรบปรงเสนทางเดนรถขนสงสนคา การปรบปรงเสนทางเดนรถขนสงสนคา คอการน าเสนทางจากเดมของบรษททจดโดยพนกงานขบรถมาท าการปรบเปลยนปรบปรงเพอใหไดผลลพธลดระยะทางในการขนสงนอยลงจากวธการเดม การปรบปรงเสนทางนนถกน ามาใชในการจดเสนทางเดนรถอยางแพรหลายโดยการประยกตเทคนคฮวรสตกสตาง ๆ มาใช ในงานวจยนมการปรบปรงเสนทางโดยใชวธ 3 – OPT หรอวธการสลบจดสงทละ 3 จด โดยวธการนจะเปนวธการสลบล าดบจดสงเพอใหไดผลลพธทดทสดเมอน ามาเปรยบเทยบกบวธปจจบนของบรษททใชอย และน าขอมลทไดจากมาประยกตใชในการหาค าตอบผานโปรแกรม Visual Basic for Application (VBA) ใน Microsoft Excel และดงขอมลระยะทางดวยระบบสารสนเทศทางภมศาสตรซงมขนตอนในการปรบปรงดงน ขนตอนท 1 สรางเสนทางเรมตนกอนโดยเลอกทกจดทเปนไปได ขนตอนท 2 ปรบปรงเสนทางโดยการสลบต าแหนงจดสงใหมโดยใชวธ 3 – OPT โดยลบเสนทางทมอย 3 เสนทาง จากนนแทนทเสนทางใหมแทนเสนทางเดม ทท าใหเสนทางผานทกจดสง หลงจากนนตรวจสอบเสนทางใหมทปรบปรงวามคาใชจายในการขนสงทต ากวาเสนทางเดมหรอไม ถาเสนทางทไดใหมมคาต ากวาเสนทางทางเดม แสดงวาเสนทางใหมทไดเปนค าตอบทดกวา ขนตอนท 3 หลงจากท าการสลบล าดบจดสงเรยบรอยแลวและไมขดแยงกบเงอนไขหรอขอก าหนดในการขนสงแลวนนจะท าการตรวจสอบระยะทางทไดจากการปรบปรงเพอเปรยบเทยบกบระยะทางทไดกอนปรบปรง หากผลทไดจากการปรบปรงนนไดคาระยะทางทดกวาการจดเสนทางในขนตอนแรก เสนทางทไดจากการปรบปรงจะถกบนทกไว ขนตอนท 4 เมอไดเสนทางทเกดจากการสลบล าดบจดสงและไดคาทประหยดดขนแลว ท าการสลบล าดบจดสงเชนนไปเรอย ๆ เพอเปรยบเทยบกบเสนทางทถกบนทกไวหากเจอล าดบจดสงทใหคาประหยดกวาเสนทางทถกบนทกไวกอนหนาใหบนทกเสนทางใหมและท าซ าจนกระทงเกดการสลบครบทกจด ดงภาพท 4.1

Page 48: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

40

ภาพท 4.1 การจดเสนทางการเดนรถดวยวธ 3-OPT

Yes

Yes

No

No

Yes No

No

Yes

สลบล าดบจดสงในเสนทาง

ค านวณระยะทางแบบเดม และแบบใหม

เสนทางแบบใหมดกวาแบบเดมใชหรอไม

บนทกระยะทางและล าดบเสนทางทปรบปรงใหม

ตรวจสอบปรมาตรและน าหนกเกนหรอไม

ครบทกจดสงใชหรอไม

หยด

เรมตน

ตรวจสอบจ านวนจดมากกวา 3 จดใชหรอไม

Page 49: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

41

4.2 แบบจ าลองทางคณตศาสตร งานวจยมรปแบบปญหาการจดเสนทางเดนรถแบบ VRP จงสามารถเขยนแบบจ าลองทางคณตศาสตรไดดงตอไปน ก าหนดให คาคงท N = จ านวนจดสง K = จ านวนรถบรรทก Sij = ระยะทางการเดนทางจากจดสง i ไปยงจดสง j Wj = น าหนกสนคาทขนสงไปยงจดสง j Vj = ปรมาตรสนคาทขนสงไปยงจดสง j Wk = น าหนกของสนคาทรถบรรทก k สามารถบรรทกได Vk = ปรมาตรของสนคาทรถบรรทก k สามารถบรรทกได ตวแปรการตดสนใจ Xijk = 1 เมอเดนทางจากจดสง i ไปยงจดสง j โดยรถบรรทก k หากเปนกรณอนเทากบ 0 Ui = ตวแปรส าหรบปองกนการเกดรอบการขนสงยอย (Sub tour) ทอาจเกดขนในค าตอบ หาคาต าสด

xs ijk

K

ij

N

j

N

i

11

(4.1)

ภายใตเงอนไข

Njxijk

K

k

N

jii

,.....,2;1

11

(4.2)

Nixijk

K

k

N

jii

,.....,2;1

11

(4.3)

kkNh

N

jhjk

N

iihk xx ,......,1,,......,1;0

11

(4.4)

kkww kijk

N

jii

k

N

jx ,.....,1;

12

(4.5)

kkvv kijk

N

jii

k

N

jx ,.....,1;

12

(4.6)

kkNjNiNUUNN jijikjik xx ,...,1;,...,2;,....,2);2()1()3( (4.7)

Page 50: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

42

kkNjNixijk,...,1;,...,1;,....,1);1,0( (4.8)

ฟงกชนวตถประสงค หาคาระยะทางในการขนสงทนอยทสด ภายใตเงอนไข สมการท (4.2) ก าหนดใหการวงเขาจดสงสนคาในแตละจดอนญาตใหรถวงเขาเพยง 1 คนเทานน สมการท (4.3) ก าหนดใหการวงออกจดสงสนคาในแตละจดอนญาตใหรถออกเพยง 1 คน เทานน สมการท (4.4) ก าหนดใหแตละจดสงสนคาเมอมรถบรรทกวงเขาแลวตองมการวงออกจากจดสงนน ๆ ดวย สมการท (4.5) ก าหนดใหการบรรทกสนคาของรถบรรทกแตละคนมน าหนกรวมไมเกนน าหนกทรถบรรทกสามารถรบได สมการท (4.6) ก าหนดใหการบรรทกสนคาของรถบรรทกแตละคนมปรมาตรรวมไมเกนปรมาตรทรถบรรทกสามารถรบได สมการท (4.7) เปนการปองกนไมใหเกดเสนทางเดนรถยอย (Sub tour) สมการท (4.8) ก าหนดตวแปรตดสนใจการตดสนใจ Xijk มคาเปน 0 หรอ 1 เทานน 4.3 ตนทนน ามนเชอเพลง ในสวนของตนทนคาใชจายในการขนสงของบรษทกรณศกษา พบวารถบรรทกสนคามตนทนคาขนสงคอ คากาซ LPG และคาน ามนเชอเพลง แตผวจยจะชวยแกปญหาการคดลดตนทนคาน ามนเชอเพลงเทานน ซงตนทนน ามนตอหนวยผลตนนสามารถค านวณไดดงตอไปน ตนทนน ามน/หนวยผลต = (อตราการใช) x (ราคาน ามน/หนวย) 4.4 ผลการทดลองการจดเสนทางเดนรถขนสงสนคา ผลการทดลองในงานวจยนไดจากการทดลองจากกลมตวอยางของบรษทกรณศกษาโดยเลอกชดขอมลมาท าการทดลองเปนขอมลชวงวนท 6 ถง 12 พฤศจกายน 2560 และเปนจดสงทอยในเขตกรงเทพมหานครและปรมณฑล ขนาดของขอมลมจ านวนจดสงแตกตางกนไป จากการน าชดขอมลมาทดลองพบวาผลลพธทไดจากการจดเสนทางเดนรถดวยวธการจดโดยใชพนกงานจดมาท าการเปรยบเทยบกบผลลพธทไดจากการจดเสนทางเดนรถโดยใชโปรแกรมจดเสนทางทเขยนชดค าสงลง

Page 51: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

43

บนโปรแกรม Visual Basic for Application (VBA) และท างานบนโปรแกรม Microsoft Excel และดงขอมลระยะทางดวยระบบสารสนเทศทางภมศาสตร สามารถลดระยะทางขนสงรวมจากเดม 5,005.93 กโลเมตร เหลอเพยง 4,512.11 กโลเมตร โดยสามารถลดระยะทางจากเดมลง 493.82 กโลเมตร รายละเอยดแสดงดงตารางท 4.2 และสามารถลดตนทนคาน ามนเชอเพลงสามารถค านวณไดดงตอไปน ตนทนนำมนเชอเพลง = (อตรำกำรใช) x (รำคำนำมน/หนวย) วธเดม ตนทนน ามนเชอเพลงในการสงสนคา 7 วน = 5,005.93 * 25.09 = 125,598.78 บาท วธ 3-Opt ตนทนน ามนเชอเพลงในการสงสนคา 7 วน = 4,512.11 * 25.09 = 113,208.84 บาท ดงนนในการขนสงสนคาจ านวน 7 วน สามารถลดตนทนคาน ามนเชอเพลงลงได 125, 598.78 - 113,208.84 = 12,389.94 บาท ตารางท 4.2 เปรยบเทยบระยะทางหลงจากการปรบปรงเสนทาง

การเปรยบเทยบผล ชดขอมลท 1

6 พ.ย.60

ชดขอมลท 2

7 พ.ย.60

ชดขอมลท 3

8 พ.ย.60

ชดขอมลท 4

9 พ.ย.60

ชดขอมลท 5

10 พ.ย.60

ชดขอมลท 6

11 พ.ย.60

ชดขอมลท 7

12 พ.ย.60

รวมระยะทาง

(KM)

ระยะ

ทาง (

km) พนกงาน

จดรถ 642.91 799.86 721.66 719.19 725.78 718.41 678.12 5,005.93

ปรบปรงดวยวธ 3 – OPT

599.91 717.91 661.65 608.06 644.35 654.84 625.33 4,512.11

เปรยบเทยบระยะทาง -42.94 -81.95 -60.01 -111.13 -81.43 -63.57 -52.79 -493.82

Page 52: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

44

ภาพท 4.2 การเปรยบเทยบระยะทางระหวางพนกงานจดรถกบวธ 3-OPT

Page 53: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

45

บทท 5 สรป อภปรายผล และขอเสนอแนะ

การวจยครงนมจดประสงคเพอน าเทคนคในการจดเสนทางการขนสงดวยวธการเมตาฮวรสตกสมาใชในการจดเสนทางการขนสงสนคาใหกบบรษทกรณศกษา และชวยในการลดระยะทางในการขนสงใหไดระยะทางทสนทสดเปนงานวจยทจดท าขนเพอประยกตหลกการจดเสนทางเดนรถขนสงสนคาดวยวธเมตาฮวรสตกสมาใชกบปญหาจรงและสรางโปรแกรมจดรถขนเพอเปนแนวทางใหกบบรษทกรณศกษาในการพฒนาเทคโนโลยเขามาใชเปนเครองมอชวยในการตดสนใจใหกบพนกงานจดรถเพอใหการท างานเกดประสทธภาพเพมมากขน 5.1 สรปผลการวจย การวจยครงนไดมการออกแบบจ าลองการจดเสนทางเดนรถขนสงสนคาโดยไดน าหลกการเมตา ฮวรสตกสดวยวธการสลบจด 3 จด 3-OPT มาประยกตกบโปรแกรมจดเสนทางทเขยนชดค าสงลงบนโปรแกรม Visual Basic for Application (VBA) และท างานบนโปรแกรม Microsoft Excel และดงขอมลระยะทางดวยระบบสารสนเทศทางภมศาสตร โดยการเกบขอมลตวอยาง 7 ชดขอมลระหวางวนท 6 -12 พฤศจกายน 2560 ทดลองจดเสนทางดวยวธ 3-OPT โดยเลอกรถบรรทกประเภท 6 ลอกลาง ผลทไดจากการทดลองสามารถลดระยะทางขนสงรวมจากเดม 5,005.93 กโลเมตร เหลอเพยง 4,512.11 กโลเมตร โดยสามารถลดระยะทางจากเดมลง 493.82 กโลเมตร และยงสามารถลดตนทนคาน ามนเชอเพลงลงได 7 วน 12,389.94 บาทรายละเอยดดงตารางท 5.1 ตารางท 5.1 เปรยบเทยบระยะทางหลงจากการปรบปรงเสนทาง

การเปรยบเทยบผล ชดขอมลท 1 6 พ.ย.60

ชดขอมลท 2 7 พ.ย.60

ชดขอมลท 3 8 พ.ย.60

ชดขอมลท 4 9 พ.ย.60

ชดขอมลท 5 10 พ.ย.60

ชดขอมลท 6 11 พ.ย.60

ชดขอมลท 7 12 พ.ย.60

รวมระยะทาง (KM)

ระยะ

ทาง (

km) พนกงาน

จดรถ 642.91 799.86 721.66 719.19 725.78 718.41 678.12 5,005.93

ปรบปรงดวยวธ 3 – OPT

599.91 717.91 661.65 608.06 644.35 654.84 625.33 4,512.11

เปรยบเทยบระยะทาง -42.94 -81.95 -60.01 -111.13 -81.43 -63.57 -52.79 -493.82

Page 54: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

46

5.2 อภปรายผลการวจย ในการวจยเรองนมขอคนพบทเดน ๆ เหนควรน ามาอภปรายโดยใชหลกตรรกวทยาและอภปรายผลการวจยใหครอบคลมวตถประสงคของการวจยทกขอทกประเดน ดงตอไปน ผลการวจยพบวา เมอน าทฤษฎเทคนคทางเมตาฮวรสตกสมาประยกตใชในการออกแบบจ าลองการจดเสนทางเดนรถขนสงสนคามาประยกตกบโปรแกรมจดเสนทางทเขยนชดค าสงลงบนโปรแกรม Visual Basic for Application (VBA) และท างานบนโปรแกรม Microsoft Excel กสามารถลดระยะทางขนสงลงไดเมอน ามาเปรยบเทยบกบวธการจดเสนทางแบบเดมของบรษทซงสอดคลองกบงานวจยของ วไลวรรณ แกนสาร และ สมบต สนธเชาน (2556) ไดศกษาการเปรยบเทยบวธการฮวรสตกส ส าหรบระบบการจดการขยะซงจดท าเพอแกปญหาในการลดตนทนตาง ๆ ทงทางตรงและทางออม พรอมทงเกดการลดตนทนคาใชจายไดเปนอยางดอกทงยงมวธการทเขาใจงายไมซบซอนโดยเนอหาใน งานวจยนไดบอกถงการประยกตวธการหาค าตอบโดยวธการ Saving heuristic , Nearest heuristic และ Max-Nearest เพอท าการเปรยบเทยบกนโดยพจารณาจากผลลพธทไดภายใตเงอนไขเดยวกน ผลทดลองของงานวจยนจะเหนวาวธ Saving heuristic ใหค าตอบทดทสดคอมระยะทางรวม 55.022 กโลเมตร และวธ Nearest heuristic ตอดวยวธ Max-nearest คอ 62.152 กโลเมตร และ 67.196 กโลเมตร ตามล าดบ ซงในปจจบนเสนทางในการเกบขยะจะมระยะทางรวมอยท 62.246 กโลเมตร ดงนนจาก การทดลองจะเหนวาวธ Saving และ Nearest สามารถลดระยะทางลงไดพรอมกบสามารถควบคม เวลาในการเกบขยะไดอกดวย และสอดคลองกบงานวจยของ ปาลรฐ บญกอน (2554) ไดศกษาการพฒนาระบบการจดเสนทางขนสงสนคาจากศนยกระจายสนคาไปยงลกคาตามจดตางๆ เพอชวยสนบสนนการตดสนใจผใชระบบ โดยมศนยกระจายสนคาแหงเดยวและมรปแบบปญหาการจดเสนทางการเดนรถแบบมขอจ ากดเรองความสามารถในการบรรทกโดยพจารณาเรองน าหนกและปรมาตรสนคาใหอยภายใตเงอนไขทจ ากดเรองความสามารถในการบรรทกโดยพจารณาเรองน าหนกและปรมาตรสนคาใหอยภายใตเงอนไขของความจรถโดยมเปาหมายเพอใหไดระยะทางทสนทสด วธทใชในการจดเสนทางเดนรถขนสงสนคาของงานวจยน คอ วธฮวรสตกสแบบ Saving Algorithm ของ Clarke and Wright โดยใชวธ 2 –OPT ปรบปรงเสนทางและมการประยกตใชระบบสารสนเทศทางภมศาสตรรวมดวยโดยจดท าโปรแกรมลงบน Visual Basic for Application (VBA) ใน Microsoft Excel ผลลพธทแสดงออกมาสามารถระบต าแหนงจดสงสนคา ปรมาตรและน าหนกสนคาทรถบรรทกแตละคนบรรทกไปซงผลลพธทไดสามารถเพมประสทธภาพอรรถประโยชนการใชรถมากขนภายในระยะเวลาสนลงและสามารถลดเวลาทใชในการจดรถไดดเมอเปรยบเทยบกบขอมลตวอยาง

Page 55: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

47

5.3 ขอเสนอแนะ ขอคนพบจากการวจยและการอภปรายผลมขอเสนอแนะทควรน าไปใชดงน 5.3.1 ขอเสนอแนะในการน าผลการวจยไปใช

5.3.1.1 งานวจยทจดท าขนเพอเปนแนวทางในการพฒนาการจดเสนทางเดนรถใหกบบรษทกรณศกษาซงสามารถน าไปใชไดแตตองมการประยกตใหกบการระบบการท างานของบรษทกอนจงควรมการจดท าฐานขอมลเพมเตม 5.3.2 ขอเสนอแนะในการท าวจยครงตอไป 5.3.2.1 ควรมการเกบขอมลเพมในเรองของรายละเอยดของสนคา ปรมาตรของตวสนคา น าหนกของตวสนคา ทอยของลกคา ต าแหนงพกดละตจด/ลองตจด 5.3.2.2 ควรมการวเคราะหใหครอบคลมถงเรองของตนทนมการเพมตวแปรในการขนสงโดยคดเปนบาทตอกโลเมตรและครอบคลมถงเรองตนทนทางดานเวลา (Time cost) ดวย

Page 56: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

48

บรรณานกรม ปฏพทธ หงสสวรรณ วชย จนทรรกษา และ สรวทย เชอพสทธกล (2556). “การศกษาเพอเพมประสทธภาพการจดเสนทางเดนรถขนสงน าดม จงหวดสมทรสงคราม”.ภาควชาวศวกรรมอตสาหการและการ จดการ คณะวศกรรมศาสตรและเทคโนโลยอตสาหกรรม มหาวทยาลยศลปกร นครปฐม. พฒนพงษ สหญานาง (2552). “การจดเสนทางการขนสงทเหมาะสมในระบบมลครน”. วศวกรรมการจดการอตสาหกรรม มหาวทยาลยเทคโนโลยพระจอมเกลาพระนครเหนอ. ทวนนท สมะจารก และคณะ (2552). “การลดคาใชจายในการขนสง กรณศกษา โรงงานเคมภณฑ”. ภาควชาวศวกรรมอตสาหการและการจดการ คณะวศกรรมศาสตรและเทคโนโลยอตสาหกรรม มหาวทยาลยศลปกรนครปฐม อภชต มณงาม (2556). “การแกปญหาการจดเสนทางการเดนรถโดยมการจ ากดเวลาการเดนรถบรรทกขนาดใหญดวยวธฮวรสตกส กรณศกษา การขนสงอฐบลอกในเขตกรงเทพมหานครและปรมณฑล”.คณะวศกรรมศาสตร มหาวทยาลยเทคโนโลยพระจอมเกลาธนบร ไพโรจน แสนด และคณะ. 2557. “การศกษาเสนทางเดนรถในการเคลอนยายผประสบอทกภยออกจากพนทอนตรายเมอระดบน าสง”วารสารวชาการอตสาหกรรมศกษา. 8, 1 (มกราคม- มถนายน 2557) วลลภ รตนถาวร และ สรง ปรชานนท. 2553. “ปญหาต าแหนงทตงศนยกระจายสนคาแบบพลวตโดยมขอจ ากดดานขนาด” วารสารวศวกรรมศาสตร. 2,1 (กมพาพนธ2553) วไลวรรณ แกนสาร และ สมบต สนธเชาน . 2556. “การเปรยบเทยบวธการฮวรสตกส ส าหรบระบบการจดการขยะ” วารสารวชาการ Thai VCML. 6, 2 (ธนวาคม 2556). อตนช ลมปมณรกษ และ นระเกณฑ พมชศร . 2556. “การออกแบบระบบสารสนเทศส าหรบองคกร กลาง ใหบรการการขนสง” วารสารวศวกรรมศาสตร ISSN: 1906-3636. 5,1 (มกราคม 2557) อภชต มณงาม และคณะ.2556. “การแกปญหาการจดเสนทางการเดนรถโดยมการจ ากดเวลาการเดนรถบรรทกขนาดใหญดวยวธฮวรสตกส” วารสารเทคโนโลยอตสาหกรรม มหาวทยาลยราชภฎอบลราชธาน. 3, 6 (กรกฎาคม – ธนวาคม 2556) อรประไพ จารพฒน และ ปวณา เชาวลตวงศ. 2556. “ฮวรสตกส าหรบการจดเสนทางเดนรถแบบ เปดเพอ ลดตนทนการขนสง”วารสารวศวกรรมศาสตร. (ISSN: 1906-3636) 4,3 (31 พฤษภาคม 2556)

Page 57: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

49

พลอยพรรณ ศรกจการ และ อรอไร แสงสวาง. 2556. “การออกแบบเพอเพมประสทธภาพเสนทางเดนรถขนสงเครองส าอาง” วารสารวชาการอตสาหกรรมศกษา. 7, 2 (ธนวาคม 2556) ธรน มณศร.2550 “การพฒนาอลกอรทมส าหรบปญหาการจดเสนทางเดนรถขนสงแบบมหลายคลงสนคา และมความไมแนนอนภายใตกรอบเวลา”.สาขาวชาวศวกรรมอตสาหการ คณะวศวกรรมศาสตร มหาวทยาลยศรปทม. จตรวทย ศศธรานนทและธราธร กลภทรนรนดร.2550. “การประยกตวธเชงพนธกรรมส าหรบการแกปญหาการจดการการขนสงสนคา กรณ มขอจ ากดดานเวลา”.สาขาเทคโนโลยโลจสตกส มหาวทยาลยเทคโนโลยมหานคร กรงเทพ. ชยยา นรกษเข (2541). “การจดเสนทางเดนรถขนสงขนมในเขตกรงเทพฯและปรมณฑลกรณศกษา : หาง โอ.ซ.ซพพลาย”. สถาบนเทคโนโลยพระจอมเกลาพระนครเหนอ กรงเทพ. เครอวลย จ าปาเงน (2547.) “การพฒนาระบบสนบสนนการตดสนใจเพอจดเสนทางเดนรถส าหรบการขนสงสนคาเพอการบรโภคสรานคาปลกในสถานบรการน ามนในจงหวดนนทบร”. สาขาอกษรศาสตรมหาบณฑต จฬาลงกรณมหาวทยาลย. สดารตน สมมาตย (2548). “การใชวธเชงฮวรสตกสเพอแกปญหาการจดเสนทางย า น พ า ห น ะ แ ล ะ ก า ร บ ร ร จ ”.ส า ข า ว ศ ว ก ร ร ม ศ า ส ต ร ( ว ศ ว ก ร ร ม อ ต ส า ห ก า ร ) มหาวทยาลยเกษตรศาสตร. อดม จาปะเกษตร (2542). “การศกษาการจ าลองสถานการณ การจดเสนทางยานพาหนะ ส าหรบศนยกระจายสนคาอะไหลรถยนต”.บณฑตวทยาลย มหาวทยาลยเกษตรศาสตร. ชยวฒน สขไมตร (2550). “การเพมประสทธภาพการจดเสนทางการขนสงสนคาโดยวธ มลคา” สารนพนธวทยาศาสตรมหาบณฑต สาขาการจดการการขนสงของโลจสตกส มหาวทยาลยบรพา ผกาวด แสงสวรรณ (2555). “ขนตอนวธเชงพนธกรรมแบบหลายวตถประสงคทมววฒนาการท างานรวมกนส าหรบแกปญหาการจดตารางสอน” วทยานพนธวทยาศาสตรมหาบณฑต (สถตประยกตและเทคโนโลยสารสนเทศ) คณะสถตประยกต สถาบนบณฑตพฒนบรหารศาสตร อรประไพ จารพฒน และ ปวณา เชาวลตวงศ. 2556. “ฮวรสตกส าหรบการจดเสนทางเดนรถแบบ เปดเพอ ลดตนทนการขนสง” วารสารวศวกรรมศาสตร. (ISSN: 1906-3636) 4,3 (31 พฤษภาคม 2556) พมพชนก สวรรณศร (2558). “การศกษารปแบบการจดเสนทางการขนสงสนคาดวยวธเชงพนธกรรม” โครงการวจยนไดรบทนสนบสนนจาก มหาวทยาลยราชภฏเชยงใหม งบประมาณ

Page 58: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

50

แผนดน ปงบประมาณ พ.ศ. 2558 โดยการสนบสนนทางวชาการจากสานกงานคณะกรรมการวจยแหงชาต (วช.) 2558 ผศ.ดร.ระพพนธ ปตาคะโส.วธการเมตาฮวรสตกส .พมพครงท 1.กรงเทพมหานคร : ส านกพมพส.ส.ท.;2554. ปาลรฐ.2554 “แนวทางการพฒนาการจดเสนทางเดนรถขนสงสนคา กรณศกษา ศนยกระจายสนคาประเภท เซรามค”.สาขาวชาการจดการโลจสตกส บณฑตวทยาลยการจดการนวตกรรม มหาวทยาลยเทคโนโลยพระจอมเกลาธนบร. กว ศรเมอง.2551. “การหาจ านวนรถบรรทกทเหมาะสมในการขนสงสนคาในธรกจคาปลก กรณศกษาทอปสซปเปอรมารเกต” วทยานพนธวศวกรรมศาสตรมหาบรฑต สาขาวศวกรรมโยธาคณะวศกรรมศาสตร มหาวทยาลยเทคโนโลยพระจอมเกลาพระนครเหนอ วไลวรรณ แกนสาร และ สมบต สนธเชาน. 2556. “การเปรยบเทยบวธการฮวรสตกสส าหรบระบบการจดการขยะ” วารสารวชาการ Thai VCML. 6,2 (ธนวาคม 2556). สาวนลน อดมสมบตมชย. 2548. “การประยกตวธศกษาสานกสาหรบการจดเสนทางยานพาหนะแบบมกรอบเวลา”. วทยานพนธบณฑตวทยาลย มหาวทยาลยเกษตรศาสตร. อนนต มงวฒนา และ ธรน มณศร. 2555. “การเปรยบเทยบขนตอนวธเมตาฮวรสตกส าหรบแกปญหาการจดเสนทางเดนรถขนสงแบบมกรอบเวลากรณมรถขนสงหลายขนาดและแบงแยกสงสนคาได”การประชมวชาการขายงานวศวกรรมอตสาหการ. (ตลาคม 2555)

Page 59: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

51

ภาคผนวก ก คมอการใชโปรแกรมการจดเสนทางเดนรถ

Page 60: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

52

ก.1 หนาตางโปรแกรมจดเสนทางเดนรถขนสง โปรแกรมจดเสนทางเดนรถถกเขยนโดย Visual Basic for Application: VBA มการปฏบตการโปรแกรมบน Microsoft Excel ซงมหนาตางการท างานดงรปท ก.1

ภาพท ก.1 ตวอยางหนาโปรแกรมจดเสนทางเดนรถ

ก.2 ขนตอนการใชโปรแกรมจดเสนทางเดนรถขนสง เนองจากโปรแกรมจดเสนทางเดนรถขนสงจดท าบน Microsoft Excel การจดเกบขอมลกถกจดเกบไวใน Microsoft Excel เชนเดยวกน สวนตวโปรแกรมเองจงมหลายหนาตางส าหรบการจดเกบขอมล การปรบคาการแสดงคาและการแสดงผลจากการจดเสนทางตางๆ ดงนนในหวขอนจงมการอธบายควบคไปกบการแนะน าขนตอนการใชงานโปแกรมเพอใหเขาใจถงหนาทของแตละหนาตางการท างาน (Worksheet)

Page 61: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

53

1. ขนตอนการเปดโปรแกรม เมอเปดโปรแกรมจะพบแถบ Security Warning ใหคลกปม ตวเลอก จากนนใหคลก เปดใชงานเนอหาน ไฟลงานจงจะสามารถแกไขเปลยนแปลงขอมลไดตามภาพท ก2

ภาพท ก.2 วธการใชโปรแกรมจดเสนทางเดนรถ

2. อธบายและแนะน าการใชงานแตละหนาตางการท างาน

2.1 การจดเกบขอมลลกคา (Worksheet: Customer) ในการจดเกบขอมลลกคาในหนาตางชอวา Customer รปแบบการจดเกบขอมลจะประกอบไปดวยชอลกคาขอมลเกยวกบชอลกคาทปรากฏบนบลรายการสนคาโดยขอมลนจ าเปนตองกรอกไวในฐานขอมล แตในงานวจยนจะท าการสมมตชอลกคาเพอใชในการทดสอบโปรแกรมพกด N/E ขอมลนเปนขอมลพกดละตจด/ลองตจดของลกคาซ งขอมลนส าคญมากตองกรอกไวในฐานขอม ล Worksheet: Customer ผใชระบบจะตองท าการกรอกขอมลลกคาซงประกอบดวย รหสลกคา ชอลกคา ละตจด ลองตจดทตงลกคา ดงแสดงในภาพท ก.3

ภาพท ก.3 โปรแกรมหนา Worksheet: Customer

Page 62: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

54

2.2 การจดเกบขอมลสนคา (Worksheet: Product) Worksheet: Product ผใชระบบจะตองท าการกรอกขอมลสนคาซงประกอบไปดวย รหสสนคาเปนชองส าหรบการกรอกรหสของสนคาแตละตวทตองจดเกบเปนขอมลส าคญทตองกรอกเกบไวในฐานขอมลรายละเอยดสนคาเปนขอมลชอของสนคาและขอมลอธบายเกยวกบตวสนคาของแตละตวขอมลในสวนนควรจะจดเกบไวในฐานขอมลเพอบอกชอของสนคาแตละตวกวาง ซม.เปนขอมลเกยวกบขนาดความกวางของสนคาแตละในหนวยเซนตเมตร ขอมลสวนนจ าเปนจะตองจดเกบในฐานขอมลยาว ซม.เปนขอมลเกยวกบขนาดความยาวของสนคาแตละในหนวยเซนตเมตร ขอมลสวนนจ าเปนจะตองจดเกบในฐานขอมลสง ซม.เปนขอมลเกยวกบขนาดความสงของสนคาแตละในหนวยเซนตเมตรขอมลสวนนจ าเปนจะตองจดเกบในฐานขอมล

ภาพท ก.4 โปรแกรมหนา Worksheet: Product

2.3 การดงระยะทางจาก Google Map (Worksheet: From To)

หลงจากทผใชงานระบบกรอกขอมล Worksheet: Customer และ Worksheet: Product เรยบรอยแลวถาตองการ ค านวณระยะทางดวย Google Map ใหไปทหนา Worksheet: From To แลวกดค านวณระยะทางดวย Google Map หนา Worksheet: From To จะแสดงการค านวณระยะทางของลกคาโดยดงขอมลจาก Google Map ซงกอนค านวณระยะทางจะตองกดเตรยมตารางขอมลลกคากอน หลงจากกดแลวจะแสดงขอมลขนดลกคาตามทเราไดกรอกไวในหนา Worksheet: Customer ดงแสดงในภาพท ก.5 และ ภาพท ก.6

Page 63: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

55

ภาพท ก.5 เตรยมตารางขอมลลกคา

ภาพท ก.6 ค านวณระยะทางดวย Google Map

2.4 การค านวณอลกอรทมและการปอนขอมล การค านวณอลกอรทมจะก าหนดใหโปรแกรมมการสลบต าแหนง 4 Point อณหภมสงสดท 2,000และอตราการเยนตวท 0.003 จากนนปอนขอมลทจะท าการจดสง เชน ขอมลลกคา หนา Worksheet: Call Main จะท าการดงขอมลจากหนา Worksheet: Customer และ Worksheet: Product โดยสามารถคลกปม Combo Box เลอกได ดงแสดงในภาพท ก.7

ภาพท ก.7 การค านวณอลกอรทมและหนา Worksheet: Call Main

Page 64: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

56

2.4 การจดเสนทางเดนรถ (Worksheet: Result) เมอกรอกขอมลการจดสงเรยบรอยแลวสามารถกดค านวณหาค าตอบ โดยเมอกดค านวณหาค าตอบแลว ผลลพธทไดจะไปแสดงขอมลในหนา Worksheet: Result โดยในหนานจะแสดงผลการค านวณ เปรยบเทยบ วธการจดสงแบบเดมของบรษท กบวธ 3-Opt โดยจะบอกรายละเอยดตางๆไวประกอบไปดวย จ านวนรถ บอกวาจ านวนรถทงหมดทใชในการขนสง ระยะทาง บอกระยะทางในการขนสงสนคาโดยจะบอกเปนระยะทางรวมในเสนนน น าหนก บอกน าหนกทรถแตละคนบรรทกไป ปรมาตร บอกปรมาตรทรถแตละคนบรรทกไป ภาพท ก.8 โปรแกรมหนา Worksheet: Result แสดงผลลพธทไดจากการค านวณ

Page 65: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

57

ภาคผนวก ข ชดค าสงโปรแกรมการจดเสนทางเดนรถ

Page 66: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

58

โปรแกรมจดเสนทางเดนรถถกเขยนขนบนชดค าสง VBA โดยในตวโปรแกรมซงประกอบไปดวย Modules สวนตางๆ ดงน

1. Modules General '***************************************************** 'เปน โมดล ฟงกชน ส าหรบท างานทวไป '***************************************************** Public Function Min(V1 As Double, V2 As Double) As Double If (V1 <= V2) Then Min = V1 Else Min = V2 End If End Function Function ConvertToLetter(iCol As Long) As String 'แปลง เลข Column เปน ตวอกษร '----------------------------------------------------------------------------- ' Procedure : ConvertToLetter ' Author : Niall - Zypher.co.uk ' Purpose : Convert a number to a column letter ' Tested to 256 columns, assumed to work until 702 (ZZ) '----------------------------------------------------------------------------- ' If iCol <= 26 Then ' Columns A-Z ConvertToLetter = Chr(iCol + 64) Else ConvertToLetter = Chr(Int((iCol - 1) / 26) + 64) & _ Chr(((iCol - 1) Mod 26) + 65) End If End Function 2. Modules Google Public Sub DistanceBetweenPlace() 'ระยะระหวางจด ดวย google Map

Page 67: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

59

Dim NumPlace As Long Dim Latitude_Longitude() As String Dim iIndex As Long Dim rCustomer As Range, rDistance As Range Dim start As Long, FinisH As Long Dim str1 As String, str2 As String Dim sDistanceAndTime As String, sDistance As String, dDistance As Double Dim lTemp As Long, sTemp As String Call SetExcelGlobalData

Application.ScreenUpdating = False ' ไมตองให excel ปรบปรงหนาจอ เพอเพมความเรวในการค านวน

wsCalMain.Range("B9").Formula = "=COUNTA('Customer'!F10:F10000)" wsCalMain.Range("B9").value = wsCalMain.Range("B9").Value2 NumPlace = wsCalMain.Range("B9").Value2 'จ านวนสถานท ReDim Latitude_Longitude(1 To NumPlace) As String 'เตรยมขนาด Array ของ Latitude Longitude Set rCustomer = Sheets("Customer").Range("H9") ' ก าหนดต าแหนงอางอง วาอยใน Worksheeet "Customer " cell H9 Set rDistance = Sheets("FromTo").Range("F10") ' ก าหนดต าแหนงอางอง วาอยใน Worksheeet "FromTo " cell F10 ' อานคา Latitude Longitude เกบไวใน Array For iIndex = 1 To NumPlace Latitude_Longitude(iIndex) = rCustomer.Offset(iIndex, 0).value & "," & rCustomer.Offset(iIndex, 1).value Next iIndex resave = 0 For start = 1 To NumPlace

Page 68: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

60

For FinisH = 1 To NumPlace If start = FinisH Then rDistance.Offset(start, FinisH).value = 0 ElseIf rDistance.Offset(start, FinisH) > 0 Then ' Do nothing Else str1 = Latitude_Longitude(start) str2 = Latitude_Longitude(FinisH) 'sDistanceAndTime = get_dis_and_time2(str1, str2) 'lTemp = InStr(1, sDistanceAndTime, " | ") 'sDistance = Right(sDistanceAndTime, Len(sDistanceAndTime) - lTemp - 1) 'rDistance.Offset(start, FinisH).value = CLng(sDistance) sDistanceAndTime = get_dis_and_time2(str1, str2) lTemp = InStr(1, sDistanceAndTime, " | ") sDistance = Right(sDistanceAndTime, Len(sDistanceAndTime) - lTemp - 1) rDistance.Offset(start, FinisH).value = CLng(sDistance) * 0.001 Application.Wait (Now + (1000 * 0.00000001)) ' หนวงเวลา 1 วนาท 'Call GetDistance(str1, str2, dDistance, sTemp) 'rDistance.Offset(start, FinisH).value = dDistance End If Next FinisH Next start Application.StatusBar = False

Page 69: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

61

End Sub Public Function get_dis_and_time2 _ ( _ origin_address As String, _ destination_address As String _ ) ' Read more about Google API's here 'https://developers.google.com/maps/documentation/distancematrix/ ' we will be using Google API Distance Matrix to get Time and distance between two cities. 'https://developers.google.com/maps/documentation/distancematrix/ Dim surl As String Dim oXH As Object Dim bodytxt As String Dim tim_e As String Dim distanc_e As String surl = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & _ Replace(Replace(Replace(origin_address, " ", "+"), ",", "+"), "++", "+") & _ "&destinations=" & _ Replace(Replace(Replace(destination_address, " ", "+"), ",", "+"), "++", "+") & _ "&mode=driving&sensor=false&units=metric" ' units=imperial 'if u want to show distance in kms change unit to metric

Page 70: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

62

'https://developers.google.com/maps/documentation/distancematrix/#unit_systems 'units=metric (default) returns distances in kilometers and meters. 'units=imperial returns distances in miles and feet. Set oXH = CreateObject("msxml2.xmlhttp") With oXH .Open "get", surl, False .send bodytxt = .responseText End With bodytxt = Right(bodytxt, Len(bodytxt) - InStr(1, bodytxt, "<value>") - 6) tim_e = Left(bodytxt, InStr(1, bodytxt, "</value>") - 1) bodytxt = Right(bodytxt, Len(bodytxt) - InStr(1, bodytxt, "<value>") - 6) distanc_e = Left(bodytxt, InStr(1, bodytxt, "</value>") - 1) get_dis_and_time2 = tim_e & " | " & distanc_e Set oXH = Nothing End Function 3. Modules Main Option Explicit

Page 71: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

63

Global wsFromTo As Worksheet, wsCustomer As Worksheet, wsProduct As Worksheet, wsCalMain As Worksheet, wsResult As Worksheet, wsDO As Worksheet Public ArrayOfDistance() As Double 'Array ของระยะทาง เปน Array 2 มต เรมตนจาก Index 0 ถง City_Quant (ม Depot เปน Index 0) Public Sub SetExcelGlobalData() ' ตงคาตวแปร Work Sheet ดวยชอ Set wsFromTo = ActiveWorkbook.Worksheets("FromTo") Set wsCustomer = ActiveWorkbook.Worksheets("Customer") Set wsProduct = ActiveWorkbook.Worksheets("Product") Set wsCalMain = ActiveWorkbook.Worksheets("Cal Main") Set wsResult = ActiveWorkbook.Worksheets("Result") Application.ScreenUpdating = False 'ไม Update หนาจนกวางานเสรจ Application.DisplayAlerts = False 'ไมแสดงการเตอน End Sub Public Sub PrepareOrderTemplate() Dim CustomerAllQty As Long 'จ านวน Customer Dim ProductAllQty As Long 'จ านวน Product Call SetExcelGlobalData 'นบจ านวน Customer ทงหมด wsCalMain.Range("B9").Formula = "=COUNTA('Customer'!F11:F10000)" wsCalMain.Range("B9").value = wsCalMain.Range("B9").Value2 CustomerAllQty = wsCalMain.Range("B9").Value2 'จดท า Drop Down List ใหผใชเลอก รหสลกคา wsCalMain.Activate

Page 72: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

64

wsCalMain.Range("K11").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="='Customer'!$F$11:$F$" & CStr(10 + CustomerAllQty) End With wsCalMain.Range("K11").value = "" 'แสดงชอลกคา wsCalMain.Range("L11").Formula = "=VLOOKUP(K11,Customer!$F$11:$G$" & CStr(10 + CustomerAllQty) & ",2)" 'นบจ านวน Product ทงหมด wsCalMain.Range("B10").Formula = "=COUNTA('Product'!F11:F10000)" wsCalMain.Range("B10").value = wsCalMain.Range("B10").Value2 ProductAllQty = wsCalMain.Range("B10").Value2 'จดท า Drop Down List ใหผใชเลอก รหส Product wsCalMain.Range("M11").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="='Product'!$F$11:$F$" & CStr(10 + ProductAllQty) End With wsCalMain.Range("M11").value = "" 'แสดง กวาง ยาว สง ปรมาตร wsCalMain.Range("N11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",2)" wsCalMain.Range("O11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",3)" wsCalMain.Range("P11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",4)"

Page 73: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

65

wsCalMain.Range("Q11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",5)" wsCalMain.Range("R11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",6)" wsCalMain.Range("S11").Formula = "=Q11*R11" End Sub Private Sub ArrangeSummaryOrder(ByRef OrderAllQty As Long) 'รวมยอด order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน Dim OrderNonDupQty As Long 'จ านวน order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน Dim CustomerID_1 As String, ProductID_1 As String, CustomerID_2 As String, ProductID_2 As String Dim i As Long, j As Long Dim rwsCalMain As Range 'อางอง Cell ใน Sheet Order Dim rwsResult As Range 'นบจ านวน Order ตงตน ทงหมด wsResult.Range("B10").Formula = "=COUNTA('Cal Main'!S11:S10000)" wsResult.Range("B10").value = wsResult.Range("B10").Value2 OrderAllQty = wsResult.Range("B10").Value2 wsCalMain.Range("N9").Formula = "=SUM(T11:T" & wsResult.Range("B10").Value2 + 10 & ")" wsResult.Range("F11:k10000").Delete Shift:=xlUp 'ลบขอมลเดม 'คดลอกขอมลจาก Sheet Order wsResult.Range("F11:F" & CStr(10 + OrderAllQty)).value = wsCalMain.Range("K11:K" & CStr(10 + OrderAllQty)).value

Page 74: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

66

wsResult.Range("G11:G" & CStr(10 + OrderAllQty)).value = wsCalMain.Range("M11:M" & CStr(10 + OrderAllQty)).value wsResult.Range("H11:H" & CStr(10 + OrderAllQty)).value = wsCalMain.Range("R11:R" & CStr(10 + OrderAllQty)).value 'ลบขอมลซ าออก wsResult.Range("$F$10:$H$" & CStr(10 + OrderAllQty)).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes 'นบจ านวน order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน wsResult.Range("B11").Formula = "=COUNTA(F11:F10000)" wsResult.Range("B11").value = wsResult.Range("B11").Value2 OrderNonDupQty = wsResult.Range("B11").Value2 'เรมใสขอมลไมซ า Set rwsCalMain = wsCalMain.Range("J10") Set rwsResult = wsResult.Range("F10") For i = 1 To OrderAllQty 'รวมจ านวน order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน CustomerID_1 = rwsCalMain.Offset(i, 1).value: ProductID_1 = rwsCalMain.Offset(i, 3).value For j = 1 To OrderNonDupQty CustomerID_2 = rwsResult.Offset(j, 0).value: ProductID_2 = rwsResult.Offset(j, 1).value If (CustomerID_1 = CustomerID_2) And (ProductID_1 = ProductID_2) Then rwsResult.Offset(j, 3).value = rwsResult.Offset(j, 3).value + rwsCalMain.Offset(i, 9).value Exit For End If Next j Next i

Page 75: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

67

For j = 1 To OrderNonDupQty 'ค านวนปรมาตร rwsResult.Offset(j, 4).value = rwsResult.Offset(j, 2).value * rwsResult.Offset(j, 3).value rwsResult.Offset(j, 5).value = rwsResult.Offset(j, 4).value Next j ' เรยงจาก Customer ID แลวตามดวย ปรมาตร มาก ไป นอย ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "F11:F" & CStr(10 + OrderNonDupQty)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให รหสสนคา Column F เปน Index ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "K11:K" & CStr(10 + OrderNonDupQty)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให รหสสนคา Column K เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11 .SetRange Range("F11:K" & CStr(10 + OrderNonDupQty)) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub Private Sub FullCarLoad(maxCarLoader As Double) 'จดเตมรถ Dim OrderNonDupQty As Long 'จ านวน order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน

Page 76: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

68

Dim RowProductReadNow As Long 'จ านวนแถวทอาน Dim CarUseNow As Long 'จ านวนรถทใช Dim RowWriteUseNow As Long 'จ านวนแถวทเขยน Dim rOrderNonDup As Range 'อางอง รวมยอด order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน Dim rOrderFullCar_1Customer_1Product As Range 'อางอง จดแบบเตมเทยว ผลตภณฑชนดเดยว Dim rOrderFullCar_1Customer_manyProduct As Range 'อางอง จดแบบเตมเทยว ผลตภณฑชนดเดยว Dim bCanLoad As Boolean Dim BoxMaxQtyForCar As Long 'จ านวนกลองสงสดทจดใสรถได Dim BoxRemainQty As Long 'จ านวนกลองทเหลอ Dim BoxLoadQty As Long, BoxLoadVolumn As Double 'กลองท ยกขนรถได, ปรมาตรท ยกขนรถได Dim TotalCustomerVolumn As Double ' ปรมาตรสนคาของลกคา Dim BoxSize As Double 'ปรมาตรกลอง Dim ContainerReaminV As Double 'ปรมาตรในตทคงเหลอ Dim CustomerQty As Long 'จ านวนลกคา Dim i As Long, indexProduct As Long Dim rRemainProduct_ByCustomer As Range 'อางอง ปรมาตร คงเหลอ รวม Dim DistanceTotal As Double 'ระยะทาง

Page 77: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

69

OrderNonDupQty = wsResult.Range("B11").Value2 Set rOrderNonDup = wsResult.Range("F10") Set rOrderFullCar_1Customer_1Product = wsResult.Range("O10") '*************************************************** 'จดแบบ Product เดยวเตมคนกอน '*************************************************** wsResult.Range("N11:U10000").Delete Shift:=xlUp 'ลบขอมลเดม CarUseNow = 0: RowWriteUseNow = 0 ''จ านวนรถทใช, จ านวนแถวทเขยน RowProductReadNow = 1 Do bCanLoad = False For i = RowProductReadNow To OrderNonDupQty BoxSize = rOrderNonDup.Offset(i, 2).value BoxMaxQtyForCar = Int(maxCarLoader / BoxSize) If BoxMaxQtyForCar <= Round(rOrderNonDup.Offset(i, 5).value / BoxSize, 0) Then 'บรรจไดเตมคน rOrderNonDup.Offset(i, 5).value = rOrderNonDup.Offset(i, 5).value - BoxMaxQtyForCar * BoxSize 'หกปรมาณทสงเตมรถ CarUseNow = CarUseNow + 1: RowWriteUseNow = RowWriteUseNow + 1 'เพมเลขรถทใช rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, -1).value = NameCustomerToIndex(rOrderNonDup.Offset(i, 0).value)

Page 78: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

70

rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 0).value = rOrderNonDup.Offset(i, 0).value rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 1).value = rOrderNonDup.Offset(i, 1).value rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 2).value = BoxSize rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 2).NumberFormat = "#,##0" rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 3).value = BoxMaxQtyForCar rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 4).value = BoxMaxQtyForCar * BoxSize rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 4).NumberFormat = "#,##0" rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 5).value = CarUseNow wsFromTo.Range("I3").value = 0 wsFromTo.Range("I4").value = rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, -1).value DistanceTotal = wsFromTo.Range("I5").value 'ระยะทางขาไป 'รวมระยะทางขากลบ wsFromTo.Range("I4").value = 0: wsFromTo.Range("I3").value = rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, -1).value DistanceTotal = DistanceTotal + wsFromTo.Range("I5").value rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 6).value = DistanceTotal rOrderFullCar_1Customer_1Product.Offset(RowWriteUseNow, 6).NumberFormat = "#,##0.00"

Page 79: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

71

If rOrderNonDup.Offset(i, 5).value < maxCarLoader Then 'บรรจไดไมเตมคน ไปอานบรรทด ถดไป RowProductReadNow = RowProductReadNow + 1 End If bCanLoad = True 'จดรถได Exit For End If Next i Loop Until (bCanLoad = False) wsResult.Range("B17").value = CarUseNow wsResult.Range("C17").value = CarUseNow '*************************************************** 'จดแบบหลาย Product ลกคาคนเดยว '*************************************************** wsResult.Range("Y11:AB10000").Delete Shift:=xlUp 'ลบขอมลเดม wsResult.Range("Y11:Y" & CStr(10 + OrderNonDupQty)).value = wsResult.Range("F11:F" & CStr(10 + OrderNonDupQty)).value 'ลบขอมลซ าออก wsResult.Range("$Y$10:$Y$" & CStr(10 + OrderNonDupQty)).RemoveDuplicates Columns:=1, Header:=xlYes wsResult.Range("B14").Formula = "=COUNTA(Y11:Y10000)": wsResult.Range("B14").value = wsResult.Range("B14").Value2 'นบจ านวนลกคา CustomerQty = wsResult.Range("B14").value 'นบจ านวนผลตภณฑทลกคาคงเหลอ wsResult.Range("Z11").Formula = "=SUMIF($F$11:$F$" & CStr(10 + OrderNonDupQty) & ",Y11,$K$11:$K$" & CStr(10 + OrderNonDupQty) & ")": 'จ านวนปรมาตร Product ของลกคา wsResult.Range("AA11").Formula = "=MATCH(Y11,$F$11:$F$" & CStr(10 + OrderNonDupQty) & ",0)" 'Index เรมตนของลกคา

Page 80: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

72

If (CustomerQty > 1) Then wsResult.Range("Z11:AA11").Copy Destination:=wsResult.Range("Z12:AA" & CStr(10 + CustomerQty)) End If wsResult.Range("Z11:AA" & CStr(10 + CustomerQty)).value = wsResult.Range("Z11:AA" & CStr(10 + CustomerQty)).Value2 For i = 1 To CustomerQty - 1 'Index ปลายของลกคา wsResult.Range("AB" & CStr(10 + i)).value = wsResult.Range("AA" & CStr(10 + i + 1)).value - 1 Next i wsResult.Range("AB" & CStr(10 + CustomerQty)).value = OrderNonDupQty Set rRemainProduct_ByCustomer = wsResult.Range("Y10") Set rOrderFullCar_1Customer_manyProduct = wsResult.Range("AH10") wsResult.Range("AG11:AN10000").Delete Shift:=xlUp 'ลบขอมลเดม CarUseNow = 1: RowWriteUseNow = 0 ''จ านวนรถทใช, จ านวนแถวทเขยน For i = 1 To CustomerQty 'จดการไปทละลกคา ContainerReaminV = maxCarLoader Do While (rRemainProduct_ByCustomer.Offset(i, 1).value >= maxCarLoader) 'CarUseNow = CarUseNow + 1 For indexProduct = rRemainProduct_ByCustomer.Offset(i, 2).value To rRemainProduct_ByCustomer.Offset(i, 3).value BoxSize = rOrderNonDup.Offset(indexProduct, 2).value BoxLoadQty = Int(rOrderNonDup.Offset(indexProduct, 5).value / BoxSize) 'จ านวนกลอง สนคาทม BoxMaxQtyForCar = Application.Min(Int(ContainerReaminV / BoxSize), BoxLoadQty)

Page 81: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

73

If BoxMaxQtyForCar > 0 Then 'จดขนรถได rOrderNonDup.Offset(indexProduct, 5).value = rOrderNonDup.Offset(indexProduct, 5).value - BoxMaxQtyForCar * BoxSize 'หกปรมาณทสงขนรถ rRemainProduct_ByCustomer.Offset(i, 1).value = rRemainProduct_ByCustomer.Offset(i, 1).value - BoxMaxQtyForCar * BoxSize 'หกปรมาณทสงขนรถ RowWriteUseNow = RowWriteUseNow + 1 'เพมเลขบรรทดทใช rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, -1).value = NameCustomerToIndex(rOrderNonDup.Offset(indexProduct, 0).value) rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 0).value = rOrderNonDup.Offset(indexProduct, 0).value rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 1).value = rOrderNonDup.Offset(indexProduct, 1).value rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 2).value = BoxSize rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 2).NumberFormat = "#,##0" rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 3).value = BoxMaxQtyForCar rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 4).value = BoxMaxQtyForCar * BoxSize rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 4).NumberFormat = "#,##0" rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 5).value = CarUseNow

Page 82: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

74

ContainerReaminV = ContainerReaminV - BoxMaxQtyForCar * BoxSize If (ContainerReaminV < BoxSize) Then 'จดไดเตมรถ เพมเลขรถ wsFromTo.Range("I3").value = 0: wsFromTo.Range("I4").value = rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, -1).value DistanceTotal = wsFromTo.Range("I5").value 'ระยะทางขาไป 'รวมระยะทางขากลบ wsFromTo.Range("I4").value = 0: wsFromTo.Range("I3").value = rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, -1).value DistanceTotal = DistanceTotal + wsFromTo.Range("I5").value rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 6).value = DistanceTotal rOrderFullCar_1Customer_manyProduct.Offset(RowWriteUseNow, 6).NumberFormat = "#,##0.00" ContainerReaminV = maxCarLoader CarUseNow = CarUseNow + 1 End If End If Next indexProduct Loop Next i End Sub Private Function SummaryAndArrangrCustomerRemain() As Long 'จดการ ลบลกคาท ปรมาตร คงเหลอ รวม = 0 แลวคนคาลกคาทเหลอ Dim i As Long Dim numCustomer As Long, numRow As Long

Page 83: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

75

wsResult.Range("B4").Formula = "=COUNTA(Y11:Y10000)": wsResult.Range("B4").value = wsResult.Range("B4").Value2 numCustomer = wsResult.Range("B4").value: numRow = numCustomer For i = numRow To 1 Step -1 If Round(wsResult.Range("Z" & CStr(10 + i)).value, 0) <= 0 Then 'คาเปน 0 ลบทง wsResult.Range("Y" & CStr(10 + i) & ":AB" & CStr(10 + i)).Delete Shift:=xlUp 'ลบขอมลเดม numCustomer = numCustomer - 1 End If Next i SummaryAndArrangrCustomerRemain = numCustomer End Function Private Sub NearestNeighborLoad(maxCarLoader As Double, maxDistance As Double) Dim CustomerQty As Long Dim rRemainTotalProduct_ByCustomer As Range Dim rOrderNonDup As Range Dim rOrderCarLoadProduct As Range Dim CarUseNow As Long, RowWriteUseNow As Long Dim Station_Start As Long, Station_End As Long 'station เรม-ปลาย Dim indexProduct_Start As Long, indexProduct_End As Long Dim Nearless_Distance As Double 'ระยะทางทสนสด Dim Nearless_Station As Long 'Station ระยะทางทสนสด Dim ContainerReaminV As Double 'พนท ทเหลอในต

Page 84: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

76

Dim aCustomerIndexArray() As Long 'Index ลกคาทยงเหลอการขน Dim i_custom As Long Dim i_customer_total As Long, i_customer_detailStart As Long, i_customer_detailEnd As Long Dim rowCustomerTotal As Long, tmpLong2 As Long Dim bFoundBetter As Boolean 'เจอสถานใหมทสนกวา Dim BoxRemainQty As Long 'จ านวนกลองทเหลอ Dim BoxLoadQty As Long, BoxLoadVolumn As Double 'กลองท ยกขนรถได, ปรมาตรท ยกขนรถได Dim BoxMaxQtyForCar As Long Dim TotalCustomerVolumn As Double ' ปรมาตรสนคาของลกคา Dim totalDistanceNotReturnToDepot As Double, TestDistance As Double 'ระยะทาง Dim CustomerInCar As Long 'จ านวนชนดสนคา Dim sConstrainBy As String 'จ ากดโดย Dim BoxSize As Double 'ปรมาตรกลอง Dim i As Long, j As Long, m As Long, n As Long Dim indexProduct As Long Dim aStation() As Long 'ลกคาทจดสง Set rOrderNonDup = wsResult.Range("F10") Set rRemainTotalProduct_ByCustomer = wsResult.Range("Y10") Set rOrderCarLoadProduct = wsResult.Range("AS10") wsResult.Range("AR11:AZ10000").Delete Shift:=xlUp 'ลบขอมลเดม CustomerQty = SummaryAndArrangrCustomerRemain()

Page 85: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

77

ReDim aCustomerIndexArray(1 To CustomerQty) 'เตรยมขนาด Array เทากบจ านวนลกคา Set rRemainTotalProduct_ByCustomer = wsResult.Range("Y10") wsResult.Range("Z6").Formula = "=MATCH(Y6,Y11:Y10000,0)" 'ใสสตรคนหาล าดบทจากชอ CarUseNow = 1: RowWriteUseNow = 0 ''จ านวนรถทใช, จ านวนแถวทเขยน Do While (CustomerQty > 0) ContainerReaminV = maxCarLoader CustomerInCar = 0 For i_custom = 1 To CustomerQty aCustomerIndexArray(i_custom) = NameCustomerToIndex(rRemainTotalProduct_ByCustomer.Offset(i_custom, 0).value) 'เรม ใส Index ใน Array Next i_custom 'เรมหา NearLess Station_Start = 0 'เรมท Depot กอน totalDistanceNotReturnToDepot = 0 sConstrainBy = "Constrain by Volumn" 'คดวาจ ากดโดย Volumn ไวกอน Do Nearless_Distance = 1E+99 bFoundBetter = False 'คดวาหาตวสนกวาไมเจอ For i = 1 To UBound(aCustomerIndexArray) wsResult.Range("Y6").value = IndexCustomerToName(aCustomerIndexArray(i)) rowCustomerTotal = wsResult.Range("Z6")

Page 86: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

78

indexProduct_Start = rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 2).value indexProduct_End = rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 3).value If (rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 1).value <= ContainerReaminV) And (rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 1).value > 0) Then If (ArrayOfDistance(Station_Start, aCustomerIndexArray(i)) < Nearless_Distance) Then Nearless_Station = aCustomerIndexArray(i) Nearless_Distance = ArrayOfDistance(Station_Start, aCustomerIndexArray(i)) bFoundBetter = True 'เจอ Station ทสนกวา End If End If Next i If bFoundBetter = True Then 'เจอ Station ทสนกวา เขยน Data totalDistanceNotReturnToDepot = totalDistanceNotReturnToDepot + Nearless_Distance TestDistance = totalDistanceNotReturnToDepot + ArrayOfDistance(Nearless_Station, 0) If (maxDistance >= TestDistance) Or (CustomerInCar = 0) Then 'จดสงได ทงทระยะไมเกน และระยะเกน

Page 87: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

79

wsResult.Range("Y6").value = IndexCustomerToName(Nearless_Station) rowCustomerTotal = wsResult.Range("Z6") 'เจอแถวท indexProduct_Start = rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 2).value indexProduct_End = rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 3).value For indexProduct = indexProduct_Start To indexProduct_End BoxSize = rOrderNonDup.Offset(indexProduct, 2).value BoxLoadQty = CLng(Round(rOrderNonDup.Offset(indexProduct, 5).value, 8) / BoxSize) 'จ านวนกลอง สนคาทม BoxMaxQtyForCar = Application.Min(Int(ContainerReaminV / BoxSize), BoxLoadQty) If BoxMaxQtyForCar > 0 Then 'จดขนรถได rOrderNonDup.Offset(indexProduct, 5).value = Round(rOrderNonDup.Offset(indexProduct, 5).value - BoxMaxQtyForCar * BoxSize, 6) 'หกปรมาณทสงขนรถ rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 1).value = Round(rRemainTotalProduct_ByCustomer.Offset(rowCustomerTotal, 1).value - BoxMaxQtyForCar * BoxSize, 6) 'หกปรมาณทสงขนรถ RowWriteUseNow = RowWriteUseNow + 1 'เพมเลขบรรทดทใช rOrderCarLoadProduct.Offset(RowWriteUseNow, -1).value = NameCustomerToIndex(rOrderNonDup.Offset(indexProduct, 0).value) rOrderCarLoadProduct.Offset(RowWriteUseNow, 0).value = rOrderNonDup.Offset(indexProduct, 0).value

Page 88: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

80

rOrderCarLoadProduct.Offset(RowWriteUseNow, 1).value = rOrderNonDup.Offset(indexProduct, 1).value rOrderCarLoadProduct.Offset(RowWriteUseNow, 2).value = BoxSize rOrderCarLoadProduct.Offset(RowWriteUseNow, 2).NumberFormat = "#,##0" rOrderCarLoadProduct.Offset(RowWriteUseNow, 3).value = BoxMaxQtyForCar rOrderCarLoadProduct.Offset(RowWriteUseNow, 4).value = BoxMaxQtyForCar * BoxSize rOrderCarLoadProduct.Offset(RowWriteUseNow, 4).NumberFormat = "#,##0" rOrderCarLoadProduct.Offset(RowWriteUseNow, 5).value = CarUseNow ContainerReaminV = ContainerReaminV - BoxMaxQtyForCar * BoxSize Else End If Next indexProduct CustomerInCar = CustomerInCar + 1 Station_Start = Nearless_Station 'จดปลาย เปนจดเรม End If End If If (maxDistance < TestDistance) Then 'จดสงได ทงทระยะเกน sConstrainBy = "Constrain by Distance" bFoundBetter = False

Page 89: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

81

End If Loop Until bFoundBetter = False rOrderCarLoadProduct.Offset(RowWriteUseNow, 7).value = sConstrainBy 'จดไดเตมรถ เพมเลขรถ CustomerQty = SummaryAndArrangrCustomerRemain() If CustomerQty > 0 Then ReDim aCustomerIndexArray(1 To CustomerQty) End If ContainerReaminV = maxCarLoader CarUseNow = CarUseNow + 1 Loop wsResult.Range("B19").value = CarUseNow - 1 'จ านวนรถ wsResult.Range("C19").value = RowWriteUseNow wsResult.Range("Z6").ClearContents 'ลบสตรออกลดการค านวน For i = 1 To CarUseNow - 1 RowWriteUseNow = ReadStationInCar("AX", "AR", i, aStation) rOrderCarLoadProduct.Offset(RowWriteUseNow - 10, 6).value = Tour_Distance(aStation) rOrderCarLoadProduct.Offset(RowWriteUseNow - 10, 6).NumberFormat = "#,##0.00" 'rOrderCarLoadProduct.Offset(RowWriteUseNow, 6).value Next i End Sub Public Sub FindSolution() Dim maxCarLoader As Double 'ปรมาตรรถสงสดทบรรทกได Dim maxDistance As Double 'ระยะทางสงสดทเดนทาง

Page 90: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

82

Dim OrderAllQty As Long 'จ านวน Order ตงตน ทงหมด Dim City_Quant As Long Dim ResultArray As Variant Dim time1 As Double Dim time2 As Double Dim rDistanceMatrix As Range Dim i As Long, j As Long Call SetExcelGlobalData Call ArrangeSummaryOrder(OrderAllQty) 'รวมยอด order ทสงลกคา เจาเดยวกน และ เปนผลตภณฑอนเดยวกน wsResult.Range("B17:C19").ClearContents 'ลางขอมลสรปจ านวนรถ maxCarLoader = wsCalMain.Range("P6").value maxDistance = wsCalMain.Range("Q6").value City_Quant = Worksheets("FromTo").Range("G12:G10000").Cells.SpecialCells(xlCellTypeConstants).Count Set rDistanceMatrix = wsFromTo.Range("G11") ReDim ArrayOfDistance(0 To City_Quant, 0 To City_Quant) For i = 0 To City_Quant 'ใสขอมลจาก Depot ถงลกคา For j = 0 To City_Quant ArrayOfDistance(i, j) = rDistanceMatrix.Offset(i, j).value Next j Next i

Page 91: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

83

Call FullCarLoad(maxCarLoader) 'ค านวน ระยะทาง ขนเตมเทยว Product เดยว wsResult.Range("U8").Formula = "=SUM(U11:U10000)": wsResult.Range("U8").value = wsResult.Range("U8").value wsResult.Range("U8").NumberFormat = "#,##0.00" 'ค านวน ระยะทาง ขนเตมเทยวหลาย Product wsResult.Range("AN8").Formula = "=SUM(AN11:AN10000)": wsResult.Range("AN8").value = wsResult.Range("AN8").value wsResult.Range("AN8").NumberFormat = "#,##0.00" Call NearestNeighborLoad(maxCarLoader, maxDistance) 'ค านวน ระยะทาง wsResult.Range("AY8").Formula = "=SUM(AY11:AY10000)": wsResult.Range("AY8").value = wsResult.Range("AY8").value wsResult.Range("AY8").NumberFormat = "#,##0.00" time1 = Timer Call Cal3OptLoad 'ค านวน ระยะทาง wsResult.Range("BK8").Formula = "=SUM(BK11:BK10000)": wsResult.Range("BK8").value = wsResult.Range("BK8").value wsResult.Range("BK8").NumberFormat = "#,##0.00" time2 = Timer wsCalMain.Range("R4").value = time2 - time1 time1 = Timer Call CalSALoad 'ค านวน ระยะทาง wsResult.Range("BW8").Formula = "=SUM(BW11:BW10000)": wsResult.Range("BW8").value = wsResult.Range("BW8").value wsResult.Range("BW8").NumberFormat = "#,##0.00" time2 = Timer

Page 92: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

84

wsCalMain.Range("S4").value = time2 - time1 End Sub Private Function IndexCustomerToName(indexCustomer As Long) As String 'ใส Index ลกคา แปลงเปนชอ wsFromTo.Range("N3").value = indexCustomer IndexCustomerToName = wsFromTo.Range("M3").value End Function Private Function NameCustomerToIndex(CustomerName As String) As Long 'ใส ชอลกคา แปลงเปน Index wsFromTo.Range("M4").value = CustomerName NameCustomerToIndex = wsFromTo.Range("N4").value End Function 'Private Function ArrayOfDistance(StartIndex As Long, EndIndex As Long) As Double 'wsFromTo.Range("I3").value = StartIndex 'wsFromTo.Range("I4").value = EndIndex ' ArrayOfDistance = wsFromTo.Range("I5").value 'End Function Private Function DistanceByName(StartStationName As String, EndStationName As String) As Double wsFromTo.Range("F3").value = StartIndex wsFromTo.Range("F4").value = EndIndex ArrayOfDistance = wsFromTo.Range("F5").value End Function Public Function Tour_Distance(ArrayTour As Variant) As Double 'ระยะทางทงหมดวนรอบจนกลบ Depot

Page 93: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

85

Dim LB As Long, UB As Long, i As Long Dim BeginStation As Long, totalDistance As Double LB = LBound(ArrayTour): UB = UBound(ArrayTour) 'ขอบเขต ของ Array totalDistance = 0: BeginStation = 0 If LB <= UB Then For i = LB To UB totalDistance = totalDistance + ArrayOfDistance(BeginStation, CLng(ArrayTour(i))) BeginStation = ArrayTour(i) Next i totalDistance = totalDistance + ArrayOfDistance(BeginStation, 0) End If Tour_Distance = totalDistance End Function Public Function ReadStationInCar(sCar As String, sStationID As String, carNo As Long, ResultArray As Variant) As Long 'อานคาสถานจากแถวทก าหนด คนคาแถวสดทาย Dim row As Long, rowFinal As Long Dim stationOld As Long Dim numStation As Long row = 11: numStation = 0: stationOld = 100000 Do While CLng(wsResult.Range(sCar & CStr(row)).value) <> 0 If wsResult.Range(sCar & CStr(row)).value = carNo Then If wsResult.Range(sStationID & CStr(row)).value <> stationOld Then numStation = numStation + 1 stationOld = wsResult.Range(sStationID & CStr(row)).value

Page 94: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

86

End If Else If (wsResult.Range(sCar & CStr(row)).value > carNo) Then 'Or (CLng(wsResult.Range(sCar & CStr(row)).value) = 0) Exit Do End If End If row = row + 1 Loop rowFinal = row - 1 ReDim ResultArray(1 To numStation) row = 11: numStation = 0: stationOld = 100000 For row = 11 To rowFinal If wsResult.Range(sCar & CStr(row)).value = carNo And wsResult.Range(sStationID & CStr(row)).value <> stationOld Then numStation = numStation + 1 ResultArray(numStation) = wsResult.Range(sStationID & CStr(row)).value stationOld = wsResult.Range(sStationID & CStr(row)).value End If Next row ReadStationInCar = rowFinal End Function Public Sub PrepareDataInputTemplate() Dim CustomerAllQty As Long 'จ านวน Customer Dim ProductAllQty As Long 'จ านวน Product

Page 95: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

87

Call SetExcelGlobalData 'นบจ านวน Customer ทงหมด wsCalMain.Range("B9").Formula = "=COUNTA('Customer'!F11:F10000)" wsCalMain.Range("B9").value = wsCalMain.Range("B9").Value2 CustomerAllQty = wsCalMain.Range("B9").Value2 'จดท า Drop Down List ใหผใชเลอก รหสลกคา 'wsCalMain.Activate wsCalMain.Range("K11").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="='Customer'!$F$11:$F$" & CStr(10 + CustomerAllQty) End With ' wsCalMain.Range("C1").value = "" 'แสดงชอลกคา wsCalMain.Range("L11").Formula = "=VLOOKUP(K11,Customer!$F$11:$G$" & CStr(10 + CustomerAllQty) & ",2)" 'นบจ านวน Product ทงหมด wsCalMain.Range("B10").Formula = "=COUNTA('Product'!F11:F10000)" wsCalMain.Range("B10").value = wsCalMain.Range("B10").Value2 ProductAllQty = wsCalMain.Range("B10").Value2 'จดท า Drop Down List ใหผใชเลอก รหส Product wsCalMain.Range("M11").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="='Product'!$F$11:$F$" & CStr(10 + ProductAllQty) End With

Page 96: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

88

'แสดง ชอผลตภณฑ กวาง ยาว สง ปรมาตร wsCalMain.Range("N11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",2)" wsCalMain.Range("O11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",3)" wsCalMain.Range("P11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",4)" wsCalMain.Range("Q11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",5)" wsCalMain.Range("R11").Formula = "=VLOOKUP(M11,Product!$F$11:$K$" & CStr(10 + ProductAllQty) & ",6)" wsCalMain.Range("T11").Formula = "=R11*S11" 'ลางคา wsCalMain.Range("K11").value = "" wsCalMain.Range("M11").value = "" wsCalMain.Range("S11").value = "" wsCalMain.Range("K11:T11").Copy Destination:=wsCalMain.Range("K12:K1010") End Sub Public Sub CreateFromToLabel() Dim CustomerAllQty As Long 'จ านวนลกคาไมรวม Depot Dim DestinationQty As Long 'จ านวนลกคารวม Depot Dim tmpColName As String 'ชอ Col แบบตวอกษร Call SetExcelGlobalData 'นบจ านวน Customer ทงหมด wsCalMain.Range("B9").Formula = "=COUNTA('Customer'!F11:F10000)"

Page 97: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

89

wsCalMain.Range("B9").value = wsCalMain.Range("B9").Value2 CustomerAllQty = wsCalMain.Range("B9").Value2 DestinationQty = CustomerAllQty + 1 wsFromTo.Range("F12:SS10000").Clear wsFromTo.Range("H10:SS11").Clear wsFromTo.Range("F10:G11").ClearContents wsFromTo.Range("F11").Copy Destination:=wsFromTo.Range("F" & CStr(11) & ":F" & CStr(10 + DestinationQty)) tmpColName = ConvertToLetter(6 + DestinationQty) wsFromTo.Range("F11").Copy Destination:=wsFromTo.Range("G10:" & tmpColName & CStr(10)) wsFromTo.Range("G11").Copy Destination:=wsFromTo.Range("G11:" & tmpColName & CStr(10 + DestinationQty)) wsFromTo.Range("F11:F" & CStr(10 + DestinationQty)).value = wsCustomer.Range("F10:F" & CStr(10 + DestinationQty - 1)).value wsFromTo.Range("G10:" & tmpColName & CStr(10)).value = Application.Transpose(wsCustomer.Range("F10:F" & CStr(10 + DestinationQty - 1)).value) End Sub 4. Modules Metrix Option Explicit Public Const C_ERR_NO_ERROR = 0& Public Const C_ERR_SUBSCRIPT_OUT_OF_RANGE = 9& Public Const C_ERR_ARRAY_IS_FIXED_OR_LOCKED = 10&

Page 98: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

90

Public Sub ArrayDeleteByIndex(ArrayOrg As Variant, value As Long) 'ลบสมาชก Array จากคาทก าหนด Dim LB As Long, UB As Long, indexFound As Long Dim ArrayTemp() As Long Dim found As Boolean Dim i As Long LB = LBound(ArrayOrg): UB = UBound(ArrayOrg) 'ขอบเขต ของ Array If LB < UB Then ReDim ArrayTemp(LB To UB) For i = LB To UB 'คดลอกคามายง ArrayTemp ArrayTemp(i) = ArrayOrg(i) Next i ReDim ArrayOrg(LB To (UB - 1)) 'ลดคา ArrayOrg ลง 1 i = LB: found = False Do Until found = True If (ArrayTemp(i) = value) Then indexFound = i found = True Else ArrayOrg(i) = ArrayTemp(i) End If i = i + 1 Loop For i = indexFound To UB - 1 ArrayOrg(i) = ArrayTemp(i + 1)

Page 99: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

91

Next i Else ReDim ArrayOrg(0) End If End Sub Public Sub ArrayInsertByIndex(ArrayOrg As Variant, Index As Long, value As Long) 'เพมสมาชก Array จากคาทก าหนด Dim LB As Long, UB As Long, indexFound As Long Dim ArrayTemp() As Long Dim found As Boolean Dim i As Long LB = LBound(ArrayOrg): UB = UBound(ArrayOrg) 'ขอบเขต ของ Array If LB < UB Then ReDim ArrayTemp(LB To UB) For i = LB To UB 'คดลอกคามายง ArrayTemp ArrayTemp(i) = ArrayOrg(i) Next i ReDim ArrayOrg(LB To (UB + 1)) 'เพมคา ArrayOrg ขน 1 ArrayOrg(Index) = value For i = LB To Index - 1 ArrayOrg(i) = ArrayTemp(i) Next i For i = Index + 1 To UB + 1 ArrayOrg(i) = ArrayTemp(i - 1) Next i

Page 100: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

92

Else ReDim ArrayOrg(0) End If End Sub Public Sub Array_Copy(OriginArray As Variant, TargetArray As Variant) 'ส าหรบ Copy Array Dim LB As Long, UB As Long 'ขนาด Array Dim i As Integer LB = LBound(OriginArray) UB = UBound(OriginArray) 'อานขนาด Array ReDim TargetArray(LB To UB) For i = LB To UB TargetArray(i) = OriginArray(i) Next i End Sub Public Sub SwapBit(CustomerArray As Variant, ByVal StartIndex As Long, ByVal EndIndex As Long) ' สลบแบบ Opt Dim i As Long, tmpLong As Long, tmpIndexLower As Long For i = 1 To ((EndIndex - StartIndex + 1) \ 2) tmpIndexLower = StartIndex + i - 1 tmpLong = CustomerArray(tmpIndexLower) CustomerArray(tmpIndexLower) = CustomerArray(EndIndex) CustomerArray(EndIndex) = tmpLong EndIndex = EndIndex - 1 Next i End Sub

Page 101: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

93

Public Function FindStationInArray(ArrayOrg As Variant, valueSearch As Long) As Long 'คนต าแหนว Array จาก Station ทก าหนด Dim LB As Long, UB As Long, indexFound As Long Dim i As Long LB = LBound(ArrayOrg): UB = UBound(ArrayOrg) 'ขอบเขต ของ Array If LB <= UB Then For i = LB To UB 'คดลอกคามายง ArrayTemp If valueSearch = ArrayOrg(i) Then FindStationInArray = i Exit Function End If Next i End If FindStationInArray = 0 End Function Public Function CopyArraySubSetToArray(InputArray As Variant, ResultArray As Variant, _ FirstElementToCopy As Long, LastElementToCopy As Long, DestinationElement As Long) As Boolean ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' CopyArraySubSetToArray ' This function copies elements of InputArray to ResultArray. It takes the elements ' from FirstElementToCopy to LastElementToCopy (inclusive) from InputArray and ' copies them to ResultArray, starting at DestinationElement. Existing data in ' ResultArray will be overwrittten. If ResultArray is a dynamic array, it will ' be resized if needed. If ResultArray is a static array and it is not large ' enough to copy all the elements, no elements are copied and the function

Page 102: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

94

' returns False. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim SrcNdx As Long Dim DestNdx As Long Dim NumElementsToCopy As Long ''''''''''''''''''''''''''''''''''''''''' ' Set the default return value. ''''''''''''''''''''''''''''''''''''''''' CopyArraySubSetToArray = False '''''''''''''''''''''''''''''''''''''''''' ' Ensure InputArray and ResultArray are ' arrays. '''''''''''''''''''''''''''''''''''''''''' If IsArray(InputArray) = False Then Exit Function End If If IsArray(ResultArray) = False Then Exit Function End If ''''''''''''''''''''''''''''''''''''''''''' ' Ensure InputArray is single dimensional. ''''''''''''''''''''''''''''''''''''''''''' If NumberOfArrayDimensions(Arr:=InputArray) <> 1 Then Exit Function End If ''''''''''''''''''''''''''''''''''''''''''' ' Ensure ResultArray is unallocated or ' single dimensional.

Page 103: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

95

''''''''''''''''''''''''''''''''''''''''''' If NumberOfArrayDimensions(Arr:=ResultArray) > 1 Then Exit Function End If '''''''''''''''''''''''''''''''''''''''''''' ' Ensure the bounds and indexes are valid. '''''''''''''''''''''''''''''''''''''''''''' If FirstElementToCopy < LBound(InputArray) Then Exit Function End If If LastElementToCopy > UBound(InputArray) Then Exit Function End If If FirstElementToCopy > LastElementToCopy Then Exit Function End If ''''''''''''''''''''''''''''''''''''''''' ' Calc the number of elements we'll copy ' from InputArray to ResultArray. ''''''''''''''''''''''''''''''''''''''''' NumElementsToCopy = LastElementToCopy - FirstElementToCopy + 1 If IsArrayDynamic(Arr:=ResultArray) = False Then If (DestinationElement + NumElementsToCopy - 1) > UBound(ResultArray) Then ''''''''''''''''''''''''''''''''''''''''''''' ' ResultArray is static and can't be resized. ' There is not enough room in the array to ' copy all the data.

Page 104: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

96

''''''''''''''''''''''''''''''''''''''''''''' Exit Function End If Else '''''''''''''''''''''''''''''''''''''''''''' ' ResultArray is dynamic and can be resized. ' Test whether we need to resize the array, ' and resize it if required. ''''''''''''''''''''''''''''''''''''''''''''' If IsArrayEmpty(Arr:=ResultArray) = True Then ''''''''''''''''''''''''''''''''''''''' ' ResultArray is unallocated. Resize it ' to DestinationElement + NumElementsToCopy - 1. ' This provides empty elements to the left ' of the DestinationElement and room to ' copy NumElementsToCopy. ''''''''''''''''''''''''''''''''''''''''' ReDim ResultArray(1 To DestinationElement + NumElementsToCopy - 1) Else ''''''''''''''''''''''''''''''''''''''''''''''''' ' ResultArray is allocated. If there isn't room ' enough in ResultArray to hold NumElementsToCopy ' starting at DestinationElement, we need to ' resize the array. ''''''''''''''''''''''''''''''''''''''''''''''''' If (DestinationElement + NumElementsToCopy - 1) > UBound(ResultArray) Then If DestinationElement + NumElementsToCopy > UBound(ResultArray) Then '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Resize the ResultArray.

Page 105: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

97

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If NumElementsToCopy + DestinationElement > UBound(ResultArray) Then ReDim Preserve ResultArray(LBound(ResultArray) To UBound(ResultArray) + DestinationElement - 1) Else ReDim Preserve ResultArray(LBound(ResultArray) To UBound(ResultArray) + NumElementsToCopy) End If Else '''''''''''''''''''''''''''''''''''''''''''' ' Resize the array to hold NumElementsToCopy ' starting at DestinationElement. '''''''''''''''''''''''''''''''''''''''''''' ReDim Preserve ResultArray(LBound(ResultArray) To UBound(ResultArray) + NumElementsToCopy - DestinationElement + 2) End If Else '''''''''''''''''''''''''''''''''''''''''''''''''''''' ' The ResultArray is large enough to hold ' NumberOfElementToCopy starting at DestinationElement. ' No need to resize the array. '''''''''''''''''''''''''''''''''''''''''''''''''''''''' End If End If End If ''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copy the elements from InputArray to ResultArray ' Note that there is no type compatibility checking

Page 106: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

98

' when copying the elements. ''''''''''''''''''''''''''''''''''''''''''''''''''' DestNdx = DestinationElement For SrcNdx = FirstElementToCopy To LastElementToCopy If IsObject(InputArray(SrcNdx)) = True Then Set ResultArray(DestNdx) = InputArray(DestNdx) Else On Error Resume Next ResultArray(DestNdx) = InputArray(SrcNdx) On Error GoTo 0 End If DestNdx = DestNdx + 1 Next SrcNdx CopyArraySubSetToArray = True End Function Public Function NumberOfArrayDimensions(Arr As Variant) As Long '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' NumberOfArrayDimensions ' This function returns the number of dimensions of an array. An unallocated dynamic array ' has 0 dimensions. This condition can also be tested with IsArrayEmpty. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim Ndx As Long Dim Res As Long On Error Resume Next ' Loop, increasing the dimension index Ndx, until an error occurs. ' An error will occur when Ndx exceeds the number of dimension ' in the array. Return Ndx - 1.

Page 107: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

99

Do Ndx = Ndx + 1 Res = UBound(Arr, Ndx) Loop Until Err.Number <> 0 NumberOfArrayDimensions = Ndx - 1 End Function Public Function IsArrayDynamic(ByRef Arr As Variant) As Boolean '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' IsArrayDynamic ' This function returns TRUE or FALSE indicating whether Arr is a dynamic array. ' Note that if you attempt to ReDim a static array in the same procedure in which it is ' declared, you'll get a compiler error and your code won't run at all. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim LUBound As Long ' If we weren't passed an array, get out now with a FALSE result If IsArray(Arr) = False Then IsArrayDynamic = False Exit Function End If ' If the array is empty, it hasn't been allocated yet, so we know ' it must be a dynamic array. If IsArrayEmpty(Arr:=Arr) = True Then IsArrayDynamic = True Exit Function

Page 108: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

100

End If ' Save the UBound of Arr. ' This value will be used to restore the original UBound if Arr ' is a single-dimensional dynamic array. Unused if Arr is multi-dimensional, ' or if Arr is a static array. LUBound = UBound(Arr) On Error Resume Next Err.Clear ' Attempt to increase the UBound of Arr and test the value of Err.Number. ' If Arr is a static array, either single- or multi-dimensional, we'll get a ' C_ERR_ARRAY_IS_FIXED_OR_LOCKED error. In this case, return FALSE. ' ' If Arr is a single-dimensional dynamic array, we'll get C_ERR_NO_ERROR error. ' ' If Arr is a multi-dimensional dynamic array, we'll get a ' C_ERR_SUBSCRIPT_OUT_OF_RANGE error. ' ' For either C_NO_ERROR or C_ERR_SUBSCRIPT_OUT_OF_RANGE, return TRUE. ' For C_ERR_ARRAY_IS_FIXED_OR_LOCKED, return FALSE. ReDim Preserve Arr(LBound(Arr) To LUBound + 1) Select Case Err.Number Case C_ERR_NO_ERROR ' We successfully increased the UBound of Arr. ' Do a ReDim Preserve to restore the original UBound. ReDim Preserve Arr(LBound(Arr) To LUBound) IsArrayDynamic = True

Page 109: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

101

Case C_ERR_SUBSCRIPT_OUT_OF_RANGE ' Arr is a multi-dimensional dynamic array. ' Return True. IsArrayDynamic = True Case C_ERR_ARRAY_IS_FIXED_OR_LOCKED ' Arr is a static single- or multi-dimensional array. ' Return False IsArrayDynamic = False Case Else ' We should never get here. ' Some unexpected error occurred. Be safe and return False. IsArrayDynamic = False End Select End Function Public Function IsArrayEmpty(Arr As Variant) As Boolean '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' IsArrayEmpty ' This function tests whether the array is empty (unallocated). Returns TRUE or FALSE. ' ' The VBA IsArray function indicates whether a variable is an array, but it does not ' distinguish between allocated and unallocated arrays. It will return TRUE for both ' allocated and unallocated arrays. This function tests whether the array has actually ' been allocated. ' ' This function is really the reverse of IsArrayAllocated.

Page 110: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

102

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim LB As Long Dim UB As Long Err.Clear On Error Resume Next If IsArray(Arr) = False Then ' we weren't passed an array, return True IsArrayEmpty = True End If ' Attempt to get the UBound of the array. If the array is ' unallocated, an error will occur. UB = UBound(Arr, 1) If (Err.Number <> 0) Then IsArrayEmpty = True Else '''''''''''''''''''''''''''''''''''''''''' ' On rare occassion, under circumstances I ' cannot reliably replictate, Err.Number ' will be 0 for an unallocated, empty array. ' On these occassions, LBound is 0 and ' UBoung is -1. ' To accomodate the weird behavior, test to ' see if LB > UB. If so, the array is not ' allocated. '''''''''''''''''''''''''''''''''''''''''' Err.Clear LB = LBound(Arr) If LB > UB Then

Page 111: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

103

IsArrayEmpty = True Else IsArrayEmpty = False End If End If End Function 5. Modules Modules 1 Sub Macro1() ' ' Macro1 Macro ' ' Selection.NumberFormat = "#,##0.00" With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With End Sub

Page 112: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

104

6. Modules 3 Opt Option Explicit Public Sub Opt3Swap(CustomerArray As Variant, ByVal Bound1 As Long, ByVal Bound2 As Long, ByVal Bound3 As Long, OptSwapType1_4 As Long) ' สลบแบบ 3 Opt Dim Array1() As Long, Array2() As Long Dim Array1_Size As Long, Array2_Size As Long Dim i As Long, indexNow As Long Array1_Size = Bound2 - Bound1 + 1: Array2_Size = Bound3 - Bound2 ReDim Array1(1 To Array1_Size): ReDim Array2(1 To Array2_Size) 'เตรยมขนาด Array เทากบชวงขอมลท 1 และ 2 indexNow = 1 'เกบขอมล Array ชวง 1 For i = Bound1 To Bound2 Array1(indexNow) = CustomerArray(i): indexNow = indexNow + 1 Next i indexNow = 1 'เกบขอมล Array ชวง 2 For i = Bound2 + 1 To Bound3 Array2(indexNow) = CustomerArray(i): indexNow = indexNow + 1 Next i If (OptSwapType1_4 = 1) Then Call SwapBit(Array1, 1, Array1_Size) indexNow = Bound1 'เขยนคาขอมล Array ชวง 1 For i = 1 To Array1_Size

Page 113: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

105

CustomerArray(indexNow) = Array1(i): indexNow = indexNow + 1 Next i Call SwapBit(Array2, 1, Array2_Size) 'indexNow = Bound2 'เขยนคาขอมล Array ชวง 2 For i = 1 To Array2_Size CustomerArray(indexNow) = Array2(i): indexNow = indexNow + 1 Next i ElseIf (OptSwapType1_4 = 2) Then indexNow = Bound1 'เขยนคาขอมล Array ชวง 1 For i = 1 To Array2_Size CustomerArray(indexNow) = Array2(i): indexNow = indexNow + 1 Next i Call SwapBit(Array1, 1, Array1_Size) 'indexNow = Bound2 'เขยนคาขอมล Array ชวง 2 For i = 1 To Array1_Size CustomerArray(indexNow) = Array1(i): indexNow = indexNow + 1 Next i ElseIf (OptSwapType1_4 = 3) Then Call SwapBit(Array2, 1, Array2_Size) indexNow = Bound1 'เขยนคาขอมล Array ชวง 1 For i = 1 To Array2_Size CustomerArray(indexNow) = Array2(i): indexNow = indexNow + 1 Next i 'indexNow = Bound2 'เขยนคาขอมล Array ชวง 2 For i = 1 To Array1_Size CustomerArray(indexNow) = Array1(i): indexNow = indexNow + 1 Next i

Page 114: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

106

Else indexNow = Bound1 'เขยนคาขอมล Array ชวง 1 For i = 1 To Array2_Size CustomerArray(indexNow) = Array2(i): indexNow = indexNow + 1 Next i 'indexNow = Bound2 'เขยนคาขอมล Array ชวง 2 For i = 1 To Array1_Size CustomerArray(indexNow) = Array1(i): indexNow = indexNow + 1 Next i End If End Sub Private Function Cal3Opt(ResultArray As Variant) As Boolean 'คนคาการปรบปรงค าตอบทงหมด เปน True ถา ปรบปรงใหดขน Dim StationQuant As Long Dim ArrayBestResult() As Long, arrayTrySwapOpt() As Long Dim DistanceOrigin As Double, DistanceBest As Double, DistanceOpt As Double Dim FoundBetterResult As Boolean Dim StartIndex As Long, EndIndex As Long Dim i As Long, j As Long, k As Long Dim RoundCal As Long Dim AllBetterResult As Boolean 'การปรบปรงค าตอบทงหมดวาดขนหรอไม

Page 115: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

107

AllBetterResult = False StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayBestResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา ReDim arrayTrySwapOpt(1 To StationQuant) Call Array_Copy(ResultArray, ArrayBestResult) 'คดลอกล าดบการจดสง ถอวาตวเรมตนเปนตวทดทสด DistanceOrigin = Tour_Distance(ArrayBestResult) 'ค านวณระยะทางจาก ล าดบการจดสง DistanceBest = DistanceOrigin FoundBetterResult = True RoundCal = 0 Do Until (FoundBetterResult = False) 'ท าจนกวาไมสามารถ ปรบปรงคาค าตอบได FoundBetterResult = False 'คดวาไมเจอค าตอบทดกวาไวกอน RoundCal = RoundCal + 1 'ActiveWorkbook.Worksheets("Data").Range("I13").value = RoundCal For i = 1 To StationQuant - 1 For j = i To StationQuant - 1 For k = j + 1 To StationQuant '================ 3-OPT แบบท 1 Start ================ Call Array_Copy(ResultArray, arrayTrySwapOpt) 'คดลอกลกคาจากตวเรมตนใน Itteration ไปยงตวทจะท า Opt Call Opt3Swap(arrayTrySwapOpt, i, j, k, 1) 'ท า 3 Opt

Page 116: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

108

DistanceOpt = Tour_Distance(arrayTrySwapOpt) 'ค านวณระยะทางจาก Trip If (DistanceOpt < DistanceBest) Then 'ถาใช 2 Opt แลวคาดขน เกบแผนการขนสงดงกลาว DistanceBest = DistanceOpt Call Array_Copy(arrayTrySwapOpt, ArrayBestResult) FoundBetterResult = True 'แสดงวารอบนปรบปรงคาค าตอบได End If '================ 3-OPT แบบท 1 End ================ '================ 3-OPT แบบท 2 Start ================ Call Array_Copy(ResultArray, arrayTrySwapOpt) 'คดลอกลกคาจากตวเรมตนใน Itteration ไปยงตวทจะท า Opt Call Opt3Swap(arrayTrySwapOpt, i, j, k, 2) 'ท า 3 Opt DistanceOpt = Tour_Distance(arrayTrySwapOpt) 'ค านวณระยะทางจาก Trip If (DistanceOpt < DistanceBest) Then 'ถาใช 2 Opt แลวคาดขน เกบแผนการขนสงดงกลาว DistanceBest = DistanceOpt Call Array_Copy(arrayTrySwapOpt, ArrayBestResult) FoundBetterResult = True 'แสดงวารอบนปรบปรงคาค าตอบได End If

Page 117: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

109

'================ 3-OPT แบบท 2 End ================ '================ 3-OPT แบบท 3 Start ================ Call Array_Copy(ResultArray, arrayTrySwapOpt) 'คดลอกลกคาจากตวเรมตนใน Itteration ไปยงตวทจะท า Opt Call Opt3Swap(arrayTrySwapOpt, i, j, k, 3) 'ท า 3 Opt DistanceOpt = Tour_Distance(arrayTrySwapOpt) 'ค านวณระยะทางจาก Trip If (DistanceOpt < DistanceBest) Then 'ถาใช 2 Opt แลวคาดขน เกบแผนการขนสงดงกลาว DistanceBest = DistanceOpt Call Array_Copy(arrayTrySwapOpt, ArrayBestResult) FoundBetterResult = True 'แสดงวารอบนปรบปรงคาค าตอบได End If '================ 3-OPT แบบท 3 End ================ '================ 3-OPT แบบท 4 Start ================ Call Array_Copy(ResultArray, arrayTrySwapOpt) 'คดลอกลกคาจากตวเรมตนใน Itteration ไปยงตวทจะท า Opt Call Opt3Swap(arrayTrySwapOpt, i, j, k, 4) 'ท า 3 Opt DistanceOpt = Tour_Distance(arrayTrySwapOpt) 'ค านวณระยะทางจาก Trip

Page 118: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

110

If (DistanceOpt < DistanceBest) Then 'ถาใช 2 Opt แลวคาดขน เกบแผนการขนสงดงกลาว DistanceBest = DistanceOpt Call Array_Copy(arrayTrySwapOpt, ArrayBestResult) FoundBetterResult = True 'แสดงวารอบนปรบปรงคาค าตอบได End If '================ 3-OPT แบบท 4 End ================ Next k Next j Next i If (FoundBetterResult) Then Call Array_Copy(ArrayBestResult, ResultArray) AllBetterResult = True 'คาการปรบปรงค าตอบทงหมด True เพราะ ปรบปรงใหดขน End If Loop Cal3Opt = AllBetterResult 'คนคาการปรบปรงค าตอบทงหมด True ถา ปรบปรงใหดขน End Function Public Sub Cal3OptLoad() 'Load แบบ 3Opt Dim CarQty As Long, RowQty As Long Dim iCar As Long Dim aCustomer() As Long

Page 119: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

111

Dim rNearLess As Range, rOpt As Range Dim CarModifySolution As Long Dim aStation() As Long 'ลกคาทจดสง Dim FoundBetterResult As Boolean Dim startRow As Long, endRow As Long wsResult.Range("BC11:BL10000").Delete Shift:=xlUp 'ลบขอมลเดม CarQty = wsResult.Range("B19").value RowQty = wsResult.Range("C19").value Set rNearLess = wsResult.Range("AR10") Set rOpt = wsResult.Range("BD10") Dim i As Long startRow = 11 For CarModifySolution = 1 To CarQty endRow = ReadStationInCar("AX", "AR", CarModifySolution, aStation) 'rOrderCarLoadProduct.Offset(RowWriteUseNow - 10, 6).value = Tour_Distance(aStation) FoundBetterResult = True Do Until (FoundBetterResult = False) 'ท าจนกวาไมสามารถ ปรบปรงคาค าตอบได FoundBetterResult = False FoundBetterResult = Cal3Opt(aStation) Loop wsResult.Range("AR" & CStr(startRow) & ":AZ" & CStr(endRow)).Copy Destination:=wsResult.Range("BD" & CStr(startRow))

Page 120: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

112

wsResult.Range("BK" & CStr(endRow)).value = Tour_Distance(aStation) wsResult.Range("BK" & CStr(endRow)).NumberFormat = "#,##0.00" For i = startRow To endRow wsResult.Range("BC" & CStr(i)).value = FindStationInArray(aStation, wsResult.Range("BD" & CStr(i)).value) Next i ' เรยงจาก Customer ID แลวตามดวย ปรมาตร มาก ไป นอย ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "BC" & CStr(startRow) & ":BC" & CStr(endRow)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให ล าดบการสง Column BC เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11 .SetRange Range("BC" & CStr(startRow) & ":BJ" & CStr(endRow)) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With startRow = endRow + 1 Next CarModifySolution End Sub 7. Module SA

Page 121: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

113

Private Function xxxCalSA2(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else

Page 122: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

114

randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If tempNow = (1 - coolingRate) * tempNow Loop End Function Private Function xxxCalSA3(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1#

Page 123: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

115

Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 position3 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 3 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = ArrayChallengeResult(position3) ArrayChallengeResult(position3) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If tempNow = (1 - coolingRate) * tempNow Loop End Function Private Function xxxCalSA4(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean

Page 124: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

116

Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long, position4 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 position3 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 3 position4 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 4 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = ArrayChallengeResult(position3) ArrayChallengeResult(position3) = ArrayChallengeResult(position4) ArrayChallengeResult(position4) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK))

Page 125: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

117

If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If tempNow = (1 - coolingRate) * tempNow Loop End Function Private Function xxxCalSA5(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long, position4 As Long, position5 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 position3 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 3 position4 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 4

Page 126: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

118

position5 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 4 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = ArrayChallengeResult(position3) ArrayChallengeResult(position3) = ArrayChallengeResult(position4) ArrayChallengeResult(position4) = ArrayChallengeResult(position5) ArrayChallengeResult(position5) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If tempNow = (1 - coolingRate) * tempNow Loop End Function Public Sub xxxCalSALoad() 'Load แบบ SA Dim CarQty As Long, RowQty As Long Dim iCar As Long Dim aCustomer() As Long Dim rNearLess As Range, rSA As Range Dim CarModifySolution As Long Dim aStation() As Long 'ลกคาทจดสง Dim FoundBetterResult As Boolean

Page 127: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

119

Dim startRow As Long, endRow As Long Dim tempStart As Double, coolingRate As Double Dim swapPoint As String Dim boltzmannK As Double wsResult.Range("BO11:BX10000").Delete Shift:=xlUp 'ลบขอมลเดม CarQty = wsResult.Range("B19").value RowQty = wsResult.Range("C19").value Set rNearLess = wsResult.Range("AR10") Set rSA = wsResult.Range("BP10") Dim i As Long swapPoint = wsCalMain.Range("O2").value tempStart = wsCalMain.Range("O3").value coolingRate = wsCalMain.Range("P3").value boltzmannK = wsCalMain.Range("O4").value startRow = 11 For CarModifySolution = 1 To CarQty endRow = ReadStationInCar("AX", "AR", CarModifySolution, aStation) If swapPoint = "2 Point" Then Call CalSA2(aStation, tempStart, coolingRate, boltzmannK) ElseIf swapPoint = "3 Point" Then Call CalSA3(aStation, tempStart, coolingRate, boltzmannK) ElseIf swapPoint = "4 Point" Then Call CalSA4(aStation, tempStart, coolingRate, boltzmannK) ElseIf swapPoint = "5 Point" Then Call CalSA5(aStation, tempStart, coolingRate, boltzmannK) End If wsResult.Range("AR" & CStr(startRow) & ":AZ" & CStr(endRow)).Copy Destination:=wsResult.Range("BP" & CStr(startRow)) wsResult.Range("BW" & CStr(endRow)).value = Tour_Distance(aStation) wsResult.Range("BW" & CStr(endRow)).NumberFormat = "#,##0.00" For i = startRow To endRow

Page 128: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

120

wsResult.Range("BO" & CStr(i)).value = FindStationInArray(aStation, wsResult.Range("BP" & CStr(i)).value) Next i ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "BO" & CStr(startRow) & ":BO" & CStr(endRow)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให ล าดบการสง Column BO เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11 .SetRange Range("BO" & CStr(startRow) & ":BV" & CStr(endRow)) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With startRow = endRow + 1 Next CarModifySolution End Sub Private Function CalSA2(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long

Page 129: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

121

Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If

Page 130: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

122

tempNow = (1 - coolingRate) * tempNow Loop End Function Private Function CalSA3(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 position3 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 3 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = ArrayChallengeResult(position3) ArrayChallengeResult(position3) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else

Page 131: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

123

randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If tempNow = (1 - coolingRate) * tempNow Loop End Function Private Function CalSA4(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long, position4 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน Dim randomVal As Double, acceptVal As Double StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 position3 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 3 position4 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 4

Page 132: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

124

tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = ArrayChallengeResult(position3) ArrayChallengeResult(position3) = ArrayChallengeResult(position4) ArrayChallengeResult(position4) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If End If tempNow = (1 - coolingRate) * tempNow Loop End Function Private Function CalSA5(ResultArray As Variant, tempStart As Double, coolingRate As Double, boltzmannK As Double) As Boolean Dim StationQuant As Long Dim ArrayChallengeResult() As Long Dim DistanceOrigin As Double, DistanceChallenge As Double Dim position1 As Long, position2 As Long, position3 As Long, position4 As Long, position5 As Long Dim tempCity As Long Dim tempNow As Double ' อณหภม ปจจบน

Page 133: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

125

Dim randomVal As Double, acceptVal As Doubl StationQuant = UBound(ResultArray) 'จ านวนลกคา ReDim ArrayChallengeResult(1 To StationQuant) 'เตรยมขนาด Array เทากบจ านวนลกคา DistanceOrigin = Tour_Distance(ResultArray) 'ค านวณระยะทางจาก ล าดบการจดสง tempNow = tempStart Do While tempNow >= 1# Call Array_Copy(ResultArray, ArrayChallengeResult) position1 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 1 position2 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 2 position3 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 3 position4 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 4 position5 = CLng(Int((StationQuant) * Rnd() + 1)) 'สมจดตดท 4 tempCity = ArrayChallengeResult(position1) ArrayChallengeResult(position1) = ArrayChallengeResult(position2) ArrayChallengeResult(position2) = ArrayChallengeResult(position3) ArrayChallengeResult(position3) = ArrayChallengeResult(position4) ArrayChallengeResult(position4) = ArrayChallengeResult(position5) ArrayChallengeResult(position5) = tempCity DistanceChallenge = Tour_Distance(ArrayChallengeResult) ' If DistanceChallenge < DistanceOrigin Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) Else randomVal = Rnd() acceptVal = Exp((DistanceOrigin - DistanceChallenge) / (tempNow * boltzmannK)) If randomVal < acceptVal Then DistanceOrigin = DistanceChallenge Call Array_Copy(ArrayChallengeResult, ResultArray) End If

Page 134: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

126

End If tempNow = (1 - coolingRate) * tempNow Loop End Function Public Sub CalSALoad() 'Load แบบ SA Dim CarQty As Long, RowQty As Long Dim iCar As Long Dim aCustomer() As Long Dim rNearLess As Range, rSA As Range Dim CarModifySolution As Long Dim aStation() As Long 'ลกคาทจดสง Dim FoundBetterResult As Boolean Dim startRow As Long, endRow As Long Dim tempStart As Double, coolingRate As Double Dim swapPoint As String Dim boltzmannK As Double wsResult.Range("BO11:BX10000").Delete Shift:=xlUp 'ลบขอมลเดม CarQty = wsResult.Range("B19").value RowQty = wsResult.Range("C19").value Set rNearLess = wsResult.Range("AR10") Set rSA = wsResult.Range("BP10") Dim i As Long swapPoint = wsCalMain.Range("O2").value tempStart = wsCalMain.Range("O3").value coolingRate = wsCalMain.Range("P3").value boltzmannK = wsCalMain.Range("O4").value 'xxxxxxxxx 2 startRow = 11 For CarModifySolution = 1 To CarQty endRow = ReadStationInCar("AX", "AR", CarModifySolution, aStation)

Page 135: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

127

Call CalSA2(aStation, tempStart, coolingRate, boltzmannK) wsResult.Range("AR" & CStr(startRow) & ":AZ" & CStr(endRow)).Copy Destination:=wsResult.Range("BP" & CStr(startRow)) wsResult.Range("BW" & CStr(endRow)).value = Tour_Distance(aStation) wsResult.Range("BW" & CStr(endRow)).NumberFormat = "#,##0.00" For i = startRow To endRow wsResult.Range("BO" & CStr(i)).value = FindStationInArray(aStation, wsResult.Range("BP" & CStr(i)).value) Next i ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "BO" & CStr(startRow) & ":BO" & CStr(endRow)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให ล าดบการสง Column BO เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11 .SetRange Range("BO" & CStr(startRow) & ":BV" & CStr(endRow)) .Header = xlGuess.MatchCase = False .Orientation = xlTopToBottom.SortMethod = xlPinYin .ApplyEnd WithstartRow = endRow + 1 Next CarModifySolutionwsResult.Range("BW8").Formula = "=SUM(BW11:BW10000)": wsResult.Range("BW8").value = wsResult.Range("BW8").value wsResult.Range("BW8").NumberFormat = "#,##0.00"'xxxxxxxxx 3 startRow = 11For CarModifySolution = 1 To CarQty

endRow = ReadStationInCar("AX", "AR", CarModifySolution, aStation) Call CalSA3(aStation, tempStart, coolingRate, boltzmannK) wsResult.Range("AR" & CStr(startRow) & ":AZ" & CStr(endRow)).Copy Destination:=wsResult.Range("BP" & CStr(startRow)) wsResult.Range("BW" & CStr(endRow)).value = Tour_Distance(aStation) wsResult.Range("BW" & CStr(endRow)).NumberFormat = "#,##0.00" For i = startRow To endRow

Page 136: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

128

wsResult.Range("BO" & CStr(i)).value = FindStationInArray(aStation, wsResult.Range("BP" & CStr(i)).value) Next I ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "BO" & CStr(startRow) & ":BO" & CStr(endRow)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให ล าดบการสง Column BO เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11.SetRange Range("BO" & CStr(startRow) & ":BV" & CStr(endRow)) .Header = xlGuess.MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin Apply End With startRow = endRow + 1 Next CarModifySolution wsResult.Range("BW8").Formula = "=SUM(BW11:BW10000)": wsResult.Range("BW8").value = wsResult.Range("BW8").value wsResult.Range("BW8").NumberFormat = "#,##0.00" 'xxxxxxxxx 4 startRow = 11 For CarModifySolution = 1 To CarQty endRow = ReadStationInCar("AX", "AR", CarModifySolution, aStation) Call CalSA4(aStation, tempStart, coolingRate, boltzmannK) wsResult.Range("AR" & CStr(startRow) & ":AZ" & CStr(endRow)).Copy Destination:=wsResult.Range("BP" & CStr(startRow)) wsResult.Range("BW" & CStr(endRow)).value = Tour_Distance(aStation) wsResult.Range("BW" & CStr(endRow)).NumberFormat = "#,##0.00" For i = startRow To endRow wsResult.Range("BO" & CStr(i)).value = FindStationInArray(aStation, wsResult.Range("BP" & CStr(i)).value)Next i ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "BO" & CStr(startRow) & ":BO" & CStr(endRow)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให ล าดบการสง Column BO เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11

Page 137: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

129

SetRange Range("BO" & CStr(startRow) & ":BV" & CStr(endRow)) .Header = xlGuess.MatchCase = False.Orientation = xlTopToBottom.SortMethod = xlPinYin.ApplyEnd With

startRow = endRow + 1Next CarModifySolution wsResult.Range("BW8").Formula = "=SUM(BW11:BW10000)": wsResult.Range("BW8").value = wsResult.Range("BW8").value wsResult.Range("BW8").NumberFormat = "#,##0.00" 'xxxxxxxxx 5 startRow = 11 For CarModifySolution = 1 To CarQty endRow = ReadStationInCar("AX", "AR", CarModifySolution, aStation) Call CalSA5(aStation, tempStart, coolingRate, boltzmannK) wsResult.Range("AR" & CStr(startRow) & ":AZ" & CStr(endRow)).Copy Destination:=wsResult.Range("BP" & CStr(startRow)) wsResult.Range("BW" & CStr(endRow)).value = Tour_Distance(aStation) wsResult.Range("BW" & CStr(endRow)).NumberFormat = "#,##0.00" For i = startRow To endRow wsResult.Range("BO" & CStr(i)).value = FindStationInArray(aStation, wsResult.Range("BP" & CStr(i)).value)Next i ActiveWorkbook.Worksheets("Result").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Result").Sort.SortFields.Add Key:=Range( _ "BO" & CStr(startRow) & ":BO" & CStr(endRow)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal '"Worksheet Result" ก าหนดให ล าดบการสง Column BO เปน Index With ActiveWorkbook.Worksheets("Result").Sort ' เรยงขอมลสนคาทงหมด ตงแต แถวท 11.SetRange Range("BO" & CStr(startRow) & ":BV" & CStr(endRow)) .Header = xlGuess .MatchCase = False Orientation = xlTopToBottom.SortMethod = xlPinYin .Apply End With startRow = endRow + 1 Next CarModifySolution wsResult.Range("BW8").Formula = "=SUM(BW11:BW10000)": wsResult.Range("BW8").value = wsResult.Range("BW8").value wsResult.Range("BW8").NumberFormat = "#,##0.00" End Sub

Page 138: เรื่อง - rpu.ac.thresearch.rpu.ac.th/wp-content/uploads/2017/08/Nattaporn...การว จ ยคร งน ได ร บเง นท นการว จ ยจากมหาว

130

ประวตผวจย ชอ นางณตพร ไชยเสนา วน เดอน ปเกด วนเสารท 16 ธนวาคม 2532 จงหวดกรงเทพมหานคร ประวตการศกษา มหาวทยาลยศรปทม วทยาศาสตรมหาบณฑต สาขาวชาการจดการโลจสตกสและโซ อปทาน 2559 ต าแหนงและสถานทท างาน อาจารยประจ าสาขาวชาการจดการโลจสตกส คณะบรหารธรกจ มหาวทยาลยราชพฤกษ ประสบการณท างาน 2554-2559 เลขานการคณบด คณะบรหารธรกจมหาวทยาลยราชพฤกษ 2559-ปจจบน อาจารยประจ าสาขาวชาการจดการโลจสตกส คณะบรหารธรกจ

มหาวทยาลยราชพฤกษ