Giải bài toán về sắp xếp tối ưu các hình chữ nhật (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Tôi đang tập tành về VBA, nhờ các bạn hướng dẩn cho code đễ điểu khiển việc quay tự động AutoShape theo thời gian... Trong file này, muốn quay thì phải bấm vào Button... Các bạn giúp tôi 1 code sao cho khi tôi bấm vào nút QUAY thì AutoShape sẽ quay... đúng 1 vòng thì dừng hoặc sau khoảng thời gian định trước thì dừng..
ANH TUẤN
 

File đính kèm

anhtuan1066 đã viết:
Tôi đang tập tành về VBA, nhờ các bạn hướng dẩn cho code đễ điểu khiển việc quay tự động AutoShape theo thời gian... Trong file này, muốn quay thì phải bấm vào Button... Các bạn giúp tôi 1 code sao cho khi tôi bấm vào nút QUAY thì AutoShape sẽ quay... đúng 1 vòng thì dừng hoặc sau khoảng thời gian định trước thì dừng..
ANH TUẤN

Quay vèo 1 cái hay quay từ từ như kim đồng hồ hả bác ???


Thân!
 
Upvote 0
Ah... là quay từ từ như đồng hồ vậy! Tôi nhớ ko lầm thì lúc trước Bắp có làm món này rồi... thậm chí là dễ như ăn khoai.. hi.. hi.. Nhưng giờ ko nhớ nó nằm đâu mà tìm nữa...
Bắp giúp giùm với
ANH TUẤN
 
Upvote 0
Soibien ơi, mình đang tập tành thôi mà... code này cũng rất đơn giản, nhưng thú thật là tôi ko biết cách nào biến đổi thành "cái của tôi" dc... Có thể cho tôi 1 code nào đó thực tế hơn ko?
ANH TUẤN

Mục đích của tôi là làm như thế này đây (xem file)... nhưng thay vì bấm "Tới" và "Lui" từng chút 1 thì mình muốn bấm 1 phát thôi... nó sẽ tới lui đến khi bấm "Dừng" hoặc sau 1 khoảng thời gian nào đó
Các bạn giúp với
 

File đính kèm

Upvote 0
anhtuan1066 đã viết:
Tôi đang tập tành về VBA, nhờ các bạn hướng dẩn cho code đễ điểu khiển việc quay tự động AutoShape theo thời gian... Trong file này, muốn quay thì phải bấm vào Button... Các bạn giúp tôi 1 code sao cho khi tôi bấm vào nút QUAY thì AutoShape sẽ quay... đúng 1 vòng thì dừng hoặc sau khoảng thời gian định trước thì dừng..
ANH TUẤN

Bác xem cái này nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn, tui có 1 ý tưởng này, tui nghĩ là phù hợp với đề tài này. Tui làm trong ngành cơ khí, gặp 1 vấn đề phải khai triển tôn, vấn đề là sắp xếp những mảnh hình chữ nhật trên 1 tấm tôn sao cho khi cắt sẽ hợp lý nhất, sau khi bấm nút Add thì Autoshape 1 sẽ được Add vào Autoshape 2 với kích thước đã định (Tất nhiên là Size của Autoshape sẽ thay đổi theo chiều dài, chiều rộng đã định), sau đó ta sẽ điều chỉnh vị trí của Autoshape 1 cho hợp lý bằng 4 nút Up, Down, Right, Left. Sau đó tiếp tục Add các Autoshape khác.....Các bạn xem file đính kèm nhé!!!....
 

File đính kèm

Upvote 0
cong đã viết:
Chào các bạn, tui có 1 ý tưởng này, tui nghĩ là phù hợp với đề tài này. Tui làm trong ngành cơ khí, gặp 1 vấn đề phải khai triển tôn, vấn đề là sắp xếp những mảnh hình chữ nhật trên 1 tấm tôn sao cho khi cắt sẽ hợp lý nhất, sau khi bấm nút Add thì Autoshape 1 sẽ được Add vào Autoshape 2 với kích thước đã định (Tất nhiên là Size của Autoshape sẽ thay đổi theo chiều dài, chiều rộng đã định), sau đó ta sẽ điều chỉnh vị trí của Autoshape 1 cho hợp lý bằng 4 nút Up, Down, Right, Left. Sau đó tiếp tục Add các Autoshape khác.....Các bạn xem file đính kèm nhé!!!....

Cám ơn bạn đã chia sẻ, nhưng tiếc quá, hình như marcro trong file này hình như là bị "BKAV" ăn hết rồi, bạn có file nào khác không?
 
Upvote 0
Hi SoiBien,
File đính kèm của tui chỉ là ý tưởng thôi! Mong mọi người cùng chia sẻ kinh nghiệm...
 
Upvote 0
cong đã viết:
Hi SoiBien,
File đính kèm của tui chỉ là ý tưởng thôi! Mong mọi người cùng chia sẻ kinh nghiệm...

à, nếu vậy thì bài này nên là một bài toán tối ưu, chứ còn dùng 4 nút đó thì... lôi bằng tay nhanh hơn bạn ạ. Còn tối ưu như thế nào thì nhờ các bác nào có cách giải hay thì cho một chút ý kiến.

P.s : tối ưu này chắc là tối ưu diện tích phải không bác? độ dày mỗi nhát cắt là bao nhiêu đơn vị hả bác?
 
Upvote 0
Đúng vậy, tôi cũng nghĩ đây là bài toán tối ưu thôi.. dựa vào chiều dài rông cho trước đễ tính ra số tấm tôn nhiều nhất có thể cắt dc... Tuy nhiên, kết quả báo "có thể cắt dc 5 tấm tôn" chẳng hạn.. nhưng cắt như thế nào mới là điều mình cần biết... Nên bài bạn Cong đưa ra cũng khá thực tế... Nhìn trực tiếp vào hình ta sẽ biết dc "CÁCH CẮT TÔN"
 
Upvote 0
Một tấm lớn cắt ra nhiều tấm nhỏ có cùng kích thước thì còn dễ, đằng này yêu cầu là nhiều tấm nhỏ có kích thước khác nhau mới khó, cái này chắc phải nhờ các chuyên gia về giải thuật mới được.
 
Upvote 0
SoiBien đã viết:
Một tấm lớn cắt ra nhiều tấm nhỏ có cùng kích thước thì còn dễ, đằng này yêu cầu là nhiều tấm nhỏ có kích thước khác nhau mới khó, cái này chắc phải nhờ các chuyên gia về giải thuật mới được.
vậy bây giờ mình làm đơn giản hơn 1 chút: 1 tấm tôn có kích thước xác định trước, dc cắt ra thành nhiều mảnh, mỗi mảnh có kích thước giống nhau... Vậy số mảnh lớn nhất có thể cắt là bao nhiêu? Và cắt như thế nào?
Trong cty tôi cũng có làm việc với bài toán này, chuyên dùng cắt vật liệu, có điều họ ko làm bằng Excel... Họ có 1 phần mềm riêng, đặt vật liệu vào bàn, máy tính tự động dò tìm và ra dc kết quả tối ưu nhất đồng thời tự động cắt luôn... Tôi đễ ý là việc sắp xếp các mảnh dc hiển thị ngay trên máy tính và việc sắp xếp này ko theo trật tự nhất định.. Chỉ với 1 tiêu chí là làm sao cho phần vật liệu thừa đạt nhỏ nhất
Ko biết với Excel thì làm thế nào? E rằng hơi căng
 
Upvote 0
Hi anhtuan1066, SoiBien
Thật ra chương trình anhtuan1066 đề cập đến tui chưa gặp lần nào, ngoài thực tế tui đã gặp trường hợp như vậy nè: hình dạng cần cắt rất nhiều (tam giác, chữ nhật, đa giác, ...) tất cả hình dạng này đều được sắp xếp lên 1 tấm tôn bằng tay sao cho tối ưu nhất (ở đây tui thấy người ta sắp xếp bằng Autocad), sau đó xuất hình đó sang máy cắt tôn CNC (cắt bằng Oxy-Acetylen). Ý tưởng của tui ban đầu là làm cho hình chữ nhật thôi, sau đó có thể phát triển thêm cho hình dạng khác. Tui đang bí vấn đề sau:
- Add được nhiều autoshape và các autoshape đó không bị lấp bởi autoshape đại diện cho tấm tôn.
- lập trình cho nút Up, Down, Right, Left để điều chỉnh autoshape vừa mới add.
Mong các bạn giúp đỡ! thanks
 
Upvote 0
Đúng rồi... cty tôi cũng dùng CNC đễ cắt vật liệu, có điều ko dùng Acad đễ làm việc sắp xếp đâu... người ta có 1 chương trình hẳn hoi, tự động hoàn toàn từ A tới Z... Tất cả nhiệm vụ của mình là cho chương trình biết các kích thước...
Có điều nếu làm việc này bằng Excel thì tôi ko biết có làm dc ko?
 
Upvote 0
Chỉ là di chuyển, thì tham khảo:

cong đã viết:
Hi anhtuan1066, SoiBien
thực tế đã gặp trường hợp như vậy nè: hình dạng cần cắt rất nhiều (tam giác, chữ nhật, đa giác, ...) tất cả hình dạng này đều được sắp xếp lên 1 tấm tôn bằng tay sao cho tối ưu nhất (ở đây tui thấy người ta sắp xếp bằng Autocad), sau đó xuất hình đó sang máy cắt tôn CNC (cắt bằng Oxy-Acetylen). Ý tưởng của tui ban đầu là làm cho hình chữ nhật thôi, sau đó có thể phát triển thêm cho hình dạng khác. Tui đang bí vấn đề sau:
- Add được nhiều autoshape và các autoshape đó không bị lấp bởi autoshape đại diện cho tấm tôn.
- lập trình cho nút Up, Down, Right, Left để điều chỉnh autoshape vừa mới add.
Mong các bạn giúp đỡ! thanks
Bạn đến mục trò chơi, xem file http://giaiphapexcel.com/forum/showthread.php?t=1604 của mình thử, chưa chắc giúp được bạn gì đâu!

/)/hưng vẫn mạnh dạn gợi í!
 
Upvote 0
Quay trở lại với bài toán QUAY OBJECT.. nói thật tôi cũng chưa thể thấu đáo dc tất cả, kễ cả những bài mà các bạn giới thiệu... Vì code dài quá, chạy thì dc nhưng ko hiểu... Theo các bạn thì trong file của tôi nên thêm cái gì nữa thật đơn giản đễ Object có thể tự động quay dc...
Tôi đang mày mò với VBA nên khó mà theo kịp những file đã hoàn chỉnh! Mong các bạn hiểu cho!
 
Upvote 0
anhtuan1066 đã viết:
Quay trở lại với bài toán QUAY OBJECT.. nói thật tôi cũng chưa thể thấu đáo dc tất cả, kễ cả những bài mà các bạn giới thiệu... Vì code dài quá, chạy thì dc nhưng ko hiểu... Theo các bạn thì trong file của tôi nên thêm cái gì nữa thật đơn giản đễ Object có thể tự động quay dc...
Tôi đang mày mò với VBA nên khó mà theo kịp những file đã hoàn chỉnh! Mong các bạn hiểu cho!

Nếu đơn giản quá thì cũng phải có hàm ontimer để nó chạy mỗi s một ít, còn muốn tới là tới lui là lui thì buộc phải thêm mấy biến + thay button của bác là control.

em up cho bác 2 file, 2 là file đơn giản nhất là làm cho nó quay, bác chẳng làm gì được ngoài việc ngồi ngó nó quay

file 1 thì bác muốn tới thì tới, muốn lui thì lui, ngưng giữa chừng cũng được
 

File đính kèm

Upvote 0
ctrl+break là phím nào zậy mình tìm hoài mà không thấy
 
Upvote 0
ongtrungducmx25 đã viết:
ctrl+break là phím nào zậy mình tìm hoài mà không thấy
Nhìn 3 phím trên mấy phím số đó: Phím bên phải là Pause/Break... chính là nó đó
ctrl+break là bấm phím Ctrl cộng với phím Break
 
Upvote 0
mình gõ vào ctrl+6 thì nó ẩn luôn sau kì zậy anh tuấn giải thích sau nhỉ
 
Upvote 0
Gì có vụ Ctrl + 6 ở đây nữa ta... tôi có thấy nó ẩn gì đâu!
 
Upvote 0
Có đó bác, ctrl+6 dùng để ẩn hiện 3 options: hide/unhide objects và hide/unhide placeholder
 
Upvote 0
ùh mình thấy nó như zậy cách này có hại gì không nế ẩn các objects thì có ai mà biết nhé không ai biết đâu mà rờ
 
Upvote 0
cong đã viết:
Hi anhtuan1066, SoiBien
Thật ra chương trình anhtuan1066 đề cập đến tui chưa gặp lần nào, ngoài thực tế tui đã gặp trường hợp như vậy nè: hình dạng cần cắt rất nhiều (tam giác, chữ nhật, đa giác, ...) tất cả hình dạng này đều được sắp xếp lên 1 tấm tôn bằng tay sao cho tối ưu nhất (ở đây tui thấy người ta sắp xếp bằng Autocad), sau đó xuất hình đó sang máy cắt tôn CNC (cắt bằng Oxy-Acetylen). Ý tưởng của tui ban đầu là làm cho hình chữ nhật thôi, sau đó có thể phát triển thêm cho hình dạng khác. Tui đang bí vấn đề sau:
- Add được nhiều autoshape và các autoshape đó không bị lấp bởi autoshape đại diện cho tấm tôn.
- lập trình cho nút Up, Down, Right, Left để điều chỉnh autoshape vừa mới add.
Mong các bạn giúp đỡ! thanks

Tìm được cái này cho bạn dùng thử trong 30 ngày.
http://astrokettle.com/y2dlp.zip

cho ý kiến xem nhé bạn.
Bác AnhTuan cho ý kiến luôn nhé.
 
Upvote 0
Hi SoiBien,
Ý tưởng làm chương trình sắp xếp Box rất hay, áp dụng vô Excel thì quá tuyệt!! Hiện giờ tui đang lập trình cho ý tưởng của mình. Khi hoàn thành mình sẽ post lên cho các bạn tham khảo!
 
Upvote 0
Mã:
Obtain Stock Sheet Dimensions
Obtain List of n Rectangles
Rotate each Rectangle so that Width >= Height
Sort Rectangle List by Decreasing Width (resolving equal widths by decreasing heights)
Initialize Skyline Array of n Elements
for Each Placement Policy (Leftmost, Tallest Neighbour, Smallest Neighbour) do
    while Rectangles [color=darkblue]Not[/color] Packed do
        Find Lowest Gap
        if (Find Best-Fitting Rectangle == true) then
            Place Best-Fitting Rectangle Using Placement Policy
            Raise Array to Appropriately Reflect Skyline
        Else
            Raise Gap to Lowest Neighbour
        [color=darkblue]End[/color] If
    end while
    
    while Optimisation [color=darkblue]Not[/color] Finished do
        Find Highest Shape
        if (Shape Width >= Shape Height) then
            Optimisation Finished
        [color=darkblue]End[/color] If
        
        Remove Highest Shape
        Reduce Array to Reflect Skyline
        Rotate Shape by 90 Degrees
        
        if (Shape Fits) then
            Place Best-Fitting Rectangle Using Placement Policy
            Raise Array to Appropriately Reflect Skyline
        Else
            Raise Gap to Lowest Neighbour
        [color=darkblue]End[/color] If
        if (Packing Better == [color=darkblue]False[/color]) then
            Optimisation Finished
        [color=darkblue]End[/color] If
    end while
end for
Return Best Solution

Thế thì Hay quá, đọc được cái giải thuật này của Glenn Whitwell.

BÁc tham khảo thêm nhé.
 
Upvote 0
À, nếu vậy thì bác muốn cái file excel kia làm nền cho giải thuật của bác phải không? Vậy mình "xung phong" làm mấy cái nền đó cho, bác làm giải thuật nhé. Hi hi!!!


Nhớ là trong GPE có bài nào của bác Learn Excel có làm một bài mẫu dùng Solver để giải bài toán sắp xếp hình vuông, chắc phải nhờ bác LE ới một phát.

@Admin: Cám ơn bác Admin nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Hi,
Tui đã làm xong file di chuyển autoshape rồi, mọi người tham khảo nha!
 

File đính kèm

Upvote 0
Oh... lạ nhỉ? Topic tôi lập ra đâu phải có tiêu đề "Giãi bài toán sắp xếp tối ưu..." gì gì đó đâu nhỉ? Bạn nào đó tự xen vào hỏi vấn đề này thôi mà... Lý ra nên dời bài viết bạn ấy ra thành 1 topic khác... Sau lại sửa tiêu đề của tôi...
Câu hỏi của tôi chả liên quan gì đến vụ tối ưu cả...
Hèn gì tìm hoài bài viết của mình mà ko thấy... Thật khó khăn cho những người post bài như tôi quá (tôi đâu có vi phạm nội quy)
 
Upvote 0
Các bác chuyển sang đây nhé :
http://www.giaiphapexcel.com/forum/showthread.php?t=961

Thực ra cái việc xếp tối ưu này đã có từ lâu rồi, giải thật thực tế thì chưa có. Tuy nhiên nó là một phần nhỏ trong phần mềm này thôi (Tối ưu trong không gian 2 chiều). Còn phần mềm này sẽ tối ưu trên không gian 3 chiều.
Khi ta chi chiều cao của thùng và Container là = nhau và bằng 0,01m chẳng hạn, thì nó sẽ ra ngay bài toán của bạn.

NewBib.jpg


[FONT=Verdana, Arial, Helvetica, sans-serif]Cargo Optimizer handles regularly shaped containers such as ocean containers, trucks and refrigerated units. Plus it offers several advanced options such as:[/FONT] [FONT=Verdana, Arial, Helvetica, sans-serif]- loading by sequence
- loading by FILO (First In Last Out)
- multiple container sizes per shipment (no limit)
- multiple package sizes per shipment (no limit)
- manual optimization over-ride
- calculate costings and cost per package being shipped
[/FONT]






Load_Options.jpg






Color-BW.gif





4Views.gif





Selected.gif






ManualLoad.gif



http://www.cargooptimizer.com/OSC/index.php?currency=USD&language=en
http://www.cargooptimizer.com/OSC/feature.php?language=en&currency=USD

Thân!
 
Upvote 0

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

Back
Top Bottom