Nhờ lập trình bài toán ghép căn mẫu - vba

Liên hệ QC

anhdepjai

Thành viên thường trực
Tham gia
16/6/10
Bài viết
380
Được thích
90
Chào cả nhà,

Tôi có 1 bài toán cần ghép căn mẫu sao cho: Tổng kích thước các căn mẫu = kích thước mong muốn, Yêu cầu là các căn mẫu đó lấy từ danh sách các căn mẫu đã được nhập vào file
Rất mong mọi người hướng dẫn
Xin cảm ơn nhiều
 

File đính kèm

  • Ghep can mau.xlsx
    9.4 KB · Đọc: 16
Mọi người có cao kiến gì với bài này không ah? :(
 
Upvote 0
Chào cả nhà,

Tôi có 1 bài toán cần ghép căn mẫu sao cho: Tổng kích thước các căn mẫu = kích thước mong muốn, Yêu cầu là các căn mẫu đó lấy từ danh sách các căn mẫu đã được nhập vào file
Rất mong mọi người hướng dẫn
Xin cảm ơn nhiều
Bài này dùng solver giải quyết được, có cần thiết phải dùng vba?
 
Upvote 0
Mọi người có cao kiến gì với bài này không ah? :(
1.Có một bài toán kinh điển (xếp ba lô) như sau: "Một kẻ trộm đột nhập vào một cửa hiệu tìm thấy có n mặt hàng có trọng lượng và giá trị khác nhau, nhưng hắn chỉ mang theo một cái túi có sức chứa về trọng lượng tối đa là M. Vậy kẻ trộm nên bỏ vào ba lô những món nào và số lượng bao nhiêu để đạt giá trị cao nhất trong khả năng mà hắn có thể mang đi được. "
Ứng dụng của bài toán trên rất lớn như : bài toán rút tiền AMT sao cho mệnh giá lớn nhất và số lượng tờ là ít nhất, bài toán du lịch tìm đường đi từ điểm A đến điểm B sao cho tổng quãng đường là ngắn nhất,.........
2. Dạng bài toán quyết định của các bài toán là câu hỏi "có thể đạt được một giá trị ít nhất là bao nhiêu theo phát biểu của bài toán", có rất nhiều cách giải như : quy hoạch động, tham lam,.........<- bạn search google là ra ngay.
3. Với bài toán của bạn , tôi có có ý kiến sau:
* Nếu bạn không thêm điều kiện biên, điều kiện tối ưu thì bài toán của bạn là sự bùng nổ về tổ hợp rất khó giải quyết
* Tôi thử áp dụng vào bài toán của bạn với các điều kiện biên như sau : số lượng các danh mục (căn hộ ) =1; và tối đa chỉ ghép 4 danh mục căn hộ; thuật toán đệ quy quay lui có dạng như sau:
Mã:
Option Explicit
Public Arr, n&, m&, Arrresult, dbltong#
'To hop chap m cua n phan tu
Sub Main()
        Arr = Range("A2:A27")
        dbltong = 23 ' tong so can tim
        n = UBound(Arr, 1) ' so phan tu
        For m = 1 To 4
            ReDim Arrresult(1 To m)
            try (1)
        Next
        MsgBox "khong co ket qua thoa man"
End Sub
'-----------------------------------------------------------------------
Sub try(i)
Dim j&
    For j = i + 1 - 1 To n - m + 1
        If Arr(j, 1) < dbltong Then
            Arrresult(i) = Arr(j, 1)
            If i = m Then
                Check (Arrresult)
            Else
                try (i + 1)
            End If
        End If
    Next
End Sub
'----------------------------------------------------------------------
Sub Check(sArr)
    Dim i&, dT#, s
        For i = LBound(sArr) To UBound(sArr)
            dT = dT + sArr(i): s = s & "+" & sArr(i)
            If dT = dbltong Then
                MsgBox s: End
            End If
        Next
End Sub
 
Upvote 0
Hiện tại tôi xài phương pháp thủ công là:
1. If số có dạng abc.xy thì ghép bằng các căn nào. VD: abc.85 = 3.94 + 3.94 + 3.97 + (abc - 11)
2. If các số có dạng abc.x thì ghép bằng các căn có số lẻ luôn: VD: abc.x = 3.x + (abc-3)
3. If phần còn lại có dạng abc thì tách ra dạng số hạng lớn + số hạng bé ...
Nhưng với phương pháp này có xảy ra việc không đáp ứng được việc ngay đổi (cập nhật) số căn mới nhất. VD: đã có căn 2.05 thì 1 số cách ghép sẽ thay đổi 1 chút
Và cũng không tính được khả năng đáp ứng được nếu có quá nhiều kích thước cần lắp căn

Cảm ơn mọi người đã đọc bài, tôi sẽ theo hướng dẫn trên để lần mò tiếp.
 
Upvote 0
@anhdepjai
Chạy thử solver trong file dưới đây.
Trong bài, tạm quy ước chọn tổ hợp có số căn nhỏ nhất đạt tổng = yêu cầu
 

File đính kèm

  • Ghep can mau.xlsb
    10.9 KB · Đọc: 6
Upvote 0
Mình đã đọc và thấy nó không đúng mong muốn. Chính xác là không hiểu cách làm luôn
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom