2012-04-14 19 views
5

Tôi muốn tối ưu hóa tải khối đá cẩm thạch vào xe tải. Tôi không biết, nếu tôi có thể sử dụng lớp Solver Foundation cho mục đích đó. Trước đây, tôi bắt đầu viết mã, tôi muốn hỏi nó ở đây.Tối ưu hóa Quỹ Solver - Bao bì 1D Bin

  • Đá cẩm thạch có thể có trọng lượng từ 1 đến 24 tấn.
  • Xe tải có thể chứa tối đa 24 Tấn.
  • Nó có thể được tải như nhiều khối đá cẩm thạch, vì nó có thể mất đến 24 tấn, có nghĩa là không có giới hạn âm lượng.
  • Có thể có từ 200 đến 500 khối đá cẩm thạch khác nhau tùy theo thời gian.

MỤC TIÊU - Mục tiêu là tải khối đá cẩm thạch trong lô hàng xe tải tối thiểu.

Làm cách nào tôi có thể làm điều đó mà không cần viết nhiều điều kiện và cho vòng lặp?

Tôi có thể sử dụng Microsoft Solver Foundation cho mục đích đó không?

Tôi đã đọc tài liệu do Microsoft cung cấp tuy nhiên, tôi không thể tìm thấy kịch bản tương tự như của tôi.

M1+ M2 + M3 + .... Mn <=24 đây là cho một lô hàng xe tải.

Giả sử có 200 khối lượng Marble khác nhau và trọng lượng Marble là Float.

Cảm ơn

+0

Bạn đang cố thoát khỏi bài tập về nhà hay ...? – mellamokb

+0

không, không có nhiệm vụ thực tế hoặc bài tập về nhà. Tôi đang cố gắng tìm hiểu kiến ​​thức bản thân của mình. Tôi tin rằng tôi có thể sử dụng kiến ​​thức này trong tương lai. Bên cạnh đó, tôi không phải là sinh viên. Tất cả những gì tôi muốn là học viết mã tốt hơn! –

+1

Bạn có quen thuộc với các thuật toán đóng gói bin không? Đó là nơi tôi sẽ bắt đầu tiếp cận vấn đề này. Có thông tin tốt về WikiPedia: http://en.wikipedia.org/wiki/Bin_packing_problem – mellamokb

Trả lời

5

Bạn có thể sử dụng Microsoft Solver Foundation để giải quyết vấn đề này. Một ví dụ về một giải pháp như vậy có thể được tìm thấy here nơi OML cho vấn đề bin đóng gói như sau:

Model[ 
    Parameters[Sets,Items,Bins], 
    Parameters[Integers,OrderWidth[Items],BinWidth[Bins]], 

    Decisions[Integers[0,1],x[Items,Bins]], 
    Decisions[Integers[0,1],y[Bins]], 

    Constraints[  
    Foreach[{i,Items},Sum[{j,Bins}, x[i,j]]==1 ], 
    Foreach[{j,Bins}, Sum[{i,Items}, OrderWidth[i]*x[i,j]] <= BinWidth[j]], 
    Foreach[{i,Items},{j,Bins}, y[j] >= x[i,j]] 
    ], 

    Goals[Minimize[UsedBins->Sum[{j,Bins},y[j]]]] 
] 

Nó sẽ dễ dàng để thay đổi OrderWidth để MarbleWeight và BinWidth để TruckCapacity (hoặc chỉ cần 24 trong trường hợp của bạn)