Алгоритми для узагальненої задачі від багатьох до багатьох


20

Я не можу знайти будь-яку літературу про алгоритми, які можна використовувати для вирішення узагальненої задачі від багатьох до багатьох (GAP), тобто моделей, де одному агенту може бути призначено не тільки більше завдань, але й декілька агентів присвоєне одному завданню (ПТ "один на один" і "один на багато" обговорюється в роботі Пентіко). Мені відомі проблеми, пов'язані із завданням, але я зіткнувся з такою проблемою під час свого дослідження і хотів би дізнатися більше про те, як їх вирішити. Чи можливо, що такий багато-багато-багато GAP відомий під іншою назвою, чи є інша причина, чому так мало літератури про нього можна знайти?

Пентіко, Д. Проблемні завдання: Дослідження про золоту річницю . Європейський журнал оперативних досліджень (2007); 176 (2): 774-793.


1
Привіт, Геррітжан. Ласкаво просимо до Scicomp! :) Чи знайомі ви з лагранжевою евристикою для узагальненої задачі? sciencedirect.com/science/article/pii/S0898122110002609 або irma-international.org/viewtitle/58969 або crcnetbase.com/doi/abs/10.1201/9781420010749.ch48 ?
Павло

1
Мені здається, що випадок присвоєння частин завдання декільком агентам можна моделювати, принаймні у випадках, коли витрати лінійно розподіляються, трактуючи одне завдання так, ніби це замість кількох підзадач. Без додаткових подробиць важко дізнатися, як ваші проблеми можуть бути більш "загальними", ніж узагальнені проблеми присвоєння. У статті Wikipeida є хороша експозиція та посилання на пару посилань на цю тему.
hardmath

Дякую, @Paul. Я загляну в папери, хоча вони здаються досить складними для мого нетренованого ока. Потім я підозрюю, що проблема є складною, і мені, мабуть, доведеться зробити щось спрощення. hardmath, моя проблема полягає в основному в тому, щоб розподілити енергію в мережі: вузли попиту та попиту повинні бути узгоджені, використовуючи (зважені) з'єднання між ними, в найбільш оптимальному варіанті, з мінімальним використанням пропозиції для задоволення всіх потреб. Звичайно, можна використовувати додаткові обмеження, як-от максимальна потужність на з'єднаннях і т. Д.
Герріт Ян

1
@GerritJan: Це проблема np-hard, тому вона потребує схеми наближення. Якщо вам потрібне гарне наближення, ваш алгоритм, можливо, повинен бути трохи складним.
Пол

2
@GerritJan: Це означає, що точне "оптимальне" рішення можна гарантувати лише шляхом перевірки всіх можливих конфігурацій. Ці можливі рішення з часом зростають (принаймні) експоненціально, завдяки чому навіть відносно скромні проблеми практично неможливо вирішити точно за розумну кількість часу.
Павло

Відповіді:


1

Схоже, ваша проблема не полягає в тому, що сума "агентів" повинна забезпечувати рівномірну частку енергії або нічого на кожну потребу ... ", правда? Або ти мене не зрозумів. Тому я спробую краще описати свою проблему ще й тому, що знайшов рішення.

У своїй проблемі я маю набір агентів, у кожного з яких є бюджет певних ресурсів, який може поділити вартість завдань, які повинні бути "виконані" 1 раз чи ні (завдання багато-багато-багато без необхідності "виконати" кожне завдання). Це означає: сума часткових розв’язків агентів для завдання x повинна бути меншою або рівною вартості завдання x. Мета - знайти набір завдань з найбільшою вартістю, яку можуть заплатити агенти.

Я працюю з програмним забезпеченням gams, тому описую його у стилі gams: встановіть агенти, t параметр параметра вартості (t), значення (t) ресурсів параметрів (a)

позитивна змінна y (a, t) (non-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);

Як я писав, я мав рішення, але не знав, як відокремити часткові рішення завдань. Але тепер я дізнався, що я можу створити обмеження з a

двійкова змінна 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.


1

Існує детермінований алгоритм відпалу, який вирішує задачу присвоєння один на один або еквівалентно задачу розподілу діадичної матриці.

Однак замість використання цілих [0, 1] значень можна використовувати дробові значення (таким чином алгоритм залишається тим самим) або навіть розширити його для обробки більш ніж одного призначення (додаючи внутрішній цикл і есеенціально матриця стає гіпервимірним масивом або тензор)

Документ знаходиться тут: http://www.researchgate.net/publication/2382666_Pairwise_Data_Clustering_by_Deterministic_Annealing/file/d912f50c75945d835b.pdf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.