Ik wil het volgende oplossen, maar ik weet niet zo goed welk algoritme ik daarvoor moet gebruiken, of hoe ik een bestaand algoritme aan moet passen. Ik weet ook niet zo goed in welke klasse dit probleem valt, aangezien kleine aanpassingen kunnen iets soms ineens NPC maken...
Anyway, dit wil ik doen. Een vorm van het assignment probleem, waar een N aantal Agents gekoppeld moeten worden aan een M aantal Tasks, zodat er een 1-op-1 relatie tussen Agents en Tasks ontstaat. Elke koppeling heeft een bepaalde cost. Dit standaard probleem kan je beschrijven met een (2D) Cost matrix, en vervolgens oplossen in polynomiale tijd met het munkres of hongaarse algoritme. Dat heb ik gedaan, dat werkt.
Het uitgebreide probleem is nu dat ik categorieen in zowel Tasks als Agents heb. De extra constraint is nu dat elke Task categorie slecht 1 agent uit dezelfde Agent categorie toegewezen kan krijgen. Dus stel dat je Rode en Blauwe agents hebt, en je hebt Lange en Korte tasks, dan mogen twee tasks uit de Lange categorie niet twee rode of blauwe agents gekoppeld krijgen, maar alleen een rode en een blauwe. Wat wel mag is dat er in de Korte task categorie een rode voorkomt zowel als in de Lange categorie.
Iemand een idee? Ik vind een (goed) benaderend algoritme ook best als optimaal lastig is. Verder heb ik het idee dat dit te formuleren is als een flow algoritme, maar ik heb geen idee hoe.
Uitgebreider voorbeeld:
Je hebt letter-cijfer combinaties: A1, A2, A3, ... A9, B1, B2, B3, ..., B9, ... Z1, Z2, Z3, ..., Z9
En je hebt 5 slots: met 3 vrij posities: 1{. . .}, 2{. . .}, ..., 5{. . .}
Verder is er een cost voor elke cijfer slot combinatie: C(i,j) = n_ij. Dus een A1 in slot 1 heeft dezelfde cost als een B1 of C1 in slot 1, maar een andere cost dan een A2 in slot 1. Allemaal ongeacht de (een van de drie) positie in het slot.
Hoe assign ik nu (1-op-1) letter-combinaties aan de vrij plaatsen in de slots, zodat de cost minimaal is? Met de constraint dat er in elk slot nooit twee keer hetzelfde cijfer voorkomt?
Dit mag: 1{ A1, B2, A3}, 2{B1, C2, D3}
Dit niet: 1{A1, B1, ...} (cijfer 1 twee keer in zelfde slot)
Dit ook niet: 1{A1, B2, A3}, {A1, ...} (niet 1-op-1, A1 dubbel)
Anyway, dit wil ik doen. Een vorm van het assignment probleem, waar een N aantal Agents gekoppeld moeten worden aan een M aantal Tasks, zodat er een 1-op-1 relatie tussen Agents en Tasks ontstaat. Elke koppeling heeft een bepaalde cost. Dit standaard probleem kan je beschrijven met een (2D) Cost matrix, en vervolgens oplossen in polynomiale tijd met het munkres of hongaarse algoritme. Dat heb ik gedaan, dat werkt.
Het uitgebreide probleem is nu dat ik categorieen in zowel Tasks als Agents heb. De extra constraint is nu dat elke Task categorie slecht 1 agent uit dezelfde Agent categorie toegewezen kan krijgen. Dus stel dat je Rode en Blauwe agents hebt, en je hebt Lange en Korte tasks, dan mogen twee tasks uit de Lange categorie niet twee rode of blauwe agents gekoppeld krijgen, maar alleen een rode en een blauwe. Wat wel mag is dat er in de Korte task categorie een rode voorkomt zowel als in de Lange categorie.
Iemand een idee? Ik vind een (goed) benaderend algoritme ook best als optimaal lastig is. Verder heb ik het idee dat dit te formuleren is als een flow algoritme, maar ik heb geen idee hoe.
Uitgebreider voorbeeld:
Je hebt letter-cijfer combinaties: A1, A2, A3, ... A9, B1, B2, B3, ..., B9, ... Z1, Z2, Z3, ..., Z9
En je hebt 5 slots: met 3 vrij posities: 1{. . .}, 2{. . .}, ..., 5{. . .}
Verder is er een cost voor elke cijfer slot combinatie: C(i,j) = n_ij. Dus een A1 in slot 1 heeft dezelfde cost als een B1 of C1 in slot 1, maar een andere cost dan een A2 in slot 1. Allemaal ongeacht de (een van de drie) positie in het slot.
Hoe assign ik nu (1-op-1) letter-combinaties aan de vrij plaatsen in de slots, zodat de cost minimaal is? Met de constraint dat er in elk slot nooit twee keer hetzelfde cijfer voorkomt?
Dit mag: 1{ A1, B2, A3}, 2{B1, C2, D3}
Dit niet: 1{A1, B1, ...} (cijfer 1 twee keer in zelfde slot)
Dit ook niet: 1{A1, B2, A3}, {A1, ...} (niet 1-op-1, A1 dubbel)
[ Voor 26% gewijzigd door Zoijar op 10-04-2009 22:43 ]