ดูเหมือนว่าปัญหาของคุณจะไม่เกิดขึ้น "ว่าผลรวมของ" ตัวแทน "ต้องจัดหาพลังงานที่ไม่ต่อเนื่องหรือไม่มีความต้องการอะไรเลย ... " ใช่มั้ย หรือคุณไม่เข้าใจฉัน ดังนั้นฉันจะพยายามอธิบายปัญหาของฉันให้ดีขึ้นเช่นกันเพราะฉันพบวิธีแก้ปัญหา
ในปัญหาของฉันฉันมีชุดของตัวแทนที่แต่ละคนมีงบประมาณของทรัพยากรบางอย่างที่สามารถแบ่งปันค่าใช้จ่ายของงานซึ่งควรจะ "ดำเนินการ" 1 ครั้งหรือไม่ (การมอบหมายงานหลายต่อหลายคนโดยไม่จำเป็นต้อง "ดำเนินการ" ทุกงาน) หมายความว่า: ผลรวมของโซลูชันบางส่วนของเอเจนต์สำหรับงาน x ควรน้อยกว่าหรือเท่ากับต้นทุนของงาน x มีวัตถุประสงค์เพื่อค้นหาชุดของงานที่มีค่ามากที่สุดซึ่งตัวแทนสามารถจ่ายได้
ฉันทำงานกับซอฟต์แวร์ gams ดังนั้นฉันจึงอธิบายในรูปแบบ gams: ตั้งตัวแทน, ค่าพารามิเตอร์งาน t (t), ค่า (t) ทรัพยากรพารามิเตอร์ (a)
ตัวแปรบวก y (a, t) (ไม่ใช่ int), ส่วนหนึ่งของเอเจนต์ a สำหรับค่าใช้จ่ายของวัตถุประสงค์งาน t:
maxvalue =e= sum((a,t), value(t) * y(a,t) / cost(t) );
agentresource_max_constraint(a).. sum(t, y(a,t)) =l= resources(a);
taskcost_max_constraint.. sum(a, y(a,t)) =l= cost(t);
อย่างที่ฉันเขียนฉันมีวิธีแก้ปัญหา แต่ไม่รู้วิธีแยกโซลูชันงานบางส่วน แต่ตอนนี้ฉันพบว่าฉันสามารถสร้างข้อ จำกัด ด้วย
ตัวแปรไบนารี z(t)
taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);
sum(a, y(a,t)) / cost(t)
ในสูตรสมการคืออะไรบางอย่างระหว่าง 0 ถึง 1 และโดยข้อ จำกัด นี้z
คือ 0 สำหรับน้อยกว่า 1 และ 1 สำหรับ 1 โดยมีtaskcost_bin_constraint
วัตถุประสงค์นี้จะเป็น:
maxvalue =e= sum(t, value(t) * z(t));
ฉันสงสัย แต่สิ่งนี้ได้ผลและให้วิธีแก้ปัญหาที่ดีกว่าภายใต้ข้อ จำกัด เพื่อสร้างงานให้เต็มหรือไม่
บางทีคุณสามารถเพิ่มข้อ จำกัด ดังกล่าวได้หรือไม่ ข้อ จำกัด ในการเติมเต็มความต้องการอย่างแน่นอนซึ่งแสดงออกในนิพจน์ที่มีค่าระหว่าง 0 ถึง 1