Tạo các vectơ ngẫu nhiên với các ràng buộc


10

Tôi cần tạo các vectơ ngẫu nhiên của các số thực a_i thỏa mãn các ràng buộc sau:

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

Điều gì sẽ là thuật toán điển hình để tạo ra loại vectơ này một cách hiệu quả?


1
Ý bạn là gì bởi ràng buộc thứ tư, "Độ lớn của a là .."
M. Tibbits

Lỗi của tôi. Mô tả xong. Cảm ơn vì bạn đã phản hồi.
LouisChiffre

Làm thế nào là a_itheo phân phối p_ivà cũng ít hơn đó c? Đó là bởi vì phân phối p_icũng ít hơn c? Bạn đang nghĩ đến phân phối nào?
deps_stats

@deps_stats. Điểm rất tốt. Mã giả không rõ ràng lắm. Phân phối tôi có trong tâm trí là phân phối poisson. Mỗi yếu tố theo một phân phối poisson với một lambda khác nhau. Với ý nghĩ đó, tôi đoán điều kiện đầu tiên (a_i <c) là không cần thiết vì tôi chỉ có thể giải cứu a_i ở cuối thế hệ để thỏa mãn nó.
LouisChiffre

Hãy để tôi hỏi cái gì khác ... Là những c, A, Bvà lambdas cố định?
deps_stats

Câu trả lời:


4

Nếu tôi hiểu bạn một cách chính xác, chỉ các điểm trong một số lượng nhỏ không gian n chiều đáp ứng các ràng buộc của bạn.

Ràng buộc đầu tiên của bạn ràng buộc nó vào bên trong của một siêu cầu, điều này làm tôi nhớ đến câu hỏi tổng hợp. Thuật toán "Điểm ngẫu nhiên đồng nhất trên quả cầu"Làm thế nào để tạo các điểm phân bố đồng đều trong bóng đơn vị 3-d? Ràng buộc thứ hai cắt một chút ra khỏi siêu cầu và các ràng buộc khác sẽ giảm dần ở âm lượng đáp ứng các ràng buộc của bạn.

Tôi nghĩ rằng điều đơn giản nhất để làm là một trong những cách tiếp cận được đề xuất bởi FAQ:

  • chọn một số hộp giới hạn liên kết trục tùy ý mà chúng tôi chắc chắn chứa toàn bộ âm lượng. Trong trường hợp này, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c chứa toàn bộ âm lượng bị ràng buộc, vì nó chứa siêu âm được mô tả bởi ràng buộc đầu tiên và các ràng buộc khác tiếp tục thay đổi đi ở âm lượng đó.
  • Thuật toán thống nhất chọn các điểm trong suốt khung giới hạn đó. Trong trường hợp này, thuật toán đặt độc lập mỗi tọa độ của một vectơ ứng cử viên thành một số ngẫu nhiên phân phối đồng nhất độc lập từ -c đến + c. (Tôi giả sử bạn muốn các điểm được phân phối với mật độ bằng nhau trong tập này. Tôi cho rằng bạn có thể làm cho thuật toán chọn một số hoặc tất cả các tọa độ với phân phối Poisson hoặc một số phân phối không đồng nhất khác, nếu bạn có lý do nào đó để làm điều đó).
  • Khi bạn có một vectơ ứng cử viên, hãy kiểm tra từng ràng buộc. Nếu nó không thành công, hãy quay lại và chọn một điểm khác.
  • Một khi bạn có một vector ứng cử viên, lưu trữ nó ở đâu đó để sử dụng sau.
  • Nếu bạn không có đủ các vectơ được lưu trữ, hãy quay lại và thử tạo một vectơ khác.

Với trình tạo số ngẫu nhiên đủ chất lượng cao, điều này cung cấp cho bạn một bộ tọa độ được lưu trữ đáp ứng các tiêu chí của bạn với mật độ đồng nhất (dự kiến).

Than ôi, nếu bạn có chiều thứ n tương đối cao (nghĩa là, nếu bạn xây dựng từng vectơ ra khỏi danh sách tọa độ tương đối dài), hình cầu được ghi (ít hơn nhiều so với thể tích giảm dần của bạn) có một phần nhỏ đáng ngạc nhiên trong tổng thể tích tổng hộp giới hạn, do đó, nó có thể cần phải thực hiện nhiều lần lặp, hầu hết chúng tạo ra các điểm bị từ chối bên ngoài vùng bị ràng buộc của bạn, trước khi tìm thấy một điểm bên trong vùng bị ràng buộc của bạn. Vì máy tính ngày nay khá nhanh, liệu có đủ nhanh?


Vì vậy, những gì bạn đang đề xuất là hiệu quả để lấy mẫu không gian. Tôi đã gặp một vấn đề tương tự ngoại trừ việc tìm một hộp giới hạn không thể được thực hiện tĩnh (IE, không thể được mã hóa cứng). Từ kinh nghiệm, điều này bị phá vỡ nếu các ràng buộc của bạn có dạng f1(x1) + f2(x2) == CBất kỳ đề xuất nào ở đây?
Groostav

Có, phương pháp lấy mẫu không hoạt động nếu bạn có các ràng buộc bằng ("=="). Các ràng buộc như các điểm nằm trên bề mặt của một hình cầu hoặc trên bề mặt của hình trụ, v.v. (radius == R), thay vì bên trong hình cầu (bán kính <= R). Chọn điểm thống nhất trên toàn bộ âm lượng sẽ "không bao giờ" (xác suất gần bằng 0) chạm vào bề mặt mong muốn của bạn. Vì vậy, bằng cách nào đó bạn chỉ cần chọn các điểm nằm trên bề mặt đó - nghĩa là, để tìm các điểm [x1, x2, x3] sao cho F1 (x1) + f2 (x2) == C, bạn có thể chọn ngẫu nhiên x1 và sau đó buộc x2 = inverse_f2 (C - f1 (x1)).
David Cary

Đối với trường hợp đặc biệt của các điểm phân bố đồng đều trên bề mặt của một hình cầu, xem "Điểm ngẫu nhiên đồng nhất trên hình cầu" .
David Cary

@Groostav: Có lẽ câu hỏi của bạn đủ khác với câu hỏi ban đầu mà bạn có thể đăng nó dưới dạng câu hỏi cấp cao mới? "Tôi vừa được thông báo rằng tôi phải đăng câu hỏi tiếp theo, tại sao và như thế nào?"
David Cary
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.