Thiết lập mô hình tối ưu hóa cho bài toán điều độ dạng hybrid flow shop trong ngành sản xuất gạch men, tình huống nghiên cứu bcông ty dotalia việt nam

92 39 0
Thiết lập mô hình tối ưu hóa cho bài toán điều độ dạng hybrid flow shop trong ngành sản xuất gạch men, tình huống nghiên cứu bcông ty dotalia việt nam

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA TPHCM - - PHẠM ANH TUẤN THIẾT LẬP MƠ HÌNH TỐI ƯU HĨA CHO BÀI TOÁN ĐIỀU ĐỘ DẠNG HYBRID FLOW SHOP TRONG NGÀNH SẢN XUẤT GẠCH MEN, TÌNH HUỐNG NGHIÊN CỨU: CƠNG TY DOTALIA VIỆT NAM Chuyên ngành: Kỹ thuật Công nghiệp Mã số chuyên ngành: 60520117 LUẬN VĂN THẠC SĨ Thành phố Hồ Chí Minh, tháng 09 năm 2020 CƠNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG – HCM Cán hướng dẫn khoa học: TS PHAN THỊ MAI HÀ (Ghi rõ họ, tên, học hàm, học vị chữ ký) Cán chấm nhận xét 1: TS NGUYỄN VẠNG PHÚC NGUYÊN (Ghi rõ họ, tên, học hàm, học vị chữ ký) Cán chấm nhận xét 2: TS NGUYỄN VĂN THÀNH (Ghi rõ họ, tên, học hàm, học vị chữ ký) Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày 06 tháng 09 năm 2020 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị Hội đồng chấm bảo vệ luận văn thạc sĩ) Chủ tịch: PGS.TS Đỗ Ngọc Hiền Thư ký: TS Nguyễn Hữu Thọ Phản biện 1: TS Nguyễn Vạng Phúc Nguyên Phản biện 2: TS Nguyễn Văn Thành Ủy viên: TS Đường Võ Hùng Xác nhận Chủ tịch Hội đồng đánh giá LV Trưởng Khoa quản lý chuyên ngành sau luận văn sửa chữa (nếu có) CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA CƠ KHÍ ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc NHIỆM VỤ LUẬN VĂN THẠC SĨ I Họ tên học viên: Phạm Anh Tuấn MSHV: 1770499 Ngày, tháng, năm sinh: 24/10/1994 Nơi sinh: TP HCM Chuyên ngành: Kỹ Thuật Hệ Thống Công Nghiệp Mã số: 60520117 TÊN ĐỀ TÀI : Thiết lập mơ hình tối ưu hóa cho tốn điều độ dạng hybrid flow shop ngành sản xuất gạch men, tình nghiên cứu: cơng ty DOTALIA việt nam II NHIỆM VỤ VÀ NỘI DUNG : Nhiệm vụ đề tài mơ hình hóa tốn điều độ kế hoạch theo dạng "hybrid flow shop" với mục tiêu cụ thể sau: • Tối ưu hóa tốn điều độ thơng qua mục tiêu giảm thời gian hồn thành nhằm tăng đáp ứng hài lịng u cầu khách hàng • Hạn chế sai sót, lãng phí q trình điều độ kế hoạch sản xuất nhà máy người • Cải thiện cơng suất máy theo lực đưa Nhằm đạt mục tiêu đề cập trên, nghiên cứu thực nội dung cơng việc sau: • Xác định xu hướng phát triển, tình hình tăng trưởng ngành kinh tế nói chung ngành sản xuất gạch nói riêng Bên cạnh đó, số trọng điểm cần khác phục nhà máy DOTALIA ra, số q trình điều độ cơng việc • Tổng hợp chắt lọc lý thuyết có liên quan phù hợp với cấu trúc tốn • Tìm kiếm đánh giá mức độ phù hợp từ mơ hình tốn dựa nghiên cứu trước quốc gia khác nhằm xây dựng tảng cho tốn • Xây dựng mơ hình tốn dựa sở lý thuyết tình thực tế • Đề xuất hai giải thuật nhằm tìm phương án gần tối ưu tốn • Áp dụng mơ hình vào tình nghiên cứu thực tế nhà máy gạch DOTALIA • Kết luận số đề xuất đưa phần cuối III NGÀY GIAO NHIỆM VỤ : 24/02/2020 IV NGÀY HOÀN THÀNH NHIỆM VỤ : 21/06/2020 V CÁN BỘ HƯỚNG DẪN : TS PHAN THỊ MAI HÀ Tp HCM, ngày 06 tháng 09 năm 2020 CÁN BỘ HƯỚNG DẪN CHỦ NHIỆM BỘ MÔN ĐÀO TẠO (Họ tên chữ ký) (Họ tên chữ ký) TRƯỞNG KHOA …………………… (Họ tên chữ ký) LỜI CẢM ƠN Để bày tỏ biết ơn mình, tác giả xin gửi lời cảm ơn chân thành đến tất người giúp đỡ, động viên đồng hành tác giả suốt năm học cao học vừa qua Lời đầu tiên, tác giả xin gửi lời cảm ơn sâu sắc tới cô giáo hướng dẫn Phan Thị Mai Hà ý kiến nhận xét bổ ích trình thực luận văn thạc sĩ Cảm ơn cô tin tưởng động viên tác giả để hoàn thành luận văn Tác giả xin trân trọng cảm ơn toàn thể đồng nghiệp Intel Products Việt Nam, đặc biệt người quản lý cũ tác giả, anh Trần Ngọc Duy người quản lý tại, chị Tạ Sương Phụng, sẵn sàng chia sẻ, quan tâm hỗ trợ để tác giả làm việc tốt Bên cạnh đó, tác giả xin gửi lời cảm ơn sâu sắc tới chị Nguyễn Thị Thiên Thanh bạn Nguyễn Mỹ Ngân giúp đỡ đỡ tác giả nhiều luận văn Hơn nữa, xin gửi lời cảm ơn chân thành đến tất thầy cô giáo bạn bè, người giảng dạy hỗ trợ tác giả suốt chặng đường học vấn Kết tác giả có nhiều kiến thức chuyên ngành kỹ thuật hệ thống sử dụng chúng cho cơng việc cải thiện nhiều Cuối không phần quan trọng, tác giả muốn gửi gắm lời cảm ơn đến người thân gia đình, họ người hỗ trợ thúc đẩy tác giả hồn thành tốt chương trình đào tạo thạc sĩ TP Hồ Chí Minh, ngày 06 tháng 09 năm 2020 Học viên PHẠM ANH TUẤN i TÓM TẮT Với phát triển chóng mặt cơng nghệ thơng tin cạnh tranh gay gắt thị trường tồn cầu với phức tạp hóa từ nhu cầu khách hàng vòng mười năm trở lại đây, ngành sản xuất gạch trở thành ngành đặc biệt trọng ngày Do đó, việc có cho quy trình lập kế hoạch điều độ phù hợp điều cần thiết để đạt giá trị đáng kể lợi ích kinh tế trì hoạt động nhà máy Xuất phát từ xu hướng đó, ngành sản xuất gạch Việt Nam trường hợp ngoại lệ, cạnh tranh gay gắt diễn thị trường nội địa xuất buộc nhà sản xuất gạch phải đặc biệt trọng việc cải tiến trình hoạch định điều độ nhằm nâng cao vị thể cạnh tranh cơng ty Đi sâu vào khía cạnh trên, có nhiều dạng điều độ thể ngành sản xuất khác tùy thuộc vào loại hình sản xuất sản phẩm cơng ty Trong luận này, dạng nhiều người quan tâm đại diện tiêu biểu cho ngành sản xuất gạch dạng hybrid flowshop Đây dạng toán tổ hợp phức tạp thường bắt gặp nhiều tình sản xuất thực tế sản xuất gạch, vải, gỗ, tơ… Trong đó, loạt cơng việc 𝑗 thực loạt trạm 𝑖 với số lượng máy 𝑚 song song trạm Tuy nhiên, viết kết hợp với số yếu tố thực tế thường bị bỏ qua khác thời gian cài đặt (hay gọi chuyển đổi) công việc, số công việc khơng bỏ qua số trạm hay phần cơng việc bắt đầu sớm thay phải chờ tồn cơng việc hồn thành, nơi mà ln xuất đa số ngành công nghiệp kể Từ đặc điểm đó, mơ hình quy hoạch ngun phận (Mixed Integer Programe – MIP) đề cập nhằm giải vấn đề điều độ Bên cạnh đó, giải thuật mô luyện kim (Simulated Annealing – SA) xây dựng để tạo kết điều độ sản xuất hợp lý thời gian tính tốn chấp nhận Trong nghiên cứu này, giải thuật SA đề xuất sử dụng phương pháp heuristic NEH để tạo lời giải ban đầu sau sử dụng phương pháp di chuyển thứ tự công việc để tạo lời giải Cuối cùng, tình thực tế nhà máy sản xuất gạch DOTALIA Thành phố Hồ Chí Minh nghiên cứu với số kết luận cho toàn viết ii ABSTRACT With the rapid development of computer technology and the increasing pressure for remaining competitive in the global marketplace together with consumer demand for tiles becoming more sophisticated in over the last few decades, the Ceramic Tile sector is very competitive in nowadays Therefore, adequate process planning, and scheduling are essential to achieve significant economic benefits and to keep the plant in business From that trending, Vietnam is also not an exceptional case, the fierce competition in both the domestic and export markets is forcing ceramic producers to improve their production process and product quality Realized the scheduling problem is one of the areas that needs to be took into account, in this work, one of the scheduling problems with various applications in industries is hybrid flow shop As a complex combinatorial problem encountered in many real-world cases, the hybrid flow shop scheduling with unrelated parallel machines with the objective aimed to minimize the make span is studied In there, a series of 𝑗 jobs are processed at a series of 𝑖 stages with several parallel 𝑚 machines in each stage However, this study will put more effort to comprehend the sequence – dependent setup times, which usually has been ignored, combined with their corresponding processing time or at least considered non sequence – dependent in most researches on this problem, where always appear in some real industries such as textile, automobile manufacturing or ceramic tile According to the characteristics, a mixed integer programming (MIP) formulation was developed to represent the scheduling problem Moreover, a simulated annealing (SA) algorithm is developed to produce a reasonable manufacturing schedule within an acceptable computational time In this study, the proposed SA uses a NEH heuristic to generate the initial solutions and then uses moving operators for generating new solutions Lastly, a real case study of DOTALIA factory in Ho Chi Minh City is taken into consideration together with some conclusions iii LỜI CAM ĐOAN Tôi xin cam đoan luận văn công trình nghiên cứu thực riêng tơi hướng dẫn TS Phan Thị Mai Hà chép người khác Các liệu quy trình sản xuất tơi thu thập Nhà máy sản xuất DOTALIA Việt Nam từ nguồn khác nhau, ghi rõ phần tài liệu tham khảo Tơi xin hồn tồn chịu trách nhiệm nội dung nghiên cứu luận văn TP Hồ Chí Minh, ngày 06 tháng 09 năm 2020 Học viên PHẠM ANH TUẤN i MỤC LỤC TỔNG QUAN VÀ LÝ DO HÌNH THÀNH ĐỀ TÀI .1 Tổng quan Sản xuất gạch men Việt Nam VẤN ĐỀ CÂU HỎI NGHIÊN CỨU .5 MỤC TIÊU GIẢ THIẾT & PHẠM VI NGHIÊN CỨU .6 Giả thiết Phạm vi CẤU TRÚC .6 ĐỊNH NGHĨA VỀ ĐIỀU ĐỘ Điều độ Các chức điều độ Công việc máy móc .10 Ràng buộc điều độ 14 Mục tiêu .17 CÁC CÁCH TIẾP CẬN – GIẢI THUẬT .19 Giải thuật xác 19 Các giải thuật gần .20 BÀI TỐN VÍ DỤ 22 TỔNG QUAN VỀ DOTALIA 26 Tổng quan 26 ii Các sản phẩm 26 Quy trình sản xuất 27 Miêu tả trình 28 Công suất nhà máy .30 Tình hình .35 QUY TRÌNH NGHIÊN CỨU 36 Xác định vấn đề 37 Tổng quan lý thuyết 37 Mơ hình tốn học .37 Thu thập phân tích liệu 37 Xác minh mơ hình 37 Kết đề xuất 41 MƠ HÌNH HĨA BÀI TỐN 41 Mơ hình tốn 42 VÍ DỤ 46 Thông số đầu vào .46 Simulated Annealing 48 Kết so sánh MIP SA 50 TÌNH HUỐNG NGHIÊN CỨU NHÀ MÁY DOTALIA 51 Dữ liệu đầu vào 51 Kết .55 KẾT LUẬN .59 HẠN CHẾ 59 iii PHỤ LỤC } } } public int FindCMax() {var cMax = 0; for (var k = 0; k < _numOfJobs; ++k) {// find total processing time of job k var jobId = jobsPermutation[k]; var jobPosition = jobId - 1; for (var i = 0; i < _numOfStages; ++i) {// BEFORE PROCESSING var machineId = jobAssignments[i][k]; if (machineId == 0) {continue; } var machinePosition = machineId - 1; varprocessingTime= _processingTimes[i][machinePosition][jobPosition]; var setupTime = 0; varpreviousJobPosition= Stages[i].Machines[machinePosition].CurrentJobPosition; if (previousJobPosition >= 0) {setupTime= Math.Max(_setupTimes[i][machinePosition][previousJobPosition][jobPosition], 0); } var lagTime = 0; if (i > 0) {// not the first stage var previousMachinePosition = jobAssignments[i - 1][k] - 1; lagTime = previousMachinePosition >= ? _lagTimes[i - 1][previousMachinePosition][jobPosition] : 0; } var headTime = Math.Max(Jobs[jobPosition].CurrentTime + lagTime, PHỤ LỤC Stages[i].Machines[machinePosition].AvailableTime); var offerAddedBySetupTime = Math.Min(0, headTime Stages[i].Machines[machinePosition].AvailableTime); setupTime - + - // - END OF BEFORE PROCESSING // WHILE PROCESSING var timeTaken offerAddedBySetupTime; = headTime processingTime //Console.WriteLine( // $@"Stage {i + 1}, Machine {machinePosition + 1}, Job {jobPosition + 1}, CurrentTime {Jobs[jobPosition].CurrentTime + lagTime}, HeadTime {headTime}, SetupOffer {offerAddedBySetupTime} -> TimeTaken {timeTaken}"); Jobs[jobPosition].CurrentTime = timeTaken; Stages[i].Machines[machinePosition].AvailableTime = timeTaken; // - END OF WHILE PROCESSING // AFTER PROCESSING Stages[i].Machines[machinePosition].CurrentJobPosition = jobPosition; // - END OF WHILE PROCESSING } //Console.WriteLine($@"Job {Jobs[jobPosition].CurrentTime}"); {jobPosition}: cMax = Math.Max(cMax, Jobs[jobPosition].CurrentTime); } return cMax; } } } Run all case using System; using System.Collections; Cmax: PHỤ LỤC using System.Collections.Generic; using System.Linq; using FindMinCMax.Entity; using FindMinCMax.Input; using FindMinCMax.Utils; namespace FindMinCMax.Helpers { public class JobHelper {public int NumOfJobs { get; set; } = 0; public int JobPermutationCount { get; set; } private bool[] IsAvailable { get; set; } /** * Job permutation */ public int[] X { get; set; } private JobsProcessingUtils _utils; private int[][][] _eligibility; private int _numOfStages = 0; private bool[][][] IsMachineAvailable { get; set; } public int[][] JobAssignments { get; set; } private int JobAssignmentsCount { get; set; } public int ResultCmax = 1000000000; public int[] ResultJobPermutation; public int[][] ResultJobAssignments; public List Results { get; set; } = new List(); public JobHelper() {LoadFromInputData(); } public void LoadFromInputData() {NumOfJobs = InputData.NumOfJobs; _numOfStages = InputData.NumOfStages; _eligibility = InputData.Eligibility; PHỤ LỤC _utils = new JobsProcessingUtils(); } public void GeneratePermutation() {Init(); PermuteJobs(0); //Console.WriteLine($@"Num of permutations: {NumOfPermutation}"); } private void PermuteJobs(int i) {if (i == NumOfJobs) {++JobPermutationCount; //PrintX(); ProcessPermutationX(); } else {for (var j = 0; j < NumOfJobs; ++j) {if (IsAvailable[j]) {X[i] = j + 1; IsAvailable[j] = false; PermuteJobs(i + 1); IsAvailable[j] = true; } } } } private void PrintX() {Console.Write($@"{JobPermutationCount}: "); for (var i = 0; i < NumOfJobs; ++i) {Console.Write($@"{X[i]} "); } Console.WriteLine(); } PHỤ LỤC /// /// Process a specific job flow, find the best machine assignment to this job flow /// public void ProcessPermutationX() {_utils.jobsPermutation = X; GenerateJobAssignmentPermutation(); } private void Init() {IsAvailable = new bool[NumOfJobs]; for (var i = 0; i < NumOfJobs; ++i) {IsAvailable[i] = true; } X = new int[NumOfJobs]; JobPermutationCount = 0; } private void GenerateJobAssignmentPermutation() {InitJobAssignmentPermutation(); PermuteAssignments(0, 0); Console.WriteLine("assignment count " + JobAssignmentsCount); } private void InitJobAssignmentPermutation() {JobAssignmentsCount = 0; IsMachineAvailable = new bool[_numOfStages][][]; JobAssignments = new int[_numOfStages][]; var maxNumOfJobs = InputData.NumOfJobs; for (var i = 0; i < _numOfStages; ++i) {IsMachineAvailable[i] = new bool[maxNumOfJobs][]; JobAssignments[i] = new int[maxNumOfJobs]; for (var j = 0; j < maxNumOfJobs; ++j) PHỤ LỤC {JobAssignments[i][j] = 0; var maxNumOfMachines = InputData.MaxNumOfMachinesEachStage; IsMachineAvailable[i][j] = new bool[maxNumOfMachines]; for (var l = 0; l < maxNumOfMachines; ++l) {IsMachineAvailable[i][j][l] = true; } } } } private void PermuteAssignments(int i, int j) {if (i == _numOfStages - && j == NumOfJobs) {++JobAssignmentsCount; ProcessMachinesPermutation(); } else if (j == NumOfJobs) {PermuteAssignments(i + 1, 0); } else {var jobPosition = X[j] - 1; var numOfMachines = _eligibility[i][jobPosition].Length; if (numOfMachines == 0) {JobAssignments[i][j] = 0; PermuteAssignments(i, j + 1); } else {for (var machine = 0; machine < numOfMachines; ++machine) {if (IsMachineAvailable[i][jobPosition][machine]) {IsMachineAvailable[i][jobPosition][machine] = false; JobAssignments[i][j] = _eligibility[i][jobPosition][machine]; //machine + 1; PermuteAssignments(i, j + 1); IsMachineAvailable[i][jobPosition][machine] = true; PHỤ LỤC } } } } } public void ProcessMachinesPermutation() {//PrintJobAssignments(); _utils = new JobsProcessingUtils(X.Length) {jobsPermutation = X, jobAssignments = JobAssignments }; var cMax = _utils.FindCMax(); var jobs = new Neighbor {Cmax = cMax, JobsPermutation = X.ClonedInstance(), JobsAssignment = JobAssignments.ClonedInstance() }; if (ResultCmax > cMax) {ResultCmax = cMax; ResultJobAssignments = JobAssignments.ClonedInstance(); ResultJobPermutation = X.ClonedInstance(); Results = new List(); // clear list alternative results } else if (ResultCmax == cMax) {Results.Add(jobs); // add same job config for optimal Cmax } } private void PrintJobAssignments() {Console.WriteLine($@"Job assignment {JobAssignmentsCount}:"); for (var i = 0; i < _numOfStages; ++i) {for (var j = 0; j < NumOfJobs; ++j) {Console.Write($@"{JobAssignments[i][j]} "); PHỤ LỤC } Console.WriteLine(); } } } } Simulated Annealing using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FindMinCMax.Input; using FindMinCMax.Utils; namespace FindMinCMax.Helpers {public class SimulatedAnnealingAlgo {private const int MAX_INT = 1000000000; private const double TOLERANCE = 0.000001d; public int LoopCount { get; set; } public int NumOfJobs { get; set; } public Neighbor InitJobs { get; set; } public int[] ResultJobPermutation { get; set; } public int[][] ResultJobAssignment { get; set; } public int ResultCmax { get; set; } private JobHelper _jobHelper; public SimulatedAnnealingAlgo() {_jobHelper = new JobHelper(); } public void StartSimulating() {// STEP 1: Init Console.WriteLine("Start initializing "); PHỤ LỤC InitJobs = GetInitialJobsPermutationUsingNEH(); var jobs = InitJobs; Console.WriteLine("Done initializing"); var result = jobs; var rand = new Random(); var beta = rand.NextDouble(); for (var k = 0; k < LoopCount; ++k) {Console.WriteLine("Loop round " + k); // STEP 2: Evaluate nearby region of previous best pick var neighbor = GetBestNeighborOf(jobs.JobsPermutation); if (neighbor.Cmax < result.Cmax) {// G(Sc) < (G(S0) result = neighbor; jobs = neighbor; } else if (neighbor.Cmax < jobs.Cmax) {// G(S0) < G(Sc) < G(Sk) jobs = neighbor; } else {// G(Sc) >= G(Sk) var u = rand.NextDouble(); // random (1, 0) var p = CalculateP(jobs.Cmax, neighbor.Cmax, beta); if (u Math.Abs(jobA.APT - jobB.APT) < ?0 : jobA.APT > jobB.APT ? : -1); return jobs.ToJobNameArray(); } private Neighbor GetInitialJobsPermutationUsingNEH() {var sortedJobs = GetSortedJobsByTotalAPT(); if (NumOfJobs < 2) {return new Neighbor(sortedJobs.ToJobNameArray()); } var currentJobs = new List { sortedJobs[0].JobName }; var bestJobs = new Neighbor(); for (var j = 1; j < NumOfJobs; ++j) {Console.WriteLine("Processing job " + (j + 1)); var nextJob = sortedJobs[j].JobName; currentJobs = PutJobToTheBestPosition(currentJobs, nextJob, out bestJobs); } return bestJobs; } private List PutJobToTheBestPosition(List jobs, int jobName, out Neighbor bestJobs) {var jobPermutation = jobs.ClonedInstance().ToList(); jobPermutation.Insert(0, jobName); var bestAppendedJobs jobPermutation.ToArray() }; = new Neighbor { JobsPermutation = PHỤ LỤC bestAppendedJobs.CalculateCmax(); for (var position = 1; position appendedJobs.Cmax) {bestAppendedJobs = appendedJobs; } } bestJobs = bestAppendedJobs; return bestAppendedJobs.JobsPermutation.ToList(); } private List GetSortedJobsByTotalAPT() {var jobs = new List(NumOfJobs); for (var j = 0; j < NumOfJobs; ++j) {var job = new AptJob { JobName = j + 1, TotalAPT = }; for (var i = 0; i < InputData.NumOfStages; ++i) {var stageName = i + 1; job.TotalAPT += CalculateAPT(stageName, job.JobName); } jobs.Add(job); } jobs.Sort((jobA, jobB) => Math.Abs(jobA.TotalAPT - jobB.TotalAPT) < TOLERANCE ?0 : jobA.TotalAPT > jobB.TotalAPT ? : -1); return jobs; } = PHỤ LỤC /// /// Calculate average processing time for the stage stageName of job jobName /// /// /// /// APT of the job private double CalculateAPT(int stageName, int jobName) {var jobPosition = jobName - 1; var stagePosition = stageName - 1; var eligibility = InputData.Eligibility; var processingTimes = InputData.ProcessingTimes; var totalProcessingTime = 0d; var numberOfMachines = eligibility[stagePosition][jobPosition].Length; if (numberOfMachines == 0) {return 0; // prioritize not fungible job } for (var l = 0; l < numberOfMachines; ++l) {var machinePosition = eligibility[stagePosition][jobPosition][l] - 1; totalProcessingTime processingTimes[stagePosition][machinePosition][jobPosition]; += } return totalProcessingTime / numberOfMachines; } private jobsPermutation) Neighbor GetBestNeighborOf(IReadOnlyCollection {var bestNeighbor = new Neighbor { Cmax = MAX_INT }; for (var i = 0; i < jobsPermutation.Count - 1; ++i) {var neighborJobs = GetNeighborJobs(jobsPermutation, i); var neighbor = new Neighbor { JobsPermutation = neighborJobs }; neighbor.CalculateCmax(); if (neighbor.Cmax < bestNeighbor.Cmax) {bestNeighbor = neighbor; } PHỤ LỤC } return bestNeighbor; } private double CalculateP(int cmaxK, int cmaxC, double beta) {return Math.Exp((cmaxK - cmaxC) / beta); } private int[] GetNeighborJobs(IEnumerable host, int swapIndex) {var neighbor = host.ClonedInstance(); var tmp = neighbor[swapIndex]; neighbor[swapIndex] = neighbor[swapIndex + 1]; neighbor[swapIndex + 1] = tmp; return neighbor; } private static void PrintJobAssignments(int[][] jobsAssignment) {Console.WriteLine(@"=> Job assignment: "); for (var i = 0; i < 3; ++i) {for (var j = 0; j < 5; ++j) {Console.Write($@"{jobsAssignment[i][j]} "); } Console.WriteLine(); } } private static void PrintJobsPermutation(int[] jobsPermutation) {Console.WriteLine(@"=> Job permutation: "); for (var i = 0; i < jobsPermutation.Length; ++i) {Console.Write($@"{jobsPermutation[i]} "); } Console.WriteLine(); } } public class Neighbor {public int[] JobsPermutation { get; set; } public int[][] JobsAssignment { get; set; } PHỤ LỤC public int Cmax { get; set; } public Neighbor() } public Neighbor(int[] jobsPermutation) {JobsPermutation = jobsPermutation; } public void CalculateCmax() {var jobHelper = new JobHelper {NumOfJobs = JobsPermutation.Length, X = JobsPermutation}; jobHelper.ProcessPermutationX(); JobsAssignment = jobHelper.ResultJobAssignments.ClonedInstance(); Cmax = jobHelper.ResultCmax; //Console.WriteLine(@"===> SA Cmax: " + Cmax); //for (var i = 0; i < 3; ++i) //{// for (var j = 0; j < 5; ++j) // {// Console.Write($@"{JobsAssignment[i][j]} "); // } // Console.WriteLine(); //} } } class AptJob {public int JobName { get; set; } public double APT { get; set; } public double TotalAPT { get; set; } } static class AptJobHelper {public static int[] ToJobNameArray(this List jobs) {return jobs.Select(job => job.JobName).ToArray(); } } } PHỤ LỤC PHẦN LÝ LỊCH TRÍCH NGANG • • • • • Họ tên: Ngày, tháng, năm sinh: Nơi sinh: Địa liên lạc: Số điện thoại: Phạm Anh Tuấn 24/10/1994 Tp Hồ Chí Minh 42/38 Nguyễn Giản Thanh P.15, Q.10, TPHCM 079-211-4807 QUÁ TRÌNH ĐÀO TẠO Chương trình đào tạo Đại học Sau đại học Trường/viện Trường ĐH Bách Khoa TPHCM, ĐHQG TP.HCM Trường ĐH Bách Khoa TPHCM, ĐHQG TP.HCM Ngành học Loại hình Thời gian Quản lý Cơng nghiệp Chính quy 2012 – 2017 Kỹ thuật Cơng nghiệp Chính quy 2017 – 2020 Q TRÌNH CƠNG TÁC s Thời gian Nơi cơng tác Chức vụ 2017 – Công ty Intel Products Vietnam Kỹ sư hệ thống ... Chuyên ngành: Kỹ Thuật Hệ Thống Công Nghiệp Mã số: 60520117 TÊN ĐỀ TÀI : Thiết lập mơ hình tối ưu hóa cho tốn điều độ dạng hybrid flow shop ngành sản xuất gạch men, tình nghiên cứu: cơng ty DOTALIA. .. khía cạnh lập kế hoạch điều độ sản xuất Xu hướng thúc đẩy xây dựng tốn tối ưu hóa, chí xác định tốn điều độ quy mơ tối ưu nhà máy [5] CHƯƠNG 1: GIỚI THIỆU Sản xuất gạch men Việt Nam Việt Nam nước... tâm đại diện tiêu biểu cho ngành sản xuất gạch dạng hybrid flowshop Đây dạng toán tổ hợp phức tạp thường bắt gặp nhiều tình sản xuất thực tế sản xuất gạch, vải, gỗ, tơ… Trong đó, loạt công việc

Ngày đăng: 02/03/2021, 20:40

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan