Masalah Anda tampaknya bukan, "bahwa jumlah" agen "harus menyediakan persis energi terpisah atau tidak sama sekali untuk setiap permintaan tunggal ...", kan? Atau Anda tidak mengerti saya. Jadi saya akan mencoba menggambarkan masalah saya dengan lebih baik, juga karena saya menemukan solusi.
Dalam masalah saya, saya memiliki satu set agen di mana masing-masing memiliki anggaran sumber daya tertentu, yang dapat berbagi biaya tugas, yang harus "dieksekusi" 1 kali atau tidak (banyak-ke-banyak-penugasan tanpa perlu "jalankan" setiap tugas). Ini berarti: jumlah solusi parsial agen untuk tugas x harus kurang atau sama dengan biaya tugas x. Tujuannya adalah untuk menemukan serangkaian tugas dengan nilai paling tinggi yang dapat dibayar agen.
Saya bekerja dengan perangkat lunak gams jadi saya jelaskan dengan gaya gams: atur agen, t tugas parameter biaya (t), nilai (t) sumber daya parameter (a)
variabel positif y (a, t) (non-int), bagian dari agen a untuk biaya tugas t tujuan:
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);
Ketika saya menulis, saya punya solusi tetapi tidak tahu bagaimana memisahkan solusi tugas parsial. Tetapi sekarang saya mengetahui bahwa saya dapat membangun batasan dengan a
variabel biner z(t)
taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);
sum(a, y(a,t)) / cost(t)
dalam rumusan persamaan adalah sesuatu antara 0 dan 1 dan dengan batasan ini, z
adalah 0 untuk semua kurang dari 1 dan 1 untuk 1. dengan taskcost_bin_constraint
tujuan ini adalah:
maxvalue =e= sum(t, value(t) * z(t));
Saya bertanya-tanya tetapi ini berhasil dan memberi saya solusi yang lebih baik di bawah kendala, untuk membangun tugas penuh atau tidak.
Mungkin Anda juga bisa menambahkan batasan seperti itu? Kendala untuk memenuhi permintaan dengan tepat, dinyatakan dalam ekspresi dengan nilai antara 0 dan 1.