Tiêu chí dừng cho Nelder Mead


11

Tôi đang cố gắng thực hiện thuật toán Nelder-Mead để tối ưu hóa một chức năng. Các trang wikipedia về Nelder-Mead là đáng ngạc nhiên rõ ràng về toàn bộ thuật toán, ngoại trừ tiêu chí dừng của nó. Có nó buồn bã nói:

Kiểm tra sự hội tụ [cần làm rõ] .

Tôi đã thử và tự mình thử nghiệm một vài tiêu chí:

  • Dừng nếu nơi ε là nhỏ và nơi x ii -thứ đỉnh của simplex, đặt hàng từ thấp ( f ( x 1 ) ) đến cao ( f ( x N + 1 )f(xN+1)f(x1)<ϵϵxiif(x1)f(xN+1)) các giá trị hàm. Nói cách khác, khi giá trị tối đa của đơn giản gần như bằng giá trị tối thiểu. Tôi thấy điều này không hoạt động đúng, vì điều này không đảm bảo về chức năng làm gì bên trong đơn giản. Ví dụ, hãy xem xét hàm: Tất nhiên đây là chuyện nhỏ để tối ưu hóa, nhưng giả sử chúng ta làm điều này với NM và để hai điểm đơn giản của chúng ta là x 1 = - 1x 2 = 1 . Thuật toán sẽ hội tụ ở đây mà không tìm thấy tối ưu của nó.

    f(x)=x2
    x1=1x2=1
  • Tùy chọn thứ hai liên quan đến việc đánh giá trọng tâm của đơn giản: dừng nếu . Điều này giả định rằng nếu điểm thấp nhất của Simplex và centroid có các giá trị tương tự như vậy, thì Simplex đủ nhỏ để gọi hội tụ.|f(x1)f(xc)|<ϵ

Đây có phải là một cách thích hợp để kiểm tra sự hội tụ? Hoặc có một cách thành lập để kiểm tra này? Tôi không thể tìm thấy bất kỳ nguồn nào về điều này, vì hầu hết các lần tìm kiếm tập trung vào sự phức tạp của thuật toán.


xN+1x1xN

3
Tiêu chí dừng tốt nhất cho Nelder Mead là trước khi bạn bắt đầu.
Mark L. Stone

NN+1

@NatePope Đó là ý định của tôi, vâng, tôi sẽ thêm làm rõ cho câu hỏi. \
JAD

Câu trả lời:


6

Tài khoản của "thuật toán đơn giản xuống dốc" này trong các phiên bản gốc của Công thức toán số đặc biệt sáng suốt và hữu ích. Do đó tôi sẽ trích dẫn các phần có liên quan của nó. Đây là nền tảng:

NN

N+1P0

(10.4.1)Pi=P0+λei
eiNλ

Hầu hết các bước chỉ [di chuyển] điểm của đơn giản trong đó hàm lớn nhất ("điểm cao nhất") qua mặt đối diện của đơn giản đến điểm thấp hơn. ...

Bây giờ cho vấn đề trong tầm tay, chấm dứt thuật toán. Lưu ý về tính tổng quát của tài khoản: các tác giả cung cấp lời khuyên trực quan và hữu ích để chấm dứt mọi trình tối ưu hóa đa chiều và sau đó trình bày cụ thể cách áp dụng cho thuật toán cụ thể này. Đoạn đầu tiên trả lời câu hỏi trước chúng tôi:

Tiêu chí chấm dứt có thể là tinh tế .... Chúng tôi thường có thể xác định một "chu kỳ" hoặc "bước" của thuật toán đa chiều của chúng tôi. Sau đó có thể chấm dứt khi khoảng cách vectơ di chuyển trong bước đó nhỏ hơn một chút so với dung sai TOL. Ngoài ra, chúng tôi có thể yêu cầu giảm giá trị hàm trong bước kết thúc nhỏ hơn một chút so với dung sai FTOL. ...

NN+1(10.4.1)P0

Khởi động lại không bao giờ nên rất tốn kém; Rốt cuộc, thuật toán của bạn đã hội tụ đến điểm khởi động lại một lần và bây giờ bạn đang bắt đầu thuật toán ở đó.

[Trang 290-292.]

xyT>0

(1)|x||y|f(x,y)=2|x||y||x|+|y|<T

f(x,y)=(|x|+|y|)/2

(1)

Tài liệu tham khảo

William H. Press và cộng sự. , Công thức toán số: Nghệ thuật tính toán khoa học. Nhà xuất bản Đại học Cambridge (1986). Truy cập http://numerical.recipes/ để có phiên bản mới nhất.


1
Cảm ơn cho cái nhìn sâu sắc về khởi động lại. Tôi nghĩ rằng đây chỉ là chạy thuật toán từ các điểm khởi đầu khác nhau, nhưng thực sự có nhiều thứ hơn thế.
JAD

Tôi đã không nghĩ trước về ý nghĩa có thể của "khởi động lại." Trong bối cảnh hiện tại, tôi có thể đã sử dụng một thuật ngữ như "đánh bóng" cho "khởi động lại", nhưng có lẽ điều đó cũng không hoàn toàn đúng. Kiểu "khởi động lại" được ủng hộ cho phương pháp đơn giản có thể khá đặc biệt đối với nó.
whuber

9

Không phải là một câu trả lời hoàn chỉnh, nhưng quá dài cho một nhận xét và có thể đưa bạn đi đúng hướng.

Chủ đề này được xử lý ngắn gọn trên trang 171 của "Phương pháp số nhỏ gọn cho máy tính" 2nd Ed., Bởi John C. Nash. Và tình cờ là tài liệu tham khảo được trích dẫn cho thói quen Nelder-Mead được triển khai trong optim()chức năng của R. Trích dẫn phần có liên quan:

test=[(i=1n+1[S(bi)S¯]2)/n]1/2
S¯=i=1n+1S(bi)/(n+1).

S(.)bn+1nbHbL

S(bL)S(bH)

Nhìn nhanh vào nguồn optim()chỉ ra rằng nó sử dụng sự khác biệt giữa các giá trị hàm cao nhất và thấp nhất (của các điểm xác định đơn giản) để xác định độ hội tụ: if (VH <= VL + convtol || VL <= abstol) break;Đâu VHlà giá trị cao và VLgiá trị thấp. Điều này đi kèm với sự cảnh báo mà tôi đã xem xét rất nhanh về nguồn, và có lẽ tôi đang thiếu một cái gì đó.

Bây giờ, tùy chọn của bạn (1) dường như là cách tiếp cận thứ hai được Nash ủng hộ. Ông cũng thảo luận về vấn đề bạn gặp phải:

(n+1)(n1)n

Các tài liệu tham khảo ban đầu mà Nash đề cập ở đây là:

Nelder JA, Mead R. 1965. Một phương pháp đơn giản để giảm thiểu chức năng. Tạp chí máy tính 7: 308-313.

O'Neill R. 1971. Thuật toán AS 47: Tối thiểu hóa chức năng bằng cách sử dụng thủ tục đơn giản. Thống kê áp dụng 20: 338-345.


3

fmin(t)minall corners f(Xi,t)
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

n+1

  1. vấn đề: địa hình gồ ghề, có lẽ với những hạn chế xấu hoặc những hạn chế ngớ ngẩn
  2. thuật toán, cân bằng giữa khám phá và di chuyển (và độ phức tạp của phần mềm)
  3. quy tắc dừng đúng

vẫn còn để được nhìn thấy - trường hợp thử nghiệm thực sự hoan nghênh.

(Một Stopiterlớp thực có nhiều điều kiện dừng, ngoài ra patience, đơn giản nhất là giờ đồng hồ treo tường.)

Xem thêm:
NLopt : nhiều thuật toán bao gồm Nelder-Mead, dễ so sánh. Đặc biệt là xem các lưu ý về So sánh thuật toán
Xuống dốc : kiên nhẫn dừng lại vớimin_improvement

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.