Attualmente sto lavorando a un progetto ispirato al gioco da tavolo Ticket to Ride . Questo gioco da tavolo è giocato su un grafo non orientato in cui ogni vertice rappresenta una città e ogni spigolo rappresenta una linea ferroviaria rivendicabile che collega due città. I giocatori ottengono punti rivendicando un vantaggio, punti di punteggio in base al numero di auto che il percorso richiede per richiedere. Ci sono anche biglietti che danno punti bonus se il giocatore è in grado di rivendicare un percorso che collega le due città. Ogni giocatore ha solo 45 auto, quindi questo è un problema di allocazione delle risorse.
Sto cercando di scrivere un programma che aiuti gli agenti (umani o IA) a pianificare le rotte da intraprendere in base ai ticket che l'agente deve completare, i percorsi che l'agente ha già richiesto e quali rotte non sono disponibili a causa di altri giocatori averle rivendicate. Ho bisogno di un algoritmo che trovi una serie di sottotitoli in modo tale che ogni biglietto abbia la sua città nello stesso sottografo mentre tenta di ottimizzare alcuni criteri (utilizzo minimo dell'auto, punti massimi per auto, ecc.). Non mi interessa se l'algoritmo recupera tutte le città in un sottografo o se le stringa tutte in una linea senza diramazione (il che aiuterebbe a ottenere il bonus per il percorso più lungo); Voglio qualcosa che consenta all'agente di completare rapidamente i biglietti in modo che possa iniziare a lavorarci su quelli nuovi.
Il problema è che non ho abbastanza familiarità con la teoria dei grafi per conoscere il nome di questo tipo di problema. Ho provato le ricerche con un testo che descrive ciò che sto cercando di fare senza fortuna. Ho anche cercato nei miei vecchi libri di testo ( Introduzione agli algoritmi e Algoritmi in C: Parte 5 - Algoritmi grafici ) per cercare di trovare un dominio del problema grafico che sembra riguardare il mio problema; il più vicino sembra essere il flusso di rete, ma non sembra abbastanza vicino.
Ho provato a risolvere questo problema da solo. Ho scritto un A * che ha segnato ogni serie di sottografi in base alla distanza minima stimata per un nodo, ma non ha funzionato (come avrei scoperto se avessi letto prima l'articolo di Wikipedia su A *). Ho scritto un'implementazione NSGA-II per cercare di risolvere il problema in modo stocastico, ma stranamente sembra peggiorare, più l'insieme iniziale di margini di proprietà è collegato ai ticket. In effetti, l'implementazione NSGA-II "spaventa" e trova percorsi molto strani per collegare i sottografi quando è raccomandato solo un percorso che prima chiamava l'algoritmo.
Qualcuno potrebbe dirmi il nome di questo dominio così posso iniziare a fare ricerche, indicarmi un algoritmo o proporre un algoritmo che potrei provare?