Làm tròn để giảm thiểu tổng các lỗi trong khoảng cách theo cặp


25

Những gì được biết về sự phức tạp của vấn đề sau đây:

  • Đưa ra: số hữu tỉ x1<x2<<xn .
  • Output: số nguyên y1y2yn .
  • Mục tiêu: giảm thiểu
    1i<jne(i,j),
    nơi
    e(i,j)=|(yjyi)(xjxi)|.

Đó là, chúng tôi muốn làm tròn các số hữu tỷ thành số nguyên để chúng tôi giảm thiểu tổng các lỗi trong khoảng cách theo cặp. Với mỗi cặp i,j chúng ta muốn có khoảng cách làm tròn yjyi càng gần càng tốt với khoảng cách thực xjxi .


Động lực: một chuyến đi tàu điện ngầm nhàm chán và một poster cho thấy "địa điểm" của các trạm ở độ phân giải của một phút thời gian di chuyển. Ở đây chúng tôi đang giảm thiểu lỗi mà mọi người mắc phải nếu họ sử dụng poster để tra cứu thời gian di chuyển giữa các trạm ij , tính trung bình trên tất cả các cặp i<j .

bản đồ lộ trình

(nguồn)

Ví dụ: ở đây chúng ta có thể đọc các xấp xỉ sau về khoảng cách theo cặp giữa bốn trạm (sử dụng A, B, C, D cho ngắn gọn):

  • A B B ≈ 1 phút, Bẻ C 2 phút, Cẩu D 2 phút
  • A C C ≈ 3 phút, B Gian D 4 phút
  • A D D 5 phút

Đây có phải là xấp xỉ tốt nhất có thể? Nếu bạn biết thời gian đi thực tế, bạn có thể tìm ra giải pháp tốt hơn không?


Lúc đầu, điều này nghe có vẻ như một bài tập đơn giản trong lập trình động, nhưng bây giờ có vẻ như cần một số lượng suy nghĩ thực tế.

Có ai nhận ra vấn đề này? Hoặc xem một thuật toán thông minh để giải quyết nó?


Chỉnh sửa: Có một số biến thể tự nhiên của câu hỏi đã được đề cập trong các ý kiến; Hãy cho họ một số tên:

  • sàn / ceil phiên bản: nó là cần thiết rằng cho tất cả i .yi{xi,xi}i

  • phiên bản số nguyên : đủ cho tất cả i .yiZi

  • đơn điệu phiên bản: nó là cần thiết rằng .y1y2yn

  • phiên bản không đơn điệu : chúng ta có thể có cho i < j .yi>yji<j

Câu hỏi ban đầu xem xét phiên bản số nguyên đơn điệu, nhưng câu trả lời liên quan đến bất kỳ phiên bản nào trong số này đều được chào đón.


DP có hoạt động cho trường hợp khi bạn chỉ quan tâm đến các phép đo liền kề không?
Suresh Venkat

1
@SureshVenkat: Trên thực tế, trong trường hợp đó, vấn đề trở nên rất đơn giản: bạn chỉ cần chọn khoảng cách tích phân tốt nhất cho mỗi i . Nghĩa là, bạn có thể giảm thiểu độc lập từng e ( i - 1 , i ) . yiyi1ie(i1,i)
Jukka Suomela

4
Báo cáo này của Estie Arkin có vẻ liên quan: ams.sunysb.edu/~estie/ con / beautification.pdf Điều đó được chứng minh rằng việc giảm thiểu số lượng khoảng cách giữa các điểm khác nhau trong đầu ra là NP-hard. Đây không phải là tổng số ca, như trong câu hỏi này, nhưng có lẽ các tiện ích độ cứng trong báo cáo có thể gợi ý bằng chứng về độ cứng cho vấn đề này.
val

2
Tôi có cảm giác rằng vấn đề này chắc chắn có thể giải quyết được bằng cách sử dụng các kỹ thuật nổi tiếng. Hãy xem tiền thưởng có đủ để thúc đẩy mọi người giải quyết vấn đề này không. :)
Jukka Suomela

1
@vzn: Tôi quan tâm đến sự phức tạp tính toán của vấn đề này. Nếu bạn có thể chứng minh rằng có một cách tiếp cận tìm kiếm cục bộ theo thời gian đa thức được đảm bảo để tìm ra mức tối ưu toàn cầu, tiền thưởng là của bạn.
Jukka Suomela

Câu trả lời:


9

ĐƯỢC. Thuật toán DP dường như phức tạp không cần thiết. Sau khi đọc các bình luận tôi nghĩ rằng điều này có thể giải quyết vấn đề Phiên bản đơn điệu của vấn đề (nhưng tôi chưa kiểm tra từng chi tiết).

Đầu tiên, giả sử mỗi , nơi x i là phần không thể thiếu, { x i } là phần phân đoạn. Giả sử x i được làm tròn đến x i+ v i , nơi v i là một số nguyên không âm (tất nhiên nói chung v i có thể là tiêu cực, nhưng chúng tôi luôn luôn có thể thay đổi sao cho nhỏ nhất v i là 0).xi=xi+{xi}xi{xi}xixi+vivivivi

Bây giờ, hãy xem xét chi phí cho một cặp , x j khi thực hiện làm tròn này. Chi phí phải làxixj

||vivj+xixj||{xi}{xj}+xixj||

Biểu thức phức tạp vì các giá trị tuyệt đối. Tuy nhiên, lưu ý rằng chúng ta có tính đơn điệu, vì vậy những thứ bên trong hai giá trị tuyệt đối bên trong phải có dấu CÙNG. Vì chúng ta có một giá trị tuyệt đối bên ngoài, nên thực sự không có vấn đề gì với dấu hiệu đó, biểu thức chỉ đơn giản hóa thành

|vivj({xi}{xj})|

Từ giờ trở đi, chúng tôi không cho rằng giải pháp là đơn điệu, mà thay vào đó, chúng tôi thay đổi mục tiêu để giảm thiểu tổng số thuật ngữ trên cho tất cả các cặp. Nếu giải pháp cho vấn đề này xảy ra là đơn điệu, thì tất nhiên đó cũng là giải pháp tối ưu cho phiên bản đơn điệu. (Hãy nghĩ về điều này như: vấn đề ban đầu có một hình phạt vô hạn khi giải pháp không đơn điệu, vấn đề mới có hình phạt nhỏ hơn, nếu một giải pháp đơn điệu thắng ngay cả trong phiên bản mới, thì đó phải là giải pháp cho phiên bản đơn điệu)

Bây giờ chúng tôi muốn chứng minh, nếu , trong giải pháp tối ưu, chúng tôi phải có v iv j .{xi}>{xj}vivj

Giả sử điều này không đúng, rằng chúng ta có một cặp nhưng v i < v j . Chúng tôi sẽ chỉ ra rằng nếu chúng tôi trao đổi v i v j , giải pháp sẽ hoàn toàn tốt hơn.{xi}>{xj}vi<vjvi vj

Trước tiên, chúng tôi so sánh thuật ngữ giữa j , ở đây thực sự rõ ràng rằng việc hoán đổi hoàn toàn tốt hơn bởi vì trong phiên bản không hoán đổi, v i - v j{ x j } - { x i } có cùng một dấu hiệu, tuyệt đối giá trị sẽ là tổng của hai giá trị tuyệt đối.ijvivj{xj}{xi}

Bây giờ với bất kỳ , chúng ta so sánh tổng của các cặp ( i , k )( j , k ) . Đó là, chúng ta cần so sánhk(i,k)(j,k)

| v j - v k - ( { x i } - { x k } ) | + ||vivk({xi}{xk})|+|vjvk({xj}{xk})|.|vjvk({xi}{xk})|+|vivk({xj}{xk})|

Sử dụng , B , C , D để biểu thị bốn học kỳ trong giá trị tuyệt đối, rõ ràng là một + B = C + D . Ngoài ra, rõ ràng là | A - B | | C - D | . Bằng cách lồi của giá trị tuyệt đối, chúng ta biết | Một | + | B | | C | + | D | . Lấy tổng số trên tất cả x kABCDA+B=C+D|AB||CD||A|+|B||C|+|D|xkChúng tôi biết việc trao đổi chỉ có thể tốt hơn.

Lưu ý rằng bây giờ chúng ta đã có một giải pháp cho phiên bản sàn / trần Monotonic: phải có ngưỡng, khi lớn hơn luôn luôn làm tròn lên, khi nó nhỏ hơn luôn luôn làm tròn xuống, khi nó tròn bằng nhau và một số xuống, trong khi chất lượng giải pháp chỉ phụ thuộc vào số lượng. Chúng tôi liệt kê tất cả các giải pháp này và chọn một giải pháp có chức năng mục tiêu nhỏ nhất. (Tất cả các giải pháp này nhất thiết phải đơn điệu).{xi}

Cuối cùng, chúng tôi muốn đi đến phiên bản số nguyên đơn điệu của vấn đề. Chúng tôi thực sự có thể chứng minh giải pháp tối ưu giống như phiên bản sàn / trần Monotonic.

vixivi0,1,2,...,max{vi}kvi>kvi=vi1|{xi}{xj}|<1

Bây giờ chúng ta sẽ chứng minh, trung bình của trong nhóm ít nhất là trung bình của trong nhóm cộng với . Nếu điều này không đúng, chỉ cần để cho tất cả , tính toán lại cho thấy hàm mục tiêu được cải thiện.{xi}k+1{xi}k1/2vi=vi1vi>k

Vì trung bình của nằm trong phạm vi , nên thực sự có nhiều nhất hai nhóm, tương ứng với phiên bản sàn / trần.{xi}[0,1)


1

Chỉ là một nhận xét mở rộng ... (có lẽ tầm thường và / hoặc sai :)

Nếu và là bội số chung nhỏ nhất của s, thì chúng ta có thể thoát khỏi các tỷ lệ hợp lý: .xi=ai/biMbixi=Mxi

Nếu (giới hạn sàn, trần) thì chúng ta có thể sử dụng biến nhị phân để biểu thị bằng khoảng cách từ ( hoặc ):yi{xi,xi}viyixiLi=xiMxiRi=xiMxi

yi=xi+Livi+Ri(1vi)=xi+(LiRi)vi+Ri=xi+Divi+Ri

Và vấn đề ban đầu nên (?!?) Tương đương với việc tìm thu nhỏ:vi

1i<jn|DiviDjvj|

vớivi{0,1},DiZ


mở rộng tổng kết cuối cùng của bạn bằng cách sử dụng ý tưởng fn lỗi ở trên, nó có thể được hiển thị tối ưu thực sự chỉ là sự lựa chọn trong đó mỗi sàn / trần biến nhị phân gần với không? do đó chỉ để lại trường hợp làm tròn cho dưới dạng trong đó là số nguyên. e(i,j)xnxnmn+12m
vzn

1
@vzn: Tôi nghĩ đây là một ví dụ. Nếu chúng ta làm tròn bằng cách sử dụng các tiêu chí làm tròn chúng ta sẽ nhận được có lỗi là , nhưng có lỗi là (kết quả là như nhau nếu chúng tôi loại bỏ các tỷ lệ hợp lý nhân với LCM). (0,1.4,8.7)xi(0,1,9)1.4(0,2,9)1.2
Marzio De Biasi

ok tuy nhiên ý tưởng mới. xem xét một lần nữa. mở rộng tổng kết. nó sẽ giảm xuống nhiều điều khoản với và . nhưng cái sau bằng với ! do đó, nó giảm đến một vấn đề dưới dạng tối thiểu hóa trong đó là một vectơ hàng 0/1 và là một vectơ cột không đổi . thật? thì đó là chuyện nhỏ và chỉ cần chọn sao cho là 1 nếu phần tử tương ứng trong là âm và 0 nếu nó dương .... QED? e(i,j)vivi2viXDXDXD
vzn

1
@vzn: nếu bạn sử dụng lỗi để loại bỏ hàm giá trị tuyệt đối, thì bạn sẽ nhận được các thuật ngữ như ; Làm thế nào để bạn xử lý chúng trong việc giảm thiểu? ((yiyj)(xixj))22DiDjvivj
Marzio De Biasi

Rất tiếc! bạn đã trả lời trước khi tôi có cơ hội xóa bình luận đó sau khi nhận ra rằng .. dù sao nó vẫn có vẻ giảm bớt một số vấn đề tối ưu hóa ma trận gần như tuyến tính? còn với thuật ngữ trong đó là một vectơ cột ...? VVTV
vzn

1

Một nhận xét mở rộng khác ... Có thể sai.

Tôi cũng đang xem xét trường hợp với các hạn chế sàn / trần và tôi đang cố gắng giải quyết bằng cách sử dụng lập trình động (tôi không thể, nhưng có lẽ nó hoạt động khi ước số chung nhỏ).

Đặt là phần phân số của , chúng tôi xem xét mọi thứ từ nhỏ nhất đến lớn nhất. Giả sử lớn nhất là và vì chúng tôi đang lập trình động nên chúng tôi đã biết "một cái gì đó" (tôi sẽ giải thích điều này là gì) về giải pháp tối ưu cho mọi thứ khác trừ .{xi}xi{xi}{xk}xk

Bây giờ hãy xem xét sự khác biệt trong hàm mục tiêu khi chúng ta làm tròn lên hoặc xuống. Nếu ban đầu một số được làm tròn, thì sự khác biệt chỉ là 1 (thực sự chưa được kiểm tra rất cẩn thận nhưng có vẻ như đây là trường hợp, điều thực sự quan trọng là cho dù nằm bên trái hay bên phải của , sự khác biệt luôn luôn giống nhau); nếu ban đầu một số được làm tròn xuống, thì sự khác biệt là . Vì vậy: chúng tôi biết chúng tôi nên đưa ra quyết định gì nếu biết ba đại lượng sau:xkxixixkxi2{xk}2{xi}1

  1. có bao nhiêu thứ được làm tròn
  2. có bao nhiêu thứ được làm tròn xuống
  3. tổng của trong số những đó được làm tròn xuống là bao nhiêu{xi}xi

OK, 1 và 2 về cơ bản là giống nhau, chúng ta có thể để f [N, Ndown, Sdown] là giải pháp tối ưu cho N điểm đầu tiên (khi các điểm được sắp xếp theo thứ tự tăng dần của ), số lượng được làm tròn xuống là Ndown và tổng của cho những người được làm tròn xuống là Sdown. Sau đó, không khó để viết ra cách đi từ f [N-1] đến f [N].{xi}xi{xi}

Vấn đề là tất nhiên, Sdown có thể có nhiều giá trị theo cấp số nhân. Nhưng nó hoạt động khi ước số chung nhỏ hoặc chúng ta có thể làm tròn mọi thứ thành điểm lưới trước và nhận được FPTAS (nếu chương trình động ở trên là chính xác ...)


Chỉ cần chú ý bình luận của @Marzio De Biasi. Sẽ dễ dàng hơn nhiều khi nghĩ về lập trình động này bằng cách sử dụng hàm mục tiêu đó. Vì về cơ bản chúng ta đang sắp xếp theo , khi chúng ta cố gắng xem xét cái cuối cùng, tất cả giá trị tuyệt đối sẽ biến mất. Chi phí bổ sung là hoặc . DiDivi(N1)DkDivi
Rong Ge

OK không cần phải tích cực. Nhưng điều đó cũng có thể được xử lý. Chúng ta chỉ cần nói sự khác biệt giữavà . Ndown là số lượng trước đó bằng 0, Nup là số lượng trước đó bằng 1.Di|Divi|Ndown|Dk|+NupDkDivivjvj
Rong Ge

Điều này có vẻ đầy hứa hẹn, nhưng tôi nghĩ có một số khó khăn hơn nữa nếu các giá trị đầu vào quá gần nhau. Xem xét ví dụ và . Bây giờ nếu chúng ta có thể làm tròn và làm tròn xuống, chúng ta sẽ không còn thuộc tính đẹp mà lỗi thay đổi chính xác 1 tùy thuộc vào việc được làm tròn lên hay xuống. Mặt khác, nếu chúng ta cấm làm tròn làm thay đổi thứ tự các điểm (như tôi có trong câu hỏi ban đầu), thì có vẻ như chúng ta cần theo dõi các cách làm tròn có thể vẫn có trong chương trình động; Chúng ta có thể làm điều đó? xi=1.1xk=1.9xixkxk
Jukka Suomela

1
@Jukka Suomela, Sau khi tôi thấy bình luận của bạn, tôi nhận ra rằng chúng ta không bao giờ nên để một cái gì đó lớn hơn được làm tròn xuống trong khi một cái gì đó nhỏ hơn được làm tròn lên. Điều này có thể được chứng minh nếu bạn kiểm tra tất cả các trường hợp. Sau đó, câu trả lời cho vấn đề (với giới hạn vòng) là rõ ràng: phải có ngưỡng, trên ngưỡng bạn nên làm tròn, bên dưới bạn nên làm tròn xuống, ở ngưỡng có thể một số nên làm tròn và một số xuống nhưng chỉ có chất lượng phụ thuộc vào số lượng Những giải pháp này có thể dễ dàng được liệt kê. {xi}{xi}
Rong Ge

1
Bằng cách kiểm tra tất cả các trường hợp tôi muốn nói, giả sử , hãy nghĩ về một ở một trong ba khu vực được phân chia bởi và và được làm tròn lên hoặc xuống. Trong tất cả 6 trường hợp làm tròn xuống và lên không bao giờ tệ hơn làm tròn xuống và lên. {xi}<{xj}{xk}{xi}{xj}{xk}xixjxjxi
Rong Ge
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.