แม้ว่าคำถามของคุณจะไม่พูด แต่ฉันคิดว่าคุณไม่ต้องการให้หน้าต่างเหลื่อมกัน
วิธีการหนึ่งในการแก้ไขปัญหานี้คือการใช้ข้อ จำกัด เช่นแก้Choco มีใครเขียนข้อ จำกัด ในการเข้ารหัสปัญหาของคุณออกมาแก้ปัญหาเพื่อกระทำอย่างชาญฉลาดแล้วปล่อยให้มันทำงาน ซึ่งหมายความว่าการคิดทั้งหมดที่คุณต้องทำจะถูกใช้เพื่อค้นหาวิธีที่ดีในการเข้ารหัสปัญหาไม่ใช่ในการคิดขั้นตอนวิธีและทำการเขียนโปรแกรมและปรับแต่ง นี่คือคำตอบบางส่วนเพื่อให้คุณเริ่มต้น
สมมติว่าขนาดหน้าจอโดย{}xm a x× ym a x
สำหรับแต่ละหน้าต่างคุณจะมีชุดของตัวแปรและข้อ จำกัดx ฉัน , Y ฉัน , H ฉัน , W ฉันWผมxผม, yผม, ชั่วโมงผม, wผม
- xผม, yผม, ชั่วโมงผม, wผม≥ 0
- xi+wi≤xmax
- yi+hi≤ymax
- อาจมีข้อ จำกัด บางประการเกี่ยวกับขนาดที่เล็กที่สุดของหน้าต่างเช่นเป็นต้นhi≥100
- ข้อ จำกัด ด้าน: หากอัตราส่วนกว้างยาว 3: 4 ข้อ จำกัด อาจเป็นโดยที่เป็นคำผิดพลาดที่ไม่ใช่ศูนย์ขนาดเล็กเพื่อให้ไม่สมบูรณ์ ขนาดหน้าต่างมิฉะนั้นคุณจะมีปัญหามากเกินไปϵ4hi−ϵ≤3wi≤4hi+ϵϵ
ตอนนี้คุณต้องดูแลหน้าต่างที่ทับซ้อนกัน สำหรับคู่ของหน้าต่างแต่ละที่คุณจะสร้างข้อ จำกัด เช่นต่อไปนี้ซึ่งจับภาพมุมที่ไม่ปรากฏอยู่W_iสำหรับ , สร้างข้อ จำกัด :Wi,Wji≠jWjWi(x,y)∈{(xj,yj),(xj+wj,yj),(xj,yj+hj),(xj+wj,yj+hj)}
- ¬(xi≤x≤xi+wj∧yi≤y≤yi+hj)h_j)
ข้อ จำกัด ที่ระบุไว้ในตอนนี้จะอธิบายเฉพาะหน้าต่างที่ไม่ได้ซ้อนทับกันซึ่งไม่กระจายไปทางด้านข้างของหน้าจอซึ่งเป็นไปตามข้อ จำกัด ขนาดเล็กที่สุดและรักษาอัตราส่วนภาพไว้
เพื่อให้ได้ขนาดที่พอดีคุณต้องระบุเมตริกที่รวบรวมความหมายของรูปแบบที่ดี ความเป็นไปได้อย่างหนึ่งคือการสมมติว่าคุณต้องการให้ windows มีขนาดและ / หรือคุณต้องการลด "white space" ให้แคบที่สุด ฉันไม่คิดว่าสิ่งนี้สามารถระบุได้โดยใช้ Choco แต่อาจเป็นไปได้ด้วยการแก้ไขข้อ จำกัด อื่น (คนอื่นอาจช่วยได้ที่นี่)
Choco อนุญาตให้หนึ่งเพิ่ม wrt สูงสุดไปยังฟังก์ชันวัตถุประสงค์ที่ระบุเป็นตัวแปรเดี่ยว จากความคิดนี้คุณสามารถเพิ่มสิ่งต่อไปนี้ได้สูงสุด:
โดยการเขียนข้อ จำกัดและบอก Choco เพื่อเพิ่ม{}cost=∑i(hi+wi)cost