คำตอบ:
ผมเขียนคำตอบที่เต็มรูปแบบ (ด้านล่างบรรทัด) ก่อนที่จะพบCVXPYซึ่ง (เช่น CVX สำหรับ MATLAB) ไม่ทุกสิ่งที่ยากสำหรับคุณและมีตัวอย่างที่สั้นมากเกือบจะเหมือนกันกับของคุณที่นี่ คุณจะต้องแทนที่บรรทัดที่เกี่ยวข้องด้วย
p = program(minimize(norm2(A*x-b)),[equals(sum(x),1),geq(x,0)])
คำตอบเก่าของฉันทำมันยากขึ้นด้วย CVXOPT:
ทำตามข้อเสนอแนะของเจฟฟ์เพื่อจัดตารางการทำงานตามวัตถุประสงค์ของคุณให้
แน่นอนว่าเงื่อนไขทั้งหมดเป็นสเกลาร์ดังนั้นคุณสามารถแปลงที่สามและวางอันสุดท้ายได้ (เนื่องจากไม่ได้ขึ้นอยู่กับดังนั้นจะไม่เปลี่ยนว่าให้ค่าต่ำสุดถึงแม้ว่าคุณจะต้องเพิ่มกลับ หลังจากแก้ไขเพื่อให้ได้ค่าที่ถูกต้องตามวัตถุประสงค์ของคุณ) เพื่อรับ นี่ (รวมถึงข้อ จำกัด ของคุณ) มีรูปแบบของโปรแกรมกำลังสองตามที่กำหนดไว้ใน เอกสารประกอบ CVXOPT ที่นี่ซึ่งยังมีรหัสตัวอย่างสำหรับการแก้ปัญหาดังกล่าว
แทนที่จะแก้ปัญหาที่คุณแก้ไขให้แก้
ปัญหานี้เป็นปัญหาการหาค่าเหมาะที่สุดที่แตกต่าง, นูน, ไม่เชิงเส้นซึ่งสามารถแก้ไขได้ใน CVXOPT, IPOPT หรือตัวแก้ปัญหาการเพิ่มประสิทธิภาพนูนอื่น ๆ