การสร้างเวกเตอร์สุ่มด้วยข้อ จำกัด


10

ฉันจำเป็นต้องสร้างเวกเตอร์สุ่มของจำนวนจริง a_i ที่ปฏิบัติตามข้อ จำกัด ดังต่อไปนี้:

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.

อะไรคืออัลกอริทึมทั่วไปในการสร้างเวกเตอร์ชนิดนี้อย่างมีประสิทธิภาพ


1
คุณหมายถึงอะไรโดยข้อ จำกัด ที่สี่ "ขนาดของ a is .. "
M. Tibbits

ความผิดพลาดของฉัน. คำอธิบายเสร็จแล้ว ขอบคุณสำหรับความคิดเห็น.
LouisChiffre

วิธีการที่เป็นa_iดังต่อไปนี้การกระจายp_iและยังเป็นน้อยกว่าที่c? นั่นเป็นเพราะการกระจายตัวp_iก็น้อยลงเช่นกันc? คุณคิดว่าการกระจายแบบไหนอยู่?
deps_stats

@deps_stats จุดที่ดีมาก รหัสหลอกไม่ชัดเจนมาก การกระจายตัวที่ฉันมีอยู่คือการกระจายตัวปัวซอง แต่ละองค์ประกอบจะตามด้วยการกระจายแบบปัวซองพร้อมแลมบ์ดาที่แตกต่างกัน โดยที่ในใจฉันเดาว่าเงื่อนไขแรก (a_i <c) ไม่จำเป็นเนื่องจากฉันสามารถ rescale a_i เมื่อสิ้นสุดรุ่นเพื่อให้เป็นที่พอใจ
LouisChiffre

ให้ฉันถามอย่างอื่น ... คือc, A, Bและ lambdas ถาวร?
deps_stats

คำตอบ:


4

ถ้าฉันเข้าใจคุณอย่างถูกต้องจะมีเพียงคะแนนในพื้นที่เล็ก ๆ ในมิติ n ที่ตรงกับข้อ จำกัด ของคุณ

ข้อ จำกัด แรกของคุณ จำกัด มันไว้ที่ด้านในของ hypersphere ซึ่งทำให้ฉันนึกถึง comp.graphics.algorithms คำถามที่พบบ่อย"เครื่องแบบจุดสุ่มบนทรงกลม"และวิธีการสร้างจุดกระจายแบบสม่ำเสมอในลูกบอลหน่วย 3มิติ? ข้อ จำกัด ที่สองแบ่งบิตออกจาก hypersphere และข้อ จำกัด อื่น ๆ เพิ่มเติมลดลงในระดับที่ตรงกับข้อ จำกัด ของคุณ

ฉันคิดว่าสิ่งที่ง่ายที่สุดที่จะทำคือหนึ่งในวิธีการที่แนะนำโดย FAQ:

  • เลือกกล่องกำหนดขอบเขตแนวแกนโดยพลการบางส่วนที่เราแน่ใจว่ามีปริมาณทั้งหมด ในกรณีนี้ -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c มีปริมาตรที่ถูก จำกัด ทั้งหมดเนื่องจากมีไฮเปอร์สเปร์ที่อธิบายโดยข้อ จำกัด แรกและข้อ จำกัด อื่น ๆ ยังคงอยู่ ออกไปที่ระดับเสียงนั้น
  • อัลกอริธึมจะเลือกคะแนนอย่างสม่ำเสมอตลอดกล่องที่มีขอบเขต ในกรณีนี้อัลกอริทึมจะกำหนดแต่ละพิกัดของเวกเตอร์ของผู้สมัครให้อิสระจำนวนสุ่มกระจายอย่างสม่ำเสมอจาก -c ถึง + c (ฉันสมมติว่าคุณต้องการจุดกระจายที่มีความหนาแน่นเท่ากันตลอดทั้งเล่มนี้ฉันคิดว่าคุณสามารถเลือกอัลกอริธึมบางส่วนหรือทั้งหมดด้วยการแจกแจงแบบปัวซองหรือการกระจายแบบไม่สม่ำเสมออื่น ๆ ได้ถ้าคุณมีเหตุผลบางประการ)
  • เมื่อคุณมีเวกเตอร์ผู้สมัครแล้วให้ตรวจสอบข้อ จำกัด แต่ละข้อ หากมันล้มเหลวให้กลับไปเลือกจุดอื่น
  • เมื่อคุณมีเวกเตอร์ผู้สมัครแล้วให้เก็บไว้ที่อื่นเพื่อใช้ในภายหลัง
  • หากคุณมีเวกเตอร์ที่เก็บไว้ไม่เพียงพอให้กลับไปลองสร้างอีกเวกเตอร์หนึ่ง

ด้วยตัวสร้างตัวเลขสุ่มคุณภาพสูงเพียงพอนี้จะช่วยให้คุณมีชุดของพิกัดที่จัดเก็บที่ตรงกับเกณฑ์ของคุณด้วยความหนาแน่นสม่ำเสมอ (คาดว่า)

อนิจจาถ้าคุณมีมิติที่ค่อนข้างสูง n (เช่นถ้าคุณสร้างเวกเตอร์แต่ละตัวจากรายการพิกัดที่ค่อนข้างยาว) ทรงกลมที่ถูกจารึกไว้ (น้อยกว่าเสียงวิทช์ดาวน์ที่ลง) มีส่วนเล็ก ๆ ของปริมาตรรวมของ กล่องรวมทั้งหมดดังนั้นจึงอาจจำเป็นต้องดำเนินการซ้ำหลายครั้งส่วนใหญ่จะสร้างจุดที่ถูกปฏิเสธนอกเขตพื้นที่ที่มีข้อ จำกัด ของคุณก่อนที่จะหาจุดในพื้นที่ที่มีข้อ จำกัด ของคุณ คอมพิวเตอร์ทุกวันนี้ค่อนข้างเร็วแล้วมันจะเร็วพอไหม


ดังนั้นสิ่งที่คุณแนะนำคือการสุ่มตัวอย่างพื้นที่อย่างมีประสิทธิภาพ ฉันมีปัญหาที่คล้ายกันยกเว้นการค้นหากล่อง bounding ไม่สามารถทำได้แบบสแตติก (IE, ไม่สามารถกำหนดค่าตายตัว) จากประสบการณ์สิ่งนี้จะพังลงหากข้อ จำกัด ของคุณอยู่ในรูปแบบf1(x1) + f2(x2) == Cคำแนะนำใด ๆ ที่นี่?
Groostav

ใช่วิธีการสุ่มตัวอย่างจะไม่ทำงานหากคุณมีข้อ จำกัด ที่เท่าเทียมกัน ("==") ข้อ จำกัด เช่นจุดที่อยู่บนพื้นผิวของทรงกลมหรือบนพื้นผิวของทรงกระบอก ฯลฯ (รัศมี == R) แทนที่จะอยู่ภายในทรงกลม (รัศมี <= R) การเลือกจุดที่สม่ำเสมอเหนือทั้งวอลลุ่มจะ "ไม่เคย" (ความน่าจะเป็นใกล้กับ 0) ไปยังพื้นผิวที่คุณต้องการ ดังนั้นคุณต้องเลือกเฉพาะจุดที่อยู่บนพื้นผิวนั้น - เช่นเพื่อหาคะแนน [x1, x2, x3] เช่นนั้นที่ f1 (x1) + f2 (x2) == C คุณสามารถสุ่มเลือก x1 แล้วบังคับได้ x2 = inverse_f2 (C - f1 (x1))
David Cary

สำหรับกรณีพิเศษของจุดกระจายอย่างสม่ำเสมอบนพื้นผิวของทรงกลมให้ดูที่"จุดสุ่มเครื่องแบบบนทรงกลม"
David Cary

@Groostav: บางทีคำถามของคุณอาจแตกต่างจากคำถามเดิมที่คุณสามารถโพสต์เป็นคำถามระดับบนสุดใหม่ได้หรือไม่ "ฉันเพิ่งได้รับแจ้งว่าฉันต้องโพสต์คำถามติดตามทำไมและอย่างไร"
David Cary
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.